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