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를 이용하는 것이다.
[유니티 어필리에이트 프로그램]
아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.
[투네이션]
[Patreon]
[디스코드 채널]
반응형
'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 |