[PATCH 1/2] d3drm: Change signature of d3drm_texture_create.

Aaryaman Vasishta jem456.vasishta at gmail.com
Tue Mar 15 16:19:38 CDT 2016


Signed-off-by: Aaryaman Vasishta <jem456.vasishta at gmail.com>
---
 dlls/d3drm/d3drm.c         | 91 +++++++++++++++++++++++++++++++++++++++++-----
 dlls/d3drm/d3drm_private.h |  5 +++
 dlls/d3drm/meshbuilder.c   |  5 ++-
 dlls/d3drm/texture.c       | 25 ++++++++++---
 4 files changed, 109 insertions(+), 17 deletions(-)

diff --git a/dlls/d3drm/d3drm.c b/dlls/d3drm/d3drm.c
index 6d75605..2deb8ca 100644
--- a/dlls/d3drm/d3drm.c
+++ b/dlls/d3drm/d3drm.c
@@ -3,6 +3,7 @@
  *
  * Copyright 2010, 2012 Christian Costa
  * Copyright 2011 André Hentschel
+ * Copyright 2016 Aaryaman Vasishta
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -193,8 +194,16 @@ static HRESULT WINAPI d3drm1_CreateTexture(IDirect3DRM *iface,
         D3DRMIMAGE *image, IDirect3DRMTexture **texture)
 {
     FIXME("iface %p, image %p, texture %p partial stub.\n", iface, image, texture);
+    struct d3drm_texture *object;
+    HRESULT hr;
+
+    hr = d3drm_texture_create(&object);
+    if (FAILED(hr))
+        return hr;
 
-    return Direct3DRMTexture_create(&IID_IDirect3DRMTexture, (IUnknown **)texture);
+    *texture = IDirect3DRMTexture_from_impl(object);
+
+    return D3DRM_OK;
 }
 
 static HRESULT WINAPI d3drm1_CreateLight(IDirect3DRM *iface,
@@ -403,16 +412,32 @@ static HRESULT WINAPI d3drm1_LoadTexture(IDirect3DRM *iface,
         const char *filename, IDirect3DRMTexture **texture)
 {
     FIXME("iface %p, filename %s, texture %p stub!\n", iface, debugstr_a(filename), texture);
+    struct d3drm_texture *object;
+    HRESULT hr;
 
-    return Direct3DRMTexture_create(&IID_IDirect3DRMTexture, (IUnknown **)texture);
+    hr = d3drm_texture_create(&object);
+    if (FAILED(hr))
+        return hr;
+
+    *texture = IDirect3DRMTexture_from_impl(object);
+
+    return D3DRM_OK;
 }
 
 static HRESULT WINAPI d3drm1_LoadTextureFromResource(IDirect3DRM *iface,
         HRSRC resource, IDirect3DRMTexture **texture)
 {
     FIXME("iface %p, resource %p, texture %p stub!\n", iface, resource, texture);
+    struct d3drm_texture *object;
+    HRESULT hr;
 
-    return Direct3DRMTexture_create(&IID_IDirect3DRMTexture, (IUnknown **)texture);
+    hr = d3drm_texture_create(&object);
+    if (FAILED(hr))
+        return hr;
+
+    *texture = IDirect3DRMTexture_from_impl(object);
+
+    return D3DRM_OK;
 }
 
 static HRESULT WINAPI d3drm1_SetSearchPath(IDirect3DRM *iface, const char *path)
@@ -633,8 +658,16 @@ static HRESULT WINAPI d3drm2_CreateTexture(IDirect3DRM2 *iface,
         D3DRMIMAGE *image, IDirect3DRMTexture2 **texture)
 {
     FIXME("iface %p, image %p, texture %p partial stub.\n", iface, image, texture);
+    struct d3drm_texture *object;
+    HRESULT hr;
 
-    return Direct3DRMTexture_create(&IID_IDirect3DRMTexture2, (IUnknown **)texture);
+    hr = d3drm_texture_create(&object);
+    if (FAILED(hr))
+        return hr;
+
+    *texture = IDirect3DRMTexture2_from_impl(object);
+
+    return D3DRM_OK;
 }
 
 static HRESULT WINAPI d3drm2_CreateLight(IDirect3DRM2 *iface,
@@ -821,8 +854,16 @@ static HRESULT WINAPI d3drm2_LoadTexture(IDirect3DRM2 *iface,
         const char *filename, IDirect3DRMTexture2 **texture)
 {
     FIXME("iface %p, filename %s, texture %p stub!\n", iface, debugstr_a(filename), texture);
+    struct d3drm_texture *object;
+    HRESULT hr;
+
+    hr = d3drm_texture_create(&object);
+    if (FAILED(hr))
+        return hr;
+
+    *texture = IDirect3DRMTexture2_from_impl(object);
 
-    return Direct3DRMTexture_create(&IID_IDirect3DRMTexture2, (IUnknown **)texture);
+    return D3DRM_OK;
 }
 
 static HRESULT WINAPI d3drm2_LoadTextureFromResource(IDirect3DRM2 *iface, HMODULE module,
@@ -830,8 +871,16 @@ static HRESULT WINAPI d3drm2_LoadTextureFromResource(IDirect3DRM2 *iface, HMODUL
 {
     FIXME("iface %p, resource_name %s, resource_type %s, texture %p stub!\n",
             iface, debugstr_a(resource_name), debugstr_a(resource_type), texture);
+    struct d3drm_texture *object;
+    HRESULT hr;
+
+    hr = d3drm_texture_create(&object);
+    if (FAILED(hr))
+        return hr;
 
-    return Direct3DRMTexture_create(&IID_IDirect3DRMTexture2, (IUnknown **)texture);
+    *texture = IDirect3DRMTexture2_from_impl(object);
+
+    return D3DRM_OK;
 }
 
 static HRESULT WINAPI d3drm2_SetSearchPath(IDirect3DRM2 *iface, const char *path)
@@ -1058,8 +1107,16 @@ static HRESULT WINAPI d3drm3_CreateTexture(IDirect3DRM3 *iface,
         D3DRMIMAGE *image, IDirect3DRMTexture3 **texture)
 {
     FIXME("iface %p, image %p, texture %p partial stub.\n", iface, image, texture);
+    struct d3drm_texture *object;
+    HRESULT hr;
+
+    hr = d3drm_texture_create(&object);
+    if (FAILED(hr))
+        return hr;
+
+    *texture = IDirect3DRMTexture3_from_impl(object);
 
-    return Direct3DRMTexture_create(&IID_IDirect3DRMTexture3, (IUnknown **)texture);
+    return D3DRM_OK;
 }
 
 static HRESULT WINAPI d3drm3_CreateLight(IDirect3DRM3 *iface,
@@ -1296,8 +1353,16 @@ static HRESULT WINAPI d3drm3_LoadTexture(IDirect3DRM3 *iface,
         const char *filename, IDirect3DRMTexture3 **texture)
 {
     FIXME("iface %p, filename %s, texture %p stub!\n", iface, debugstr_a(filename), texture);
+    struct d3drm_texture *object;
+    HRESULT hr;
 
-    return Direct3DRMTexture_create(&IID_IDirect3DRMTexture3, (IUnknown **)texture);
+    hr = d3drm_texture_create(&object);
+    if (FAILED(hr))
+        return hr;
+
+    *texture = IDirect3DRMTexture3_from_impl(object);
+
+    return D3DRM_OK;
 }
 
 static HRESULT WINAPI d3drm3_LoadTextureFromResource(IDirect3DRM3 *iface, HMODULE module,
@@ -1305,8 +1370,16 @@ static HRESULT WINAPI d3drm3_LoadTextureFromResource(IDirect3DRM3 *iface, HMODUL
 {
     FIXME("iface %p, module %p, resource_name %s, resource_type %s, texture %p stub!\n",
             iface, module, debugstr_a(resource_name), debugstr_a(resource_type), texture);
+    struct d3drm_texture *object;
+    HRESULT hr;
+
+    hr = d3drm_texture_create(&object);
+    if (FAILED(hr))
+        return hr;
+
+    *texture = IDirect3DRMTexture3_from_impl(object);
 
-    return Direct3DRMTexture_create(&IID_IDirect3DRMTexture3, (IUnknown **)texture);
+    return D3DRM_OK;
 }
 
 static HRESULT WINAPI d3drm3_SetSearchPath(IDirect3DRM3 *iface, const char *path)
diff --git a/dlls/d3drm/d3drm_private.h b/dlls/d3drm/d3drm_private.h
index 5703560..8b5f77b 100644
--- a/dlls/d3drm/d3drm_private.h
+++ b/dlls/d3drm/d3drm_private.h
@@ -25,6 +25,7 @@
 #include "dxfile.h"
 
 struct d3drm_device;
+struct d3drm_texture;
 struct d3drm_object
 {
     LONG ref;
@@ -32,6 +33,7 @@ struct d3drm_object
 };
 
 HRESULT d3drm_device_create(struct d3drm_device **out) DECLSPEC_HIDDEN;
+HRESULT d3drm_texture_create(struct d3drm_texture **out) DECLSPEC_HIDDEN;
 IDirect3DRMDevice *IDirect3DRMDevice_from_impl(struct d3drm_device *device) DECLSPEC_HIDDEN;
 IDirect3DRMDevice2 *IDirect3DRMDevice2_from_impl(struct d3drm_device *device) DECLSPEC_HIDDEN;
 IDirect3DRMDevice3 *IDirect3DRMDevice3_from_impl(struct d3drm_device *device) DECLSPEC_HIDDEN;
@@ -43,6 +45,9 @@ HRESULT Direct3DRMMeshBuilder_create(REFIID riid, IUnknown** ppObj) DECLSPEC_HID
 HRESULT Direct3DRMViewport_create(REFIID riid, IUnknown** ppObj) DECLSPEC_HIDDEN;
 HRESULT Direct3DRMMaterial_create(IDirect3DRMMaterial2** ret_iface) DECLSPEC_HIDDEN;
 HRESULT Direct3DRMTexture_create(REFIID riid, IUnknown** ret_iface) DECLSPEC_HIDDEN;
+IDirect3DRMTexture *IDirect3DRMTexture_from_impl(struct d3drm_texture *texture) DECLSPEC_HIDDEN;
+IDirect3DRMTexture2 *IDirect3DRMTexture2_from_impl(struct d3drm_texture *texture) DECLSPEC_HIDDEN;
+IDirect3DRMTexture3 *IDirect3DRMTexture3_from_impl(struct d3drm_texture *texture) DECLSPEC_HIDDEN;
 
 HRESULT load_mesh_data(IDirect3DRMMeshBuilder3 *iface, IDirectXFileData *data,
                        D3DRMLOADTEXTURECALLBACK load_texture_proc, void *arg) DECLSPEC_HIDDEN;
diff --git a/dlls/d3drm/meshbuilder.c b/dlls/d3drm/meshbuilder.c
index 8bd5131..18b5aad 100644
--- a/dlls/d3drm/meshbuilder.c
+++ b/dlls/d3drm/meshbuilder.c
@@ -1299,13 +1299,14 @@ HRESULT load_mesh_data(IDirect3DRMMeshBuilder3 *iface, IDirectXFileData *pData,
                             if (file != INVALID_HANDLE_VALUE)
                             {
                                 CloseHandle(file);
-
-                                hr = Direct3DRMTexture_create(&IID_IDirect3DRMTexture3, (IUnknown**)&This->materials[i].texture);
+                                struct d3drm_texture *texture_object;
+                                hr = d3drm_texture_create(&texture_object);
                                 if (FAILED(hr))
                                 {
                                     IDirectXFileData_Release(data);
                                     goto end;
                                 }
+                                This->materials[i].texture = IDirect3DRMTexture3_from_impl(texture_object);
                             }
                         }
                     }
diff --git a/dlls/d3drm/texture.c b/dlls/d3drm/texture.c
index 080c6f8..0fc7737 100644
--- a/dlls/d3drm/texture.c
+++ b/dlls/d3drm/texture.c
@@ -53,6 +53,21 @@ static inline struct d3drm_texture *impl_from_IDirect3DRMTexture3(IDirect3DRMTex
     return CONTAINING_RECORD(iface, struct d3drm_texture, IDirect3DRMTexture3_iface);
 }
 
+IDirect3DRMTexture *IDirect3DRMTexture_from_impl(struct d3drm_texture *texture)
+{
+    return &texture->IDirect3DRMTexture_iface;
+}
+
+IDirect3DRMTexture2 *IDirect3DRMTexture2_from_impl(struct d3drm_texture *texture)
+{
+    return &texture->IDirect3DRMTexture2_iface;
+}
+
+IDirect3DRMTexture3 *IDirect3DRMTexture3_from_impl(struct d3drm_texture *texture)
+{
+    return &texture->IDirect3DRMTexture3_iface;
+}
+
 static HRESULT WINAPI d3drm_texture1_QueryInterface(IDirect3DRMTexture *iface, REFIID riid, void **out)
 {
     struct d3drm_texture *texture = impl_from_IDirect3DRMTexture(iface);
@@ -1038,12 +1053,11 @@ static const struct IDirect3DRMTexture3Vtbl d3drm_texture3_vtbl =
     d3drm_texture3_SetValidationCallback,
 };
 
-HRESULT Direct3DRMTexture_create(REFIID riid, IUnknown **out)
+HRESULT d3drm_texture_create(struct d3drm_texture **out)
 {
     struct d3drm_texture *object;
-    HRESULT hr;
 
-    TRACE("riid %s, out %p.\n", debugstr_guid(riid), out);
+    TRACE("out %p.\n", out);
 
     if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object))))
         return E_OUTOFMEMORY;
@@ -1053,8 +1067,7 @@ HRESULT Direct3DRMTexture_create(REFIID riid, IUnknown **out)
     object->IDirect3DRMTexture3_iface.lpVtbl = &d3drm_texture3_vtbl;
     object->ref = 1;
 
-    hr = IDirect3DRMTexture3_QueryInterface(&object->IDirect3DRMTexture3_iface, riid, (void **)out);
-    IDirect3DRMTexture3_Release(&object->IDirect3DRMTexture3_iface);
+    *out = object;
 
-    return hr;
+    return D3DRM_OK;
 }
-- 
2.3.2 (Apple Git-55)




More information about the wine-patches mailing list