Christian Costa : d3drm: Pass texture of mesh builder to newly created mesh .

Alexandre Julliard julliard at winehq.org
Wed Jun 6 15:35:20 CDT 2012


Module: wine
Branch: master
Commit: 8080528fc4c545e2ab1d56b21cec6c90cae755f7
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=8080528fc4c545e2ab1d56b21cec6c90cae755f7

Author: Christian Costa <titan.costa at gmail.com>
Date:   Tue Jun  5 22:45:18 2012 +0200

d3drm: Pass texture of mesh builder to newly created mesh.

---

 dlls/d3drm/meshbuilder.c |   32 +++++++++++++++++++++++++++-----
 1 files changed, 27 insertions(+), 5 deletions(-)

diff --git a/dlls/d3drm/meshbuilder.c b/dlls/d3drm/meshbuilder.c
index 836412e..0f39b4a 100644
--- a/dlls/d3drm/meshbuilder.c
+++ b/dlls/d3drm/meshbuilder.c
@@ -77,6 +77,7 @@ typedef struct {
     Coords2d* pCoords2d;
     D3DCOLOR color;
     IDirect3DRMMaterial2* material;
+    IDirect3DRMTexture3* texture;
 } IDirect3DRMMeshBuilderImpl;
 
 char templates[] = {
@@ -633,13 +634,20 @@ static HRESULT WINAPI IDirect3DRMMeshBuilder2Impl_SetColor(IDirect3DRMMeshBuilde
 }
 
 static HRESULT WINAPI IDirect3DRMMeshBuilder2Impl_SetTexture(IDirect3DRMMeshBuilder2* iface,
-                                                             LPDIRECT3DRMTEXTURE pTexture)
+                                                             LPDIRECT3DRMTEXTURE texture)
 {
     IDirect3DRMMeshBuilderImpl *This = impl_from_IDirect3DRMMeshBuilder2(iface);
+    LPDIRECT3DRMTEXTURE3 texture3 = NULL;
+    HRESULT hr = D3DRM_OK;
 
-    FIXME("(%p)->(%p): stub\n", This, pTexture);
+    if (texture)
+        hr = IDirect3DRMTexture_QueryInterface(texture, &IID_IDirect3DRMTexture3, (LPVOID*)&texture3);
+    if (SUCCEEDED(hr))
+        hr = IDirect3DRMMeshBuilder3_SetTexture(&This->IDirect3DRMMeshBuilder3_iface, texture3);
+    if (texture3)
+        IDirect3DRMTexture3_Release(texture3);
 
-    return E_NOTIMPL;
+    return hr;
 }
 
 static HRESULT WINAPI IDirect3DRMMeshBuilder2Impl_SetMaterial(IDirect3DRMMeshBuilder2* iface,
@@ -1732,9 +1740,15 @@ static HRESULT WINAPI IDirect3DRMMeshBuilder3Impl_SetTexture(IDirect3DRMMeshBuil
 {
     IDirect3DRMMeshBuilderImpl *This = impl_from_IDirect3DRMMeshBuilder3(iface);
 
-    FIXME("(%p)->(%p): stub\n", This, texture);
+    TRACE("(%p)->(%p)\n", This, texture);
 
-    return E_NOTIMPL;
+    if (texture)
+        IDirect3DRMTexture3_AddRef(texture);
+    if (This->texture)
+        IDirect3DRMTexture3_Release(This->texture);
+    This->texture = texture;
+
+    return D3DRM_OK;
 }
 
 static HRESULT WINAPI IDirect3DRMMeshBuilder3Impl_SetMaterial(IDirect3DRMMeshBuilder3* iface,
@@ -2025,6 +2039,14 @@ static HRESULT WINAPI IDirect3DRMMeshBuilder3Impl_CreateMesh(IDirect3DRMMeshBuil
             hr = IDirect3DRMMesh_SetGroupColor(*mesh, 0, This->color);
         if (SUCCEEDED(hr))
             hr = IDirect3DRMMesh_SetGroupMaterial(*mesh, 0, (LPDIRECT3DRMMATERIAL)This->material);
+        if (SUCCEEDED(hr) && This->texture)
+        {
+             LPDIRECT3DRMTEXTURE texture;
+
+             IDirect3DRMTexture3_QueryInterface(This->texture, &IID_IDirect3DRMTexture, (LPVOID*)&texture);
+             hr = IDirect3DRMMesh_SetGroupTexture(*mesh, 0, texture);
+             IDirect3DRMTexture_Release(texture);
+        }
         if (FAILED(hr))
             IDirect3DRMMesh_Release(*mesh);
     }




More information about the wine-cvs mailing list