Direct3D 9 때부터 있던 DXTrace 함수가 있다.
Direct3D의 대부분의 함수는 HRESULT 타입으로 값을 반환하는데
DirectX의 대부분의 함수는 HRESULT형으로 값을 반환하는데 DXTrace 함수는 이때 발생한 에러에 대한 내용을 출력하는 사용되는 함수이다.
원래의 사용법은
#if defined(DEBUG) | defined(_DEBUG)
#ifndef HR
#define HR(x) \
{ \
HRESULT
hr = (x); \
if
(FAILED(hr)) \
{ \
DXTrace(__FILE__, (
DWORD
)__LINE__, hr, L#x,
true
); \
} \
}
#endif
#else
#ifndef HR
#define HR(x) (x)
#endif
#endif
이다.
함수의 각 파라메터는
DXTrace(
__FILE__ :: 에러가 발생한 파일,
__LINE__ :: 에러가 발생한 라인,
hr :: 에러가 발생한 원인이 들어 있는 HRESULT 값,
L#x :: 문자열 타입으로 에러가 발생했을때 메시지창에 띄울 내용,
flag :: 메시지 창을 띄울 것인가?)
를 의미한다.
다만 이 함수는 dxerr.lib, dxerr.h에 포함되어 있는데 이 라이브러리와 헤더는 DX SDK가 Windows10 SDK에 포함되면서 사라졌다.
그렇기 때문에 에러 메시지를 출력할 다른 방법을 이용해야 한다. 그 방법의 하나로
#if defined(DEBUG) || defined(_DEBUG)
#ifndef HR
#define HR(x) \
{ \
HRESULT
hr = (x); \
if
(FAILED(hr)) \
{ \
LPWSTR
output; \
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | \
FORMAT_MESSAGE_IGNORE_INSERTS | \
FORMAT_MESSAGE_ALLOCATE_BUFFER, \
NULL, \
hr, \
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), \
(
LPTSTR
) &output, \
0, \
NULL); \
MessageBox(NULL, output, L
"Error"
, MB_OK); \
} \
}
#endif
#else
#ifndef HR
#define HR(x) (x)
#endif
#endif
DXTrace 함수 대신에 FormatMessage 함수와 MessageBox를 이용하는 것이다.
[유니티 어필리에이트 프로그램]
아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.
에셋스토어
여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.
assetstore.unity.com
Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store
Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!
store.unity.com
Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store
Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.
store.unity.com
[투네이션]
-
toon.at
[Patreon]
WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon
WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.
www.patreon.com
[디스코드 채널]
Join the 베르의 게임 개발 채널 Discord Server!
Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.
discord.com
'Direct3D > Direct3D11 개발' 카테고리의 다른 글
[Direct3D] Windows 7,8 그리고 8.1을 위한 D3D 9.x/10.x/11.x의 D3D Debug Output과 DirectX Control Panel (0) | 2016.11.01 |
---|---|
[Direct3D] Direct3D Debug 빌드 (0) | 2016.11.01 |
[Direct3D 11] LNK 2019 Error D3D11CreateDevice (0) | 2016.11.01 |
[Direct3D 11] Visual Studio 2015에서의 Direct3D 11 세팅 (0) | 2016.11.01 |