Direct3D 응용 프로그램의 디버깅
2022. 9. 25. 23:17ㆍPublic/GraphicsAPI
응용 프로그램 프레임워크는 다수의 Direct3D 함수들이 돌려주는 HRESULT 형식의 반환값을 점검해 주는 매크로를 제공한다. 그매크로는 d3dUtil.h에 다음과 같이 정의되어 있다.
#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 함수 (#include <dxerr.h> 및 dxerr.lib 링크가 필요함)에 넘겨준다.
HRESULT WINAPI DXTraceW( __in_z const char* strFile, __in DWORD dwLine, __in HRESULT hr, __in_z_opt const WCHAR* strMsg, __in BOOL bPopMsgBox );
이 함수는 오류가 발생한 파일과 행번호를 보여 주는 깔끔한 메시지 상자를 띄운다. 그 메시지 상자는 발생한 오류를 설명하는 메시지와 오류가 발생한 함수의 이름도 보여 준다.
DXTrace 함수의 마지막 매개변수(BOOL bPopMsgBox)를 false로 하면 메시지 상자가 뜨는 대신 메시지 정보가 Visual C++ 출력 창에 출력된다
그리고 디버그 모드가 아닌 경우에는 이 HR 매크로가 아무일도 일어나지 않는다.
그리고 이러한 HR을 함수가 아니라 반드시 매크로로 정의해야 한다는 점도 중요하다. 함수로 정의하면 __FILE__과 __LINE__은 항상 그 함수가 구현된 파일과 행번호를 가리킬 뿐이다. 매크로로 만들어야 HR이 실제로 쓰인 코드의 파일과 행번호가 된다.
다음은 이 매크로를 사용하는 방법이다.
HRSULT를 돌려주는 Direct3D의 호출을 다음과 같이 해당 매크로로 감싸면 된다.
HR(D3DX11CreateShaderResourceViewFromFile(md3dDevice,L"grass.dds",0,0,&mGrassTexRV,0));
'Public > GraphicsAPI' 카테고리의 다른 글
[DX12]혼합(Blend) 및 예제 (0) | 2023.08.26 |
---|---|
Direct3D 첫번째 요약 (0) | 2022.09.25 |
Direct3D 초기화 예제 (0) | 2022.09.25 |
DX11 Tutorial02 코드 설명 (0) | 2022.08.22 |
광원 (0) | 2022.08.15 |