[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