David Adam : d3dx9_36: Implement D3DXComputeBoundingSphere.
Alexandre Julliard
julliard at winehq.org
Wed Feb 11 09:25:03 CST 2009
Module: wine
Branch: master
Commit: e5425fc17bfc7e358d114e93d9a4d557ab85ef54
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e5425fc17bfc7e358d114e93d9a4d557ab85ef54
Author: David Adam <david.adam.cnrs at gmail.com>
Date: Tue Feb 10 15:43:36 2009 +0100
d3dx9_36: Implement D3DXComputeBoundingSphere.
---
dlls/d3dx9_36/d3dx9_36.spec | 2 +-
dlls/d3dx9_36/mesh.c | 34 ++++++++++++++++++++++++++++++++++
include/d3dx9mesh.h | 1 +
3 files changed, 36 insertions(+), 1 deletions(-)
diff --git a/dlls/d3dx9_36/d3dx9_36.spec b/dlls/d3dx9_36/d3dx9_36.spec
index 2534acf..6ce5643 100644
--- a/dlls/d3dx9_36/d3dx9_36.spec
+++ b/dlls/d3dx9_36/d3dx9_36.spec
@@ -17,7 +17,7 @@
@ stub D3DXCompileShaderFromResourceA
@ stub D3DXCompileShaderFromResourceW
@ stdcall D3DXComputeBoundingBox(ptr long long ptr ptr)
-@ stub D3DXComputeBoundingSphere
+@ stdcall D3DXComputeBoundingSphere(ptr long long ptr ptr)
@ stub D3DXComputeIMTFromPerTexelSignal
@ stub D3DXComputeIMTFromPerVertexSignal
@ stub D3DXComputeIMTFromSignal
diff --git a/dlls/d3dx9_36/mesh.c b/dlls/d3dx9_36/mesh.c
index 08d6e2f..521d694 100644
--- a/dlls/d3dx9_36/mesh.c
+++ b/dlls/d3dx9_36/mesh.c
@@ -55,6 +55,40 @@ HRESULT WINAPI D3DXComputeBoundingBox(CONST D3DXVECTOR3 *pfirstposition, DWORD n
}
/*************************************************************************
+ * D3DXComputeBoundingSphere
+ */
+HRESULT WINAPI D3DXComputeBoundingSphere(CONST D3DXVECTOR3* pfirstposition, DWORD numvertices, DWORD dwstride, D3DXVECTOR3 *pcenter, FLOAT *pradius)
+{
+ D3DXVECTOR3 temp, temp1;
+ FLOAT d;
+ unsigned int i;
+
+ if( !pfirstposition || !pcenter || !pradius ) return D3DERR_INVALIDCALL;
+
+ temp.x = 0.0f;
+ temp.y = 0.0f;
+ temp.z = 0.0f;
+ temp1 = temp;
+ d = 0.0f;
+ *pradius = 0.0f;
+
+ for(i=0; i<numvertices; i++)
+ {
+ D3DXVec3Add(&temp1, &temp, (D3DXVECTOR3*)((char*)pfirstposition + dwstride * i));
+ temp = temp1;
+ }
+
+ D3DXVec3Scale(pcenter, &temp, 1.0f/((FLOAT)numvertices));
+
+ for(i=0; i<numvertices; i++)
+ {
+ d = D3DXVec3Length(D3DXVec3Subtract(&temp, (D3DXVECTOR3*)((char*)pfirstposition + dwstride * i), pcenter));
+ if ( d > *pradius ) *pradius = d;
+ }
+ return D3D_OK;
+}
+
+/*************************************************************************
* D3DXIntersectTri
*/
BOOL WINAPI D3DXIntersectTri(CONST D3DXVECTOR3 *p0, CONST D3DXVECTOR3 *p1, CONST D3DXVECTOR3 *p2, CONST D3DXVECTOR3 *praypos, CONST D3DXVECTOR3 *praydir, FLOAT *pu, FLOAT *pv, FLOAT *pdist)
diff --git a/include/d3dx9mesh.h b/include/d3dx9mesh.h
index 5cfc25e..a85f80d 100644
--- a/include/d3dx9mesh.h
+++ b/include/d3dx9mesh.h
@@ -30,6 +30,7 @@ UINT WINAPI D3DXGetFVFVertexSize(DWORD);
BOOL WINAPI D3DXBoxBoundProbe(CONST D3DXVECTOR3 *, CONST D3DXVECTOR3 *, CONST D3DXVECTOR3 *, CONST D3DXVECTOR3 *);
BOOL WINAPI D3DXSphereBoundProbe(CONST D3DXVECTOR3 *,FLOAT,CONST D3DXVECTOR3 *,CONST D3DXVECTOR3 *);
HRESULT WINAPI D3DXComputeBoundingBox(CONST D3DXVECTOR3 *, DWORD, DWORD, D3DXVECTOR3 *, D3DXVECTOR3 *);
+HRESULT WINAPI D3DXComputeBoundingSphere(CONST D3DXVECTOR3 *, DWORD, DWORD, D3DXVECTOR3 *, FLOAT *);
BOOL WINAPI D3DXIntersectTri(CONST D3DXVECTOR3 *, CONST D3DXVECTOR3 *, CONST D3DXVECTOR3 *, CONST D3DXVECTOR3 *, CONST D3DXVECTOR3*, FLOAT *, FLOAT *, FLOAT *);
#ifdef __cplusplus
More information about the wine-cvs
mailing list