瀏覽代碼

WinRT: minor rotation/orientation code cleanup in the d3d11 renderer

David Ludwig 11 年之前
父節點
當前提交
8b2694f986
共有 1 個文件被更改,包括 14 次插入13 次删除
  1. 14 13
      src/render/direct3d11/SDL_render_d3d11.cpp

+ 14 - 13
src/render/direct3d11/SDL_render_d3d11.cpp

@@ -1062,6 +1062,18 @@ D3D11_GetRotationForOrientation(Windows::Graphics::Display::DisplayOrientations
     }
 }
 
+static bool
+D3D11_IsDisplayRotated90Degrees(Windows::Graphics::Display::DisplayOrientations orientation)
+{
+    switch (D3D11_GetRotationForOrientation(orientation)) {
+        case DXGI_MODE_ROTATION_ROTATE90:
+        case DXGI_MODE_ROTATION_ROTATE270:
+            return true;
+        default:
+            return false;
+    }
+}
+
 // Initialize all resources that change when the window's size changes.
 // TODO, WinRT: get D3D11_CreateWindowSizeDependentResources working on Win32
 HRESULT
@@ -1108,9 +1120,7 @@ D3D11_CreateWindowSizeDependentResources(SDL_Renderer * renderer)
 #if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
     const bool swapDimensions = false;
 #else
-    const bool swapDimensions =
-        data->orientation == DisplayOrientations::Portrait ||
-        data->orientation == DisplayOrientations::PortraitFlipped;
+    const bool swapDimensions = D3D11_IsDisplayRotated90Degrees(data->orientation);
 #endif
     data->renderTargetSize.x = swapDimensions ? windowHeight : windowWidth;
     data->renderTargetSize.y = swapDimensions ? windowWidth : windowHeight;
@@ -1687,16 +1697,7 @@ D3D11_UpdateViewport(SDL_Renderer * renderer)
     // for Windows Phone devices.
     //
     SDL_FRect orientationAlignedViewport;
-
-#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
-    const bool swapDimensions =
-        data->orientation == DisplayOrientations::Landscape ||
-        data->orientation == DisplayOrientations::LandscapeFlipped;
-#else
-    const bool swapDimensions =
-        data->orientation == DisplayOrientations::Portrait ||
-        data->orientation == DisplayOrientations::PortraitFlipped;
-#endif
+    const bool swapDimensions = D3D11_IsDisplayRotated90Degrees(data->orientation);
     if (swapDimensions) {
         orientationAlignedViewport.x = (float) renderer->viewport.y;
         orientationAlignedViewport.y = (float) renderer->viewport.x;