Browse Source

WinRT: made the Direct3D 11.x 'Debug Layer' be enable-able in any app via a hint

To enable the Debug Layer, set the hint, SDL_HINT_RENDER_DIRECT3D11_DEBUG to '1'.

The Debug Layer will be turned off by default, both in Release and Debug builds (of SDL).
David Ludwig 12 năm trước cách đây
mục cha
commit
62c781eaff
2 tập tin đã thay đổi với 22 bổ sung5 xóa
  1. 14 0
      include/SDL_hints.h
  2. 8 5
      src/render/direct3d11/SDL_render_d3d11.cpp

+ 14 - 0
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.
  *

+ 8 - 5
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.