Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
a4b622d8
Commit
a4b622d8
authored
Feb 07, 2010
by
Christian Costa
Committed by
Alexandre Julliard
Feb 08, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
d3drm: Beginning of Mesh info retrieval.
parent
497be4f8
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
94 additions
and
8 deletions
+94
-8
meshbuilder.c
dlls/d3drm/meshbuilder.c
+71
-6
d3drm.c
dlls/d3drm/tests/d3drm.c
+23
-2
No files found.
dlls/d3drm/meshbuilder.c
View file @
a4b622d8
...
...
@@ -37,6 +37,13 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3drm);
typedef
struct
{
const
IDirect3DRMMeshBuilderVtbl
*
lpVtbl
;
LONG
ref
;
DWORD
nb_vertices
;
D3DVECTOR
*
pVertices
;
DWORD
nb_normals
;
D3DVECTOR
*
pNormals
;
DWORD
nb_faces
;
DWORD
face_data_size
;
LPVOID
pFaceData
;
}
IDirect3DRMMeshBuilderImpl
;
typedef
struct
{
...
...
@@ -328,7 +335,12 @@ static ULONG WINAPI IDirect3DRMMeshBuilderImpl_Release(IDirect3DRMMeshBuilder* i
TRACE
(
"(%p)
\n
"
,
This
);
if
(
!
ref
)
{
HeapFree
(
GetProcessHeap
(),
0
,
This
->
pVertices
);
HeapFree
(
GetProcessHeap
(),
0
,
This
->
pNormals
);
HeapFree
(
GetProcessHeap
(),
0
,
This
->
pFaceData
);
HeapFree
(
GetProcessHeap
(),
0
,
This
);
}
return
ref
;
}
...
...
@@ -417,11 +429,20 @@ static HRESULT WINAPI IDirect3DRMMeshBuilderImpl_Load(IDirect3DRMMeshBuilder* if
const
GUID
*
pGuid
;
DWORD
size
;
Header
*
pHeader
;
LPBYTE
ptr
;
HRESULT
hr
;
HRESULT
ret
=
D3DRMERR_BADOBJECT
;
FIXME
(
"(%p)->(%p,%p,%x,%p,%p): partial stub
\n
"
,
This
,
filename
,
name
,
loadflags
,
cb
,
pArg
);
/* First free allocated buffers of previous mesh data */
HeapFree
(
GetProcessHeap
(),
0
,
This
->
pVertices
);
This
->
pVertices
=
NULL
;
HeapFree
(
GetProcessHeap
(),
0
,
This
->
pNormals
);
This
->
pNormals
=
NULL
;
HeapFree
(
GetProcessHeap
(),
0
,
This
->
pFaceData
);
This
->
pFaceData
=
NULL
;
if
(
loadflags
==
D3DRMLOAD_FROMMEMORY
)
{
DXFILELOADMEMORY
info
;
...
...
@@ -499,6 +520,22 @@ static HRESULT WINAPI IDirect3DRMMeshBuilderImpl_Load(IDirect3DRMMeshBuilder* if
goto
end
;
}
hr
=
IDirectXFileData_GetData
(
pData
,
NULL
,
&
size
,
(
void
**
)
&
ptr
);
if
(
hr
!=
DXFILE_OK
)
goto
end
;
This
->
nb_vertices
=
*
(
DWORD
*
)
ptr
;
This
->
nb_faces
=
*
(
DWORD
*
)(
ptr
+
sizeof
(
DWORD
)
+
This
->
nb_vertices
*
sizeof
(
D3DVECTOR
));
This
->
face_data_size
=
size
-
sizeof
(
DWORD
)
-
This
->
nb_vertices
*
sizeof
(
D3DVECTOR
)
-
sizeof
(
DWORD
);
TRACE
(
"Mesh: nb_vertices = %d, nb_faces = %d, face_data_size = %d
\n
"
,
This
->
nb_vertices
,
This
->
nb_faces
,
This
->
face_data_size
);
This
->
pVertices
=
HeapAlloc
(
GetProcessHeap
(),
0
,
This
->
nb_vertices
*
sizeof
(
D3DVECTOR
));
memcpy
(
This
->
pVertices
,
ptr
+
sizeof
(
DWORD
),
This
->
nb_vertices
*
sizeof
(
D3DVECTOR
));
This
->
pFaceData
=
HeapAlloc
(
GetProcessHeap
(),
0
,
This
->
face_data_size
);
memcpy
(
This
->
pFaceData
,
ptr
+
sizeof
(
DWORD
)
+
This
->
nb_vertices
*
sizeof
(
D3DVECTOR
)
+
sizeof
(
DWORD
),
This
->
face_data_size
);
ret
=
D3DRM_OK
;
end:
...
...
@@ -509,6 +546,21 @@ end:
if
(
pDXFile
)
IDirectXFile_Release
(
pDXFile
);
if
(
hr
!=
D3DRM_OK
)
{
/* Clean mesh data */
This
->
nb_vertices
=
0
;
This
->
nb_normals
=
0
;
This
->
nb_faces
=
0
;
This
->
face_data_size
=
0
;
HeapFree
(
GetProcessHeap
(),
0
,
This
->
pVertices
);
This
->
pVertices
=
NULL
;
HeapFree
(
GetProcessHeap
(),
0
,
This
->
pNormals
);
This
->
pNormals
=
NULL
;
HeapFree
(
GetProcessHeap
(),
0
,
This
->
pFaceData
);
This
->
pFaceData
=
NULL
;
}
return
ret
;
}
...
...
@@ -750,9 +802,22 @@ static HRESULT WINAPI IDirect3DRMMeshBuilderImpl_GetVertices(IDirect3DRMMeshBuil
{
IDirect3DRMMeshBuilderImpl
*
This
=
(
IDirect3DRMMeshBuilderImpl
*
)
iface
;
FIXME
(
"(%p)->(%p,%p,%p,%p,%p,%p): stub
\n
"
,
This
,
vcount
,
vertices
,
ncount
,
normals
,
face_data_size
,
face_data
);
TRACE
(
"(%p)->(%p,%p,%p,%p,%p,%p)
\n
"
,
This
,
vcount
,
vertices
,
ncount
,
normals
,
face_data_size
,
face_data
);
return
E_NOTIMPL
;
if
(
vcount
)
*
vcount
=
This
->
nb_vertices
;
if
(
vertices
&&
This
->
nb_vertices
)
memcpy
(
vertices
,
This
->
pVertices
,
This
->
nb_vertices
*
sizeof
(
D3DVECTOR
));
if
(
ncount
)
*
ncount
=
This
->
nb_normals
;
if
(
normals
&&
This
->
nb_normals
)
memcpy
(
normals
,
This
->
pNormals
,
This
->
nb_normals
*
sizeof
(
D3DVECTOR
));
if
(
face_data_size
)
*
face_data_size
=
This
->
face_data_size
;
if
(
face_data
&&
This
->
face_data_size
)
memcpy
(
face_data
,
This
->
pFaceData
,
This
->
face_data_size
);
return
D3DRM_OK
;
}
static
HRESULT
WINAPI
IDirect3DRMMeshBuilderImpl_GetTextureCoordinates
(
IDirect3DRMMeshBuilder
*
iface
,
DWORD
index
,
D3DVALUE
*
u
,
D3DVALUE
*
v
)
...
...
@@ -813,18 +878,18 @@ static int WINAPI IDirect3DRMMeshBuilderImpl_GetFaceCount(IDirect3DRMMeshBuilder
{
IDirect3DRMMeshBuilderImpl
*
This
=
(
IDirect3DRMMeshBuilderImpl
*
)
iface
;
FIXME
(
"(%p)->(): stub
\n
"
,
This
);
TRACE
(
"(%p)->()
\n
"
,
This
);
return
0
;
return
This
->
nb_faces
;
}
static
int
WINAPI
IDirect3DRMMeshBuilderImpl_GetVertexCount
(
IDirect3DRMMeshBuilder
*
iface
)
{
IDirect3DRMMeshBuilderImpl
*
This
=
(
IDirect3DRMMeshBuilderImpl
*
)
iface
;
FIXME
(
"(%p)->(): stub
\n
"
,
This
);
TRACE
(
"(%p)->()
\n
"
,
This
);
return
0
;
return
This
->
nb_vertices
;
}
static
D3DCOLOR
WINAPI
IDirect3DRMMeshBuilderImpl_GetVertexColor
(
IDirect3DRMMeshBuilder
*
iface
,
DWORD
index
)
...
...
dlls/d3drm/tests/d3drm.c
View file @
a4b622d8
...
...
@@ -69,8 +69,15 @@ char data_ok[] =
"}
\n
"
"Mesh Object
\n
"
"{
\n
"
"0;
\n
"
"0;
\n
"
"4;
\n
"
"1.0; 0.0; 0.0;,
\n
"
"0.0; 1.0; 0.0;,
\n
"
"0.0; 0.0; 1.0;,
\n
"
"1.0; 1.0; 1.0;;
\n
"
"3;
\n
"
"3; 0, 1, 2;,
\n
"
"3; 1, 2, 3;,
\n
"
"3; 3, 1, 2;;
\n
"
"}
\n
"
;
static
void
MeshBuilderTest
(
void
)
...
...
@@ -79,6 +86,8 @@ static void MeshBuilderTest(void)
LPDIRECT3DRM
pD3DRM
;
LPDIRECT3DRMMESHBUILDER
pMeshBuilder
;
D3DRMLOADMEMORY
info
;
int
val
;
DWORD
val1
,
val2
,
val3
;
hr
=
pDirect3DRMCreate
(
&
pD3DRM
);
ok
(
hr
==
D3DRM_OK
,
"Cannot get IDirect3DRM interface (hr = %x)
\n
"
,
hr
);
...
...
@@ -101,6 +110,18 @@ static void MeshBuilderTest(void)
hr
=
IDirect3DRMMeshBuilder_Load
(
pMeshBuilder
,
&
info
,
NULL
,
D3DRMLOAD_FROMMEMORY
,
NULL
,
NULL
);
ok
(
hr
==
D3DRM_OK
,
"Cannot load mesh data (hr = %x)
\n
"
,
hr
);
val
=
IDirect3DRMMeshBuilder_GetVertexCount
(
pMeshBuilder
);
ok
(
val
==
4
,
"Wrong number of vertices %d (must be 4)
\n
"
,
val
);
val
=
IDirect3DRMMeshBuilder_GetFaceCount
(
pMeshBuilder
);
ok
(
val
==
3
,
"Wrong number of faces %d (must be 3)
\n
"
,
val
);
hr
=
IDirect3DRMMeshBuilder_GetVertices
(
pMeshBuilder
,
&
val1
,
NULL
,
&
val2
,
NULL
,
&
val3
,
NULL
);
ok
(
hr
==
D3DRM_OK
,
"Cannot get vertices information (hr = %x)
\n
"
,
hr
);
ok
(
val1
==
4
,
"Wrong number of vertices %d (must be 4)
\n
"
,
val1
);
todo_wine
ok
(
val2
==
4
,
"Wrong number of normals %d (must be 4)
\n
"
,
val2
);
todo_wine
ok
(
val3
==
22
,
"Wrong number of face data bytes %d (must be 22)
\n
"
,
val3
);
IDirect3DRMMeshBuilder_Release
(
pMeshBuilder
);
IDirect3DRM_Release
(
pD3DRM
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment