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

 

반응형

+ Recent posts