[PATCH] Finish the implementation of ID3DXMatrixStack
Jérôme Gardou
jerome.gardou at laposte.net
Sat Nov 1 15:25:14 CDT 2008
---
dlls/d3dx8/math.c | 88 +++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 68 insertions(+), 20 deletions(-)
diff --git a/dlls/d3dx8/math.c b/dlls/d3dx8/math.c
index 9a8c530..b80cb2d 100644
--- a/dlls/d3dx8/math.c
+++ b/dlls/d3dx8/math.c
@@ -686,15 +686,21 @@ static HRESULT WINAPI ID3DXMatrixStackImpl_LoadMatrix(ID3DXMatrixStack *iface, C
static HRESULT WINAPI ID3DXMatrixStackImpl_MultMatrix(ID3DXMatrixStack *iface, CONST D3DXMATRIX *pm)
{
ID3DXMatrixStackImpl *This = (ID3DXMatrixStackImpl *)iface;
- FIXME("(%p) : stub\n",This);
- return E_NOTIMPL;
+ TRACE("iface %p\n",This);
+
+ if(!pm) return D3DERR_INVALIDCALL ;
+ D3DXMatrixMultiply(&This->stack[This->current], &This->stack[This->current], pm) ;
+ return D3D_OK;
}
static HRESULT WINAPI ID3DXMatrixStackImpl_MultMatrixLocal(ID3DXMatrixStack *iface, CONST D3DXMATRIX *pm)
{
ID3DXMatrixStackImpl *This = (ID3DXMatrixStackImpl *)iface;
- FIXME("(%p) : stub\n",This);
- return E_NOTIMPL;
+ TRACE("iface %p\n",This);
+
+ if(!pm) return D3DERR_INVALIDCALL ;
+ D3DXMatrixMultiply(&This->stack[This->current], pm, &This->stack[This->current]) ;
+ return D3D_OK;
}
static HRESULT WINAPI ID3DXMatrixStackImpl_Pop(ID3DXMatrixStack *iface)
@@ -755,57 +761,99 @@ static HRESULT WINAPI ID3DXMatrixStackImpl_Push(ID3DXMatrixStack *iface)
static HRESULT WINAPI ID3DXMatrixStackImpl_RotateAxis(ID3DXMatrixStack *iface, CONST D3DXVECTOR3 *pv, FLOAT angle)
{
ID3DXMatrixStackImpl *This = (ID3DXMatrixStackImpl *)iface;
- FIXME("(%p) : stub\n",This);
- return E_NOTIMPL;
+ D3DMATRIX tmp ;
+
+ TRACE("iface %p\n",This);
+
+ if(!pv) return D3DERR_INVALIDCALL ;
+ D3DXMatrixRotationAxis(&tmp, pv, angle) ;
+ D3DXMatrixMultiply(&This->stack[This->current], &This->stack[This->current], &tmp) ;
+ return D3D_OK;
}
static HRESULT WINAPI ID3DXMatrixStackImpl_RotateAxisLocal(ID3DXMatrixStack *iface, CONST D3DXVECTOR3 *pv, FLOAT angle)
{
ID3DXMatrixStackImpl *This = (ID3DXMatrixStackImpl *)iface;
- FIXME("(%p) : stub\n",This);
- return E_NOTIMPL;
+ D3DMATRIX tmp ;
+
+ TRACE("iface %p\n",This);
+
+ if(!pv) return D3DERR_INVALIDCALL ;
+ D3DXMatrixRotationAxis(&tmp, pv, angle) ;
+ D3DXMatrixMultiply(&This->stack[This->current], &tmp, &This->stack[This->current]) ;
+ return D3D_OK;
}
static HRESULT WINAPI ID3DXMatrixStackImpl_RotateYawPitchRoll(ID3DXMatrixStack *iface, FLOAT x, FLOAT y, FLOAT z)
{
ID3DXMatrixStackImpl *This = (ID3DXMatrixStackImpl *)iface;
- FIXME("(%p) : stub\n",This);
- return E_NOTIMPL;
+ D3DMATRIX tmp ;
+
+ TRACE("iface %p\n",This);
+
+ D3DXMatrixRotateYawPitchRoll(&tmp, x, y, z) ;
+ D3DXMatrixMultiply(&This->stack[This->current], &This->stack[This->current], &tmp) ;
+ return D3D_OK;
}
static HRESULT WINAPI ID3DXMatrixStackImpl_RotateYawPitchRollLocal(ID3DXMatrixStack *iface, FLOAT x, FLOAT y, FLOAT z)
{
ID3DXMatrixStackImpl *This = (ID3DXMatrixStackImpl *)iface;
- FIXME("(%p) : stub\n",This);
- return E_NOTIMPL;
+ D3DMATRIX tmp ;
+
+ TRACE("iface %p\n",This);
+
+ D3DXMatrixRotateYawPitchRoll(&tmp, x, y, z) ;
+ D3DXMatrixMultiply(&This->stack[This->current], &tmp, &This->stack[This->current]) ;
+ return D3D_OK;
}
static HRESULT WINAPI ID3DXMatrixStackImpl_Scale(ID3DXMatrixStack *iface, FLOAT x, FLOAT y, FLOAT z)
{
ID3DXMatrixStackImpl *This = (ID3DXMatrixStackImpl *)iface;
- FIXME("(%p) : stub\n",This);
- return E_NOTIMPL;
+ D3DMATRIX tmp ;
+
+ TRACE("iface %p\n",This);
+
+ D3DXMatrixScaling(&tmp, x, y, z) ;
+ D3DXMatrixMultiply(&This->stack[This->current], &This->stack[This->current], &tmp) ;
+ return D3D_OK;
}
static HRESULT WINAPI ID3DXMatrixStackImpl_ScaleLocal(ID3DXMatrixStack *iface, FLOAT x, FLOAT y, FLOAT z)
{
ID3DXMatrixStackImpl *This = (ID3DXMatrixStackImpl *)iface;
- FIXME("(%p) : stub\n",This);
- return E_NOTIMPL;
+ D3DMATRIX tmp ;
+
+ TRACE("iface %p\n",This);
+
+ D3DXMatrixScaling(&tmp, x, y, z) ;
+ D3DXMatrixMultiply(&This->stack[This->current], &tmp, &This->stack[This->current]) ;
+ return D3D_OK;
}
static HRESULT WINAPI ID3DXMatrixStackImpl_Translate(ID3DXMatrixStack *iface, FLOAT x, FLOAT y, FLOAT z)
{
ID3DXMatrixStackImpl *This = (ID3DXMatrixStackImpl *)iface;
- FIXME("(%p) : stub\n",This);
- return E_NOTIMPL;
+ D3DMATRIX tmp ;
+
+ TRACE("iface %p\n",This);
+
+ D3DXMatrixTranslation(&tmp, x, y, z) ;
+ D3DXMatrixMultiply(&This->stack[This->current], &This->stack[This->current], &tmp) ;
+ return D3D_OK;
}
static HRESULT WINAPI ID3DXMatrixStackImpl_TranslateLocal(ID3DXMatrixStack *iface, FLOAT x, FLOAT y, FLOAT z)
{
ID3DXMatrixStackImpl *This = (ID3DXMatrixStackImpl *)iface;
- FIXME("(%p) : stub\n",This);
- return E_NOTIMPL;
+ D3DMATRIX tmp ;
+
+ TRACE("iface %p\n",This);
+
+ D3DXMatrixTranslation(&tmp, x, y, z) ;
+ D3DXMatrixMultiply(&This->stack[This->current], &tmp, &This->stack[This->current]) ;
+ return D3D_OK;
}
static const ID3DXMatrixStackVtbl ID3DXMatrixStack_Vtbl =
--
1.5.4.3
--------------050205080603070203090201--
More information about the wine-patches
mailing list