[PATCH] d3drm: Explicitly set initial viewport projection type.

Jeff Smith whydoubt at gmail.com
Fri Jan 24 13:02:53 CST 2020


Signed-off-by: Jeff Smith <whydoubt at gmail.com>
---
 dlls/d3drm/tests/d3drm.c | 21 +++++++++++++++++++++
 dlls/d3drm/viewport.c    |  8 ++++++++
 2 files changed, 29 insertions(+)

diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index 0f9f9cd6ed..dbaa80e662 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -1733,6 +1733,7 @@ static void test_Viewport(void)
     RECT rc;
     DWORD data, ref1, ref2, ref3, ref4;
     DWORD initial_ref1, initial_ref2, initial_ref3, device_ref, frame_ref, frame_ref2, viewport_ref;
+    D3DRMPROJECTIONTYPE project;
 
     window = create_window();
     GetClientRect(window, &rc);
@@ -2150,6 +2151,8 @@ static void test_Viewport(void)
     ok(front == -1.0f, "Got unexpected front %.8e\n", front);
     back = IDirect3DRMViewport_GetBack(viewport);
     ok(back == -1.0f, "Got unexpected back %.8e\n", back);
+    project = IDirect3DRMViewport_GetProjection(viewport);
+    ok(project == -1, "Got unexpected projection type %u.\n", project);
 
     hr = IDirect3DRMViewport_SetCamera(viewport, frame);
     ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
@@ -2161,6 +2164,8 @@ static void test_Viewport(void)
     ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
     hr = IDirect3DRMViewport_SetBack(viewport, 100.0f);
     ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
+    hr = IDirect3DRMViewport_SetProjection(viewport, D3DRMPROJECT_PERSPECTIVE);
+    ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
 
     /* Test all failures together */
     hr = IDirect3DRMViewport_Init(viewport, NULL, frame, rc.left, rc.top, rc.right, rc.bottom);
@@ -2236,6 +2241,8 @@ static void test_Viewport(void)
     ok(front == 1.0f, "Got unexpected front %.8e.\n", front);
     back = IDirect3DRMViewport_GetBack(viewport);
     ok(back == 100.0f, "Got unexpected back %.8e.\n", back);
+    project = IDirect3DRMViewport_GetProjection(viewport);
+    ok(project == D3DRMPROJECT_PERSPECTIVE, "Got unexpected projection type %u.\n", project);
 
     hr = IDirect3DRMViewport_SetField(viewport, 1.0f);
     ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
@@ -2266,6 +2273,10 @@ static void test_Viewport(void)
     ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
     back = IDirect3DRMViewport_GetBack(viewport);
     ok(back == 200.0f, "Got unexpected back %.8e.\n", back);
+    hr = IDirect3DRMViewport_SetProjection(viewport, D3DRMPROJECT_ORTHOGRAPHIC);
+    ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+    project = IDirect3DRMViewport_GetProjection(viewport);
+    ok(project == D3DRMPROJECT_ORTHOGRAPHIC, "Got unexpected projection type %u.\n", project);
 
     hr = IDirect3DRMViewport_Init(viewport, device1, frame, rc.left, rc.top, rc.right, rc.bottom);
     ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
@@ -2333,6 +2344,8 @@ static void test_Viewport(void)
     ok(front == -1.0f, "Got unexpected front %.8e\n", front);
     back = IDirect3DRMViewport2_GetBack(viewport2);
     ok(back == -1.0f, "Got unexpected back %.8e\n", back);
+    project = IDirect3DRMViewport2_GetProjection(viewport2);
+    ok(project == -1, "Got unexpected projection type %u.\n", project);
 
     hr = IDirect3DRMViewport2_SetCamera(viewport2, frame3);
     ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
@@ -2344,6 +2357,8 @@ static void test_Viewport(void)
     ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
     hr = IDirect3DRMViewport2_SetBack(viewport2, 100.0f);
     ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
+    hr = IDirect3DRMViewport2_SetProjection(viewport2, D3DRMPROJECT_PERSPECTIVE);
+    ok(hr == D3DRMERR_BADOBJECT, "Got unexpected hr %#x.\n", hr);
 
     hr = IDirect3DRMViewport2_Init(viewport2, NULL, frame3, rc.left, rc.top, rc.right, rc.bottom);
     ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
@@ -2412,6 +2427,8 @@ static void test_Viewport(void)
     ok(front == 1.0f, "Got unexpected front %.8e.\n", front);
     back = IDirect3DRMViewport2_GetBack(viewport2);
     ok(back == 100.0f, "Got unexpected back %.8e.\n", back);
+    project = IDirect3DRMViewport2_GetProjection(viewport2);
+    ok(project == D3DRMPROJECT_PERSPECTIVE, "Got unexpected projection type %u.\n", project);
 
     hr = IDirect3DRMViewport2_SetField(viewport2, 1.0f);
     ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
@@ -2442,6 +2459,10 @@ static void test_Viewport(void)
     ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
     back = IDirect3DRMViewport2_GetBack(viewport2);
     ok(back == 200.0f, "Got unexpected back %.8e.\n", back);
+    hr = IDirect3DRMViewport2_SetProjection(viewport2, D3DRMPROJECT_ORTHOGRAPHIC);
+    ok(hr == D3DRM_OK, "Got unexpected hr %#x.\n", hr);
+    project = IDirect3DRMViewport2_GetProjection(viewport2);
+    ok(project == D3DRMPROJECT_ORTHOGRAPHIC, "Got unexpected projection type %u.\n", project);
 
     hr = IDirect3DRMViewport2_Init(viewport2, device3, frame3, rc.left, rc.top, rc.right, rc.bottom);
     ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
diff --git a/dlls/d3drm/viewport.c b/dlls/d3drm/viewport.c
index 8e959d5f37..da6b38b110 100644
--- a/dlls/d3drm/viewport.c
+++ b/dlls/d3drm/viewport.c
@@ -376,6 +376,8 @@ static HRESULT WINAPI d3drm_viewport2_Init(IDirect3DRMViewport2 *iface, IDirect3
     viewport->clip.front = 1.0f;
     viewport->clip.back = 100.0f;
 
+    viewport->projection = D3DRMPROJECT_PERSPECTIVE;
+
 cleanup:
 
     if (FAILED(hr))
@@ -613,6 +615,9 @@ static HRESULT WINAPI d3drm_viewport2_SetProjection(IDirect3DRMViewport2 *iface,
 
     TRACE("iface %p, type %#x.\n", iface, type);
 
+    if (!viewport->d3d_viewport)
+        return D3DRMERR_BADOBJECT;
+
     viewport->projection = type;
 
     return D3DRM_OK;
@@ -975,6 +980,9 @@ static D3DRMPROJECTIONTYPE WINAPI d3drm_viewport2_GetProjection(IDirect3DRMViewp
 
     TRACE("iface %p.\n", iface);
 
+    if (!viewport->d3d_viewport)
+        return (D3DRMPROJECTIONTYPE)(-1);
+
     return viewport->projection;
 }
 
-- 
2.23.0




More information about the wine-devel mailing list