David Adam : d3dx9_36: Implement D3DXIntersectTri.
Alexandre Julliard
julliard at winehq.org
Tue Feb 3 09:13:33 CST 2009
Module: wine
Branch: master
Commit: 8716c62c6eb2f2405b2d8ba7561f2727027a4ce1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8716c62c6eb2f2405b2d8ba7561f2727027a4ce1
Author: David Adam <david.adam.cnrs at gmail.com>
Date: Tue Feb 3 09:36:08 2009 +0100
d3dx9_36: Implement D3DXIntersectTri.
---
dlls/d3dx9_36/Makefile.in | 1 +
dlls/d3dx9_36/d3dx9_36.spec | 2 +-
dlls/d3dx9_36/mesh.c | 72 +++++++++++++++++++++++++++++++++++++++++++
include/Makefile.in | 1 +
include/d3dx9mesh.h | 38 ++++++++++++++++++++++
5 files changed, 113 insertions(+), 1 deletions(-)
diff --git a/dlls/d3dx9_36/Makefile.in b/dlls/d3dx9_36/Makefile.in
index 0b5a3d3..7cd5c3c 100644
--- a/dlls/d3dx9_36/Makefile.in
+++ b/dlls/d3dx9_36/Makefile.in
@@ -10,6 +10,7 @@ C_SRCS = \
d3dx9_36_main.c \
font.c \
math.c \
+ mesh.c \
shader.c \
sprite.c
diff --git a/dlls/d3dx9_36/d3dx9_36.spec b/dlls/d3dx9_36/d3dx9_36.spec
index ab198ab..813a5ad 100644
--- a/dlls/d3dx9_36/d3dx9_36.spec
+++ b/dlls/d3dx9_36/d3dx9_36.spec
@@ -167,7 +167,7 @@
@ stdcall D3DXGetVertexShaderProfile(ptr)
@ stdcall D3DXIntersect(ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr) d3dx8.D3DXIntersect
@ stdcall D3DXIntersectSubset(ptr long ptr ptr ptr ptr ptr ptr ptr ptr ptr) d3dx8.D3DXIntersectSubset
-@ stub D3DXIntersectTri
+@ stdcall D3DXIntersectTri(ptr ptr ptr ptr ptr ptr ptr ptr)
@ stub D3DXLoadMeshFromXA
@ stub D3DXLoadMeshFromXInMemory
@ stub D3DXLoadMeshFromXResource
diff --git a/dlls/d3dx9_36/mesh.c b/dlls/d3dx9_36/mesh.c
new file mode 100644
index 0000000..0ecace6
--- /dev/null
+++ b/dlls/d3dx9_36/mesh.c
@@ -0,0 +1,72 @@
+ /*
+ * Mesh operations specific to D3DX9.
+ *
+ * Copyright (C) 2009 David Adam
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "config.h"
+#include "windef.h"
+#include "wingdi.h"
+#include "wine/debug.h"
+#include "d3dx9.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(d3dx);
+
+/*************************************************************************
+ * 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)
+{
+ D3DXMATRIX m;
+ D3DXVECTOR4 vec;
+
+ m.m[0][0] = p1->x - p0->x;
+ m.m[1][0] = p2->x - p0->x;
+ m.m[2][0] = -praydir->x;
+ m.m[3][0] = 0.0f;
+ m.m[0][1] = p1->y - p0->z;
+ m.m[1][1] = p2->y - p0->z;
+ m.m[2][1] = -praydir->y;
+ m.m[3][1] = 0.0f;
+ m.m[0][2] = p1->z - p0->z;
+ m.m[1][2] = p2->z - p0->z;
+ m.m[2][2] = -praydir->z;
+ m.m[3][2] = 0.0f;
+ m.m[0][3] = 0.0f;
+ m.m[1][3] = 0.0f;
+ m.m[2][3] = 0.0f;
+ m.m[3][3] = 1.0f;
+
+ vec.x = praypos->x - p0->x;
+ vec.y = praypos->y - p0->y;
+ vec.z = praypos->z - p0->z;
+ vec.w = 0.0f;
+
+ if ( D3DXMatrixInverse(&m, NULL, &m) )
+ {
+ D3DXVec4Transform(&vec, &vec, &m);
+ if ( (vec.x >= 0.0f) && (vec.y >= 0.0f) && (vec.x + vec.y <= 1.0f) && (vec.z >= 0.0f) )
+ {
+ *pu = vec.x;
+ *pv = vec.y;
+ *pdist = fabs( vec.z );
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
diff --git a/include/Makefile.in b/include/Makefile.in
index 23be56b..5411cc0 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -144,6 +144,7 @@ SRCDIR_INCLUDES = \
d3dx9core.h \
d3dx9math.h \
d3dx9math.inl \
+ d3dx9mesh.h \
d3dx9shader.h \
d3dx9tex.h \
dbghelp.h \
diff --git a/include/d3dx9mesh.h b/include/d3dx9mesh.h
new file mode 100644
index 0000000..c337ad2
--- /dev/null
+++ b/include/d3dx9mesh.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2009 David Adam
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __WINE_D3DX9MESH_H
+#define __WINE_D3DX9MESH_H
+
+#include <d3dx9.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI D3DXCreateBuffer(DWORD, LPD3DXBUFFER*);
+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 *);
+BOOL WINAPI D3DXIntersectTri(CONST D3DXVECTOR3 *, CONST D3DXVECTOR3 *, CONST D3DXVECTOR3 *, CONST D3DXVECTOR3 *, CONST D3DXVECTOR3*, FLOAT *, FLOAT *, FLOAT *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_D3DX9MESH_H */
More information about the wine-cvs
mailing list