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