diff --git a/include/SDL_hints.h b/include/SDL_hints.h index 74b63ee09..6e2a78568 100644 --- a/include/SDL_hints.h +++ b/include/SDL_hints.h @@ -117,6 +117,20 @@ extern "C" { */ #define SDL_HINT_RENDER_VSYNC "SDL_RENDER_VSYNC" +/** + * \brief A variable controlling whether to enable Direct3D 11+'s Debug Layer. + * + * This variable does not have any effect on the Direct3D 9 based renderer, + * which is used in Win32-based (aka Windows Desktop) apps. + * + * This variable can be set to the following values: + * "0" - Disable Debug Layer use + * "1" - Enable Debug Lyaer use + * + * By default, SDL does not use Direct3D Debug Layer. + */ +#define SDL_HINT_RENDER_DIRECT3D11_DEBUG "SDL_HINT_RENDER_DIRECT3D11_DEBUG" + /** * \brief A variable controlling whether the X11 VidMode extension should be used. * diff --git a/src/render/direct3d11/SDL_render_d3d11.cpp b/src/render/direct3d11/SDL_render_d3d11.cpp index 292ecfbba..eaae09e7b 100644 --- a/src/render/direct3d11/SDL_render_d3d11.cpp +++ b/src/render/direct3d11/SDL_render_d3d11.cpp @@ -35,7 +35,7 @@ extern "C" { #include "../../core/windows/SDL_windows.h" -//#include "SDL_hints.h" +#include "SDL_hints.h" //#include "SDL_loadso.h" #include "SDL_system.h" #include "SDL_syswm.h" @@ -326,10 +326,13 @@ D3D11_CreateDeviceResources(SDL_Renderer * renderer) // than the API default. It is required for compatibility with Direct2D. UINT creationFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT; -#if defined(_DEBUG) - // If the project is in a debug build, enable debugging via SDK Layers with this flag. - creationFlags |= D3D11_CREATE_DEVICE_DEBUG; -#endif + // Make sure Direct3D's debugging feature gets used, if the app requests it. + const char *hint = SDL_GetHint(SDL_HINT_RENDER_DIRECT3D11_DEBUG); + if (hint) { + if (*hint == '1') { + creationFlags |= D3D11_CREATE_DEVICE_DEBUG; + } + } // This array defines the set of DirectX hardware feature levels this app will support. // Note the ordering should be preserved.