Alistair Leslie-Hughes : d3drm: Implement IDirect3DRMTexture3::{Get,Set}DecalSize().

Alexandre Julliard julliard at winehq.org
Mon May 30 15:34:58 CDT 2022


Module: wine
Branch: master
Commit: a8a126c4a32b41be80022f02b37579bf4fbcc596
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=a8a126c4a32b41be80022f02b37579bf4fbcc596

Author: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date:   Fri May 27 09:10:30 2022 +0000

d3drm: Implement IDirect3DRMTexture3::{Get,Set}DecalSize().

---

 dlls/d3drm/d3drm_private.h |  2 ++
 dlls/d3drm/tests/d3drm.c   | 17 +++++++++++++++++
 dlls/d3drm/texture.c       | 20 ++++++++++++++++----
 3 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/dlls/d3drm/d3drm_private.h b/dlls/d3drm/d3drm_private.h
index c5df376a72e..2fb6bafe951 100644
--- a/dlls/d3drm/d3drm_private.h
+++ b/dlls/d3drm/d3drm_private.h
@@ -69,6 +69,8 @@ struct d3drm_texture
     DWORD max_colors;
     DWORD max_shades;
     BOOL transparency;
+    D3DVALUE decal_width;
+    D3DVALUE decal_height;
 };
 
 struct d3drm_frame
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index c9cfe932ca4..5745fea4b09 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -2713,6 +2713,7 @@ static void test_Texture(void)
     LONG decalx, decaly;
     DWORD colors, shades;
     BOOL transparency;
+    D3DVALUE width, height;
 
     D3DRMIMAGE initimg =
     {
@@ -2920,6 +2921,22 @@ static void test_Texture(void)
     hr = IDirect3DRMTexture_SetShades(texture1, 8);
     ok(hr == S_OK, "got %#lx.\n", hr);
 
+    hr = IDirect3DRMTexture_GetDecalSize(texture1, &width, &height);
+    ok(hr == S_OK, "Got hr %#lx.\n", hr);
+    ok(width == 1.0f, "Got %.8e.\n", width);
+    ok(height == 1.0f, "Got %.8e.\n", height);
+
+    hr = IDirect3DRMTexture_SetDecalSize(texture1, 8.0f, 7.0f);
+    ok(hr == S_OK, "Got hr %#lx.\n", hr);
+
+    hr = IDirect3DRMTexture_GetDecalSize(texture1, &width, &height);
+    ok(hr == S_OK, "Got hr %#lx.\n", hr);
+    ok(width == 8.0f, "Got %.8e.\n", width);
+    ok(height == 7.0f, "Got %.8e.\n", height);
+
+    hr = IDirect3DRMTexture_SetDecalSize(texture1, 1.0f, 1.0f);
+    ok(hr == S_OK, "got %#lx.\n", hr);
+
     transparency = IDirect3DRMTexture_GetDecalTransparency(texture1);
     ok(transparency == FALSE, "Got %d.\n", transparency);
 
diff --git a/dlls/d3drm/texture.c b/dlls/d3drm/texture.c
index a14e47efc1e..a60317b48bc 100644
--- a/dlls/d3drm/texture.c
+++ b/dlls/d3drm/texture.c
@@ -1193,9 +1193,14 @@ static HRESULT WINAPI d3drm_texture3_SetShades(IDirect3DRMTexture3 *iface, DWORD
 
 static HRESULT WINAPI d3drm_texture3_SetDecalSize(IDirect3DRMTexture3 *iface, D3DVALUE width, D3DVALUE height)
 {
-    FIXME("iface %p, width %.8e, height %.8e stub!\n", iface, width, height);
+    struct d3drm_texture *texture = impl_from_IDirect3DRMTexture3(iface);
 
-    return E_NOTIMPL;
+    TRACE("iface %p, width %.8e, height %.8e.\n", iface, width, height);
+
+    texture->decal_width = width;
+    texture->decal_height = height;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI d3drm_texture3_SetDecalOrigin(IDirect3DRMTexture3 *iface, LONG x, LONG y)
@@ -1237,9 +1242,14 @@ static HRESULT WINAPI d3drm_texture3_SetDecalTransparentColor(IDirect3DRMTexture
 
 static HRESULT WINAPI d3drm_texture3_GetDecalSize(IDirect3DRMTexture3 *iface, D3DVALUE *width, D3DVALUE *height)
 {
-    FIXME("iface %p, width %p, height %p stub!\n", iface, width, height);
+    struct d3drm_texture *texture = impl_from_IDirect3DRMTexture3(iface);
 
-    return E_NOTIMPL;
+    TRACE("iface %p, width %p, height %p.\n", iface, width, height);
+
+    *width = texture->decal_width;
+    *height = texture->decal_height;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI d3drm_texture3_GetDecalOrigin(IDirect3DRMTexture3 *iface, LONG *x, LONG *y)
@@ -1448,6 +1458,8 @@ HRESULT d3drm_texture_create(struct d3drm_texture **texture, IDirect3DRM *d3drm)
     object->max_colors = 8;
     object->max_shades = 16;
     object->transparency = FALSE;
+    object->decal_width = 1.0f;
+    object->decal_height = 1.0f;
 
     d3drm_object_init(&object->obj, classname);
 




More information about the wine-cvs mailing list