Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
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-winehq
Commits
5552613b
Commit
5552613b
authored
Jun 23, 2011
by
Michael Mc Donnell
Committed by
Alexandre Julliard
Aug 02, 2011
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
d3dx9/tests: Implemented ConvertPointRepsToAdjacency test.
parent
e81e7314
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
548 additions
and
0 deletions
+548
-0
mesh.c
dlls/d3dx9_36/tests/mesh.c
+548
-0
No files found.
dlls/d3dx9_36/tests/mesh.c
View file @
5552613b
...
...
@@ -5420,6 +5420,553 @@ cleanup:
free_test_context
(
test_context
);
}
static
void
test_convert_point_reps_to_adjacency
(
void
)
{
HRESULT
hr
;
struct
test_context
*
test_context
=
NULL
;
const
DWORD
options
=
D3DXMESH_32BIT
|
D3DXMESH_SYSTEMMEM
;
const
DWORD
options_16bit
=
D3DXMESH_SYSTEMMEM
;
const
D3DVERTEXELEMENT9
declaration
[]
=
{
{
0
,
0
,
D3DDECLTYPE_FLOAT3
,
D3DDECLMETHOD_DEFAULT
,
D3DDECLUSAGE_POSITION
,
0
},
{
0
,
12
,
D3DDECLTYPE_FLOAT3
,
D3DDECLMETHOD_DEFAULT
,
D3DDECLUSAGE_NORMAL
,
0
},
{
0
,
24
,
D3DDECLTYPE_D3DCOLOR
,
D3DDECLMETHOD_DEFAULT
,
D3DDECLUSAGE_COLOR
,
0
},
D3DDECL_END
()
};
const
unsigned
int
VERTS_PER_FACE
=
3
;
void
*
vertex_buffer
;
void
*
index_buffer
;
DWORD
*
attributes_buffer
;
int
i
,
j
;
enum
color
{
RED
=
0xffff0000
,
GREEN
=
0xff00ff00
,
BLUE
=
0xff0000ff
};
struct
vertex_pnc
{
D3DXVECTOR3
position
;
D3DXVECTOR3
normal
;
enum
color
color
;
/* In case of manual visual inspection */
};
D3DXVECTOR3
up
=
{
0
.
0
f
,
0
.
0
f
,
1
.
0
f
};
/* mesh0 (one face)
*
* 0--1
* | /
* |/
* 2
*/
const
struct
vertex_pnc
vertices0
[]
=
{
{{
0
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
RED
},
{{
2
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
GREEN
},
{{
0
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
BLUE
},
};
const
DWORD
indices0
[]
=
{
0
,
1
,
2
};
const
unsigned
int
num_vertices0
=
ARRAY_SIZE
(
vertices0
);
const
unsigned
int
num_faces0
=
num_vertices0
/
VERTS_PER_FACE
;
const
DWORD
exp_adjacency0
[]
=
{
-
1
,
-
1
,
-
1
};
const
DWORD
exp_id_adjacency0
[]
=
{
-
1
,
-
1
,
-
1
};
const
DWORD
point_rep0
[]
=
{
0
,
1
,
2
};
/* mesh1 (right)
*
* 0--1 3
* | / /|
* |/ / |
* 2 5--4
*/
const
struct
vertex_pnc
vertices1
[]
=
{
{{
0
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
RED
},
{{
2
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
GREEN
},
{{
0
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
BLUE
},
{{
3
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
GREEN
},
{{
3
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
RED
},
{{
1
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
BLUE
},
};
const
DWORD
indices1
[]
=
{
0
,
1
,
2
,
3
,
4
,
5
};
const
unsigned
int
num_vertices1
=
ARRAY_SIZE
(
vertices1
);
const
unsigned
int
num_faces1
=
num_vertices1
/
VERTS_PER_FACE
;
const
DWORD
exp_adjacency1
[]
=
{
-
1
,
1
,
-
1
,
-
1
,
-
1
,
0
};
const
DWORD
exp_id_adjacency1
[]
=
{
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
};
const
DWORD
point_rep1
[]
=
{
0
,
1
,
2
,
1
,
4
,
2
};
/* mesh2 (left)
*
* 3 0--1
* /| | /
* / | |/
* 5--4 2
*/
const
struct
vertex_pnc
vertices2
[]
=
{
{{
0
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
RED
},
{{
2
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
GREEN
},
{{
0
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
BLUE
},
{{
-
1
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
RED
},
{{
-
1
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
GREEN
},
{{
-
3
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
BLUE
},
};
const
DWORD
indices2
[]
=
{
0
,
1
,
2
,
3
,
4
,
5
};
const
unsigned
int
num_vertices2
=
ARRAY_SIZE
(
vertices2
);
const
unsigned
int
num_faces2
=
num_vertices2
/
VERTS_PER_FACE
;
const
DWORD
exp_adjacency2
[]
=
{
-
1
,
-
1
,
1
,
0
,
-
1
,
-
1
};
const
DWORD
exp_id_adjacency2
[]
=
{
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
};
const
DWORD
point_rep2
[]
=
{
0
,
1
,
2
,
0
,
2
,
5
};
/* mesh3 (above)
*
* 3
* /|
* / |
* 5--4
* 0--1
* | /
* |/
* 2
*/
struct
vertex_pnc
vertices3
[]
=
{
{{
0
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
RED
},
{{
2
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
GREEN
},
{{
0
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
BLUE
},
{{
2
.
0
f
,
7
.
0
f
,
0
.
f
},
up
,
BLUE
},
{{
2
.
0
f
,
4
.
0
f
,
0
.
f
},
up
,
GREEN
},
{{
0
.
0
f
,
4
.
0
f
,
0
.
f
},
up
,
RED
},
};
const
DWORD
indices3
[]
=
{
0
,
1
,
2
,
3
,
4
,
5
};
const
unsigned
int
num_vertices3
=
ARRAY_SIZE
(
vertices3
);
const
unsigned
int
num_faces3
=
num_vertices3
/
VERTS_PER_FACE
;
const
DWORD
exp_adjacency3
[]
=
{
1
,
-
1
,
-
1
,
-
1
,
0
,
-
1
};
const
DWORD
exp_id_adjacency3
[]
=
{
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
};
const
DWORD
point_rep3
[]
=
{
0
,
1
,
2
,
3
,
1
,
0
};
/* mesh4 (below, tip against tip)
*
* 0--1
* | /
* |/
* 2
* 3
* |\
* | \
* 5--4
*/
struct
vertex_pnc
vertices4
[]
=
{
{{
0
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
RED
},
{{
2
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
GREEN
},
{{
0
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
BLUE
},
{{
0
.
0
f
,
-
4
.
0
f
,
0
.
f
},
up
,
BLUE
},
{{
2
.
0
f
,
-
7
.
0
f
,
0
.
f
},
up
,
GREEN
},
{{
0
.
0
f
,
-
7
.
0
f
,
0
.
f
},
up
,
RED
},
};
const
DWORD
indices4
[]
=
{
0
,
1
,
2
,
3
,
4
,
5
};
const
unsigned
int
num_vertices4
=
ARRAY_SIZE
(
vertices4
);
const
unsigned
int
num_faces4
=
num_vertices4
/
VERTS_PER_FACE
;
const
DWORD
exp_adjacency4
[]
=
{
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
};
const
DWORD
exp_id_adjacency4
[]
=
{
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
};
const
DWORD
point_rep4
[]
=
{
0
,
1
,
2
,
3
,
4
,
5
};
/* mesh5 (gap in mesh)
*
* 0 3-----4 15
* / \ \ / / \
* / \ \ / / \
* 2-----1 5 17-----16
* 6-----7 9 12-----13
* \ / / \ \ /
* \ / / \ \ /
* 8 10-----11 14
*
*/
const
struct
vertex_pnc
vertices5
[]
=
{
{{
0
.
0
f
,
1
.
0
f
,
0
.
f
},
up
,
RED
},
{{
1
.
0
f
,
-
1
.
0
f
,
0
.
f
},
up
,
GREEN
},
{{
-
1
.
0
f
,
-
1
.
0
f
,
0
.
f
},
up
,
BLUE
},
{{
0
.
1
f
,
1
.
0
f
,
0
.
f
},
up
,
RED
},
{{
2
.
1
f
,
1
.
0
f
,
0
.
f
},
up
,
BLUE
},
{{
1
.
1
f
,
-
1
.
0
f
,
0
.
f
},
up
,
GREEN
},
{{
-
1
.
0
f
,
-
1
.
1
f
,
0
.
f
},
up
,
BLUE
},
{{
1
.
0
f
,
-
1
.
1
f
,
0
.
f
},
up
,
GREEN
},
{{
0
.
0
f
,
-
3
.
1
f
,
0
.
f
},
up
,
RED
},
{{
1
.
1
f
,
-
1
.
1
f
,
0
.
f
},
up
,
GREEN
},
{{
2
.
1
f
,
-
3
.
1
f
,
0
.
f
},
up
,
BLUE
},
{{
0
.
1
f
,
-
3
.
1
f
,
0
.
f
},
up
,
RED
},
{{
1
.
2
f
,
-
1
.
1
f
,
0
.
f
},
up
,
GREEN
},
{{
3
.
2
f
,
-
1
.
1
f
,
0
.
f
},
up
,
RED
},
{{
2
.
2
f
,
-
3
.
1
f
,
0
.
f
},
up
,
BLUE
},
{{
2
.
2
f
,
1
.
0
f
,
0
.
f
},
up
,
BLUE
},
{{
3
.
2
f
,
-
1
.
0
f
,
0
.
f
},
up
,
RED
},
{{
1
.
2
f
,
-
1
.
0
f
,
0
.
f
},
up
,
GREEN
},
};
const
DWORD
indices5
[]
=
{
0
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
13
,
14
,
15
,
16
,
17
};
const
unsigned
int
num_vertices5
=
ARRAY_SIZE
(
vertices5
);
const
unsigned
int
num_faces5
=
num_vertices5
/
VERTS_PER_FACE
;
const
DWORD
exp_adjacency5
[]
=
{
-
1
,
2
,
-
1
,
-
1
,
5
,
-
1
,
0
,
-
1
,
-
1
,
4
,
-
1
,
-
1
,
5
,
-
1
,
3
,
-
1
,
4
,
1
};
const
DWORD
exp_id_adjacency5
[]
=
{
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
};
const
DWORD
point_rep5
[]
=
{
0
,
1
,
2
,
3
,
4
,
5
,
2
,
1
,
8
,
5
,
10
,
11
,
5
,
13
,
10
,
4
,
13
,
5
};
/* mesh6 (indices re-ordering)
*
* 0--1 6 3
* | / /| |\
* |/ / | | \
* 2 8--7 5--4
*/
const
struct
vertex_pnc
vertices6
[]
=
{
{{
0
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
RED
},
{{
2
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
GREEN
},
{{
0
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
BLUE
},
{{
3
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
GREEN
},
{{
3
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
RED
},
{{
1
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
BLUE
},
{{
4
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
GREEN
},
{{
6
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
BLUE
},
{{
4
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
RED
},
};
const
DWORD
indices6
[]
=
{
0
,
1
,
2
,
6
,
7
,
8
,
3
,
4
,
5
};
const
unsigned
int
num_vertices6
=
ARRAY_SIZE
(
vertices6
);
const
unsigned
int
num_faces6
=
num_vertices6
/
VERTS_PER_FACE
;
const
DWORD
exp_adjacency6
[]
=
{
-
1
,
1
,
-
1
,
2
,
-
1
,
0
,
-
1
,
-
1
,
1
};
const
DWORD
exp_id_adjacency6
[]
=
{
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
};
const
DWORD
point_rep6
[]
=
{
0
,
1
,
2
,
1
,
4
,
5
,
1
,
5
,
2
};
/* mesh7 (expands collapsed triangle)
*
* 0--1 3
* | / /|
* |/ / |
* 2 5--4
*/
const
struct
vertex_pnc
vertices7
[]
=
{
{{
0
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
RED
},
{{
2
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
GREEN
},
{{
0
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
BLUE
},
{{
3
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
GREEN
},
{{
3
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
RED
},
{{
1
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
BLUE
},
};
const
DWORD
indices7
[]
=
{
0
,
1
,
2
,
3
,
3
,
3
};
/* Face 1 is collapsed*/
const
unsigned
int
num_vertices7
=
ARRAY_SIZE
(
vertices7
);
const
unsigned
int
num_faces7
=
num_vertices7
/
VERTS_PER_FACE
;
const
DWORD
exp_adjacency7
[]
=
{
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
};
const
DWORD
exp_id_adjacency7
[]
=
{
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
};
const
DWORD
point_rep7
[]
=
{
0
,
1
,
2
,
3
,
4
,
5
};
/* mesh8 (indices re-ordering and double replacement)
*
* 0--1 9 6
* | / /| |\
* |/ / | | \
* 2 11-10 8--7
* 3--4
* | /
* |/
* 5
*/
const
struct
vertex_pnc
vertices8
[]
=
{
{{
0
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
RED
},
{{
2
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
GREEN
},
{{
0
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
BLUE
},
{{
4
.
0
,
-
4
.
0
,
0
.
f
},
up
,
RED
},
{{
6
.
0
,
-
4
.
0
,
0
.
f
},
up
,
BLUE
},
{{
4
.
0
,
-
7
.
0
,
0
.
f
},
up
,
GREEN
},
{{
4
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
GREEN
},
{{
6
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
BLUE
},
{{
4
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
RED
},
{{
3
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
GREEN
},
{{
3
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
RED
},
{{
1
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
BLUE
},
};
const
DWORD
indices8
[]
=
{
0
,
1
,
2
,
9
,
10
,
11
,
6
,
7
,
8
,
3
,
4
,
5
};
const
WORD
indices8_16bit
[]
=
{
0
,
1
,
2
,
9
,
10
,
11
,
6
,
7
,
8
,
3
,
4
,
5
};
const
unsigned
int
num_vertices8
=
ARRAY_SIZE
(
vertices8
);
const
unsigned
int
num_faces8
=
num_vertices8
/
VERTS_PER_FACE
;
const
DWORD
exp_adjacency8
[]
=
{
-
1
,
1
,
-
1
,
2
,
-
1
,
0
,
-
1
,
3
,
1
,
2
,
-
1
,
-
1
};
const
DWORD
exp_id_adjacency8
[]
=
{
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
};
const
DWORD
point_rep8
[]
=
{
0
,
1
,
2
,
3
,
4
,
5
,
1
,
4
,
3
,
1
,
3
,
2
};
/* mesh9 (right, shared vertices)
*
* 0--1
* | /|
* |/ |
* 2--3
*/
const
struct
vertex_pnc
vertices9
[]
=
{
{{
0
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
RED
},
{{
2
.
0
f
,
3
.
0
f
,
0
.
f
},
up
,
GREEN
},
{{
0
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
BLUE
},
{{
2
.
0
f
,
0
.
0
f
,
0
.
f
},
up
,
RED
},
};
const
DWORD
indices9
[]
=
{
0
,
1
,
2
,
1
,
3
,
2
};
const
unsigned
int
num_vertices9
=
ARRAY_SIZE
(
vertices9
);
const
unsigned
int
num_faces9
=
2
;
const
DWORD
exp_adjacency9
[]
=
{
-
1
,
1
,
-
1
,
-
1
,
-
1
,
0
};
const
DWORD
exp_id_adjacency9
[]
=
{
-
1
,
1
,
-
1
,
-
1
,
-
1
,
0
};
const
DWORD
point_rep9
[]
=
{
0
,
1
,
2
,
3
};
/* All mesh data */
ID3DXMesh
*
mesh
=
NULL
;
ID3DXMesh
*
mesh_null_check
=
NULL
;
unsigned
int
attributes
[]
=
{
0
};
struct
{
const
struct
vertex_pnc
*
vertices
;
const
DWORD
*
indices
;
const
DWORD
num_vertices
;
const
DWORD
num_faces
;
const
DWORD
*
point_reps
;
const
DWORD
*
exp_adjacency
;
const
DWORD
*
exp_id_adjacency
;
const
DWORD
options
;
}
tc
[]
=
{
{
vertices0
,
indices0
,
num_vertices0
,
num_faces0
,
point_rep0
,
exp_adjacency0
,
exp_id_adjacency0
,
options
},
{
vertices1
,
indices1
,
num_vertices1
,
num_faces1
,
point_rep1
,
exp_adjacency1
,
exp_id_adjacency1
,
options
},
{
vertices2
,
indices2
,
num_vertices2
,
num_faces2
,
point_rep2
,
exp_adjacency2
,
exp_id_adjacency2
,
options
},
{
vertices3
,
indices3
,
num_vertices3
,
num_faces3
,
point_rep3
,
exp_adjacency3
,
exp_id_adjacency3
,
options
},
{
vertices4
,
indices4
,
num_vertices4
,
num_faces4
,
point_rep4
,
exp_adjacency4
,
exp_id_adjacency4
,
options
},
{
vertices5
,
indices5
,
num_vertices5
,
num_faces5
,
point_rep5
,
exp_adjacency5
,
exp_id_adjacency5
,
options
},
{
vertices6
,
indices6
,
num_vertices6
,
num_faces6
,
point_rep6
,
exp_adjacency6
,
exp_id_adjacency6
,
options
},
{
vertices7
,
indices7
,
num_vertices7
,
num_faces7
,
point_rep7
,
exp_adjacency7
,
exp_id_adjacency7
,
options
},
{
vertices8
,
indices8
,
num_vertices8
,
num_faces8
,
point_rep8
,
exp_adjacency8
,
exp_id_adjacency8
,
options
},
{
vertices9
,
indices9
,
num_vertices9
,
num_faces9
,
point_rep9
,
exp_adjacency9
,
exp_id_adjacency9
,
options
},
{
vertices8
,
(
DWORD
*
)
indices8_16bit
,
num_vertices8
,
num_faces8
,
point_rep8
,
exp_adjacency8
,
exp_id_adjacency8
,
options_16bit
},
};
DWORD
*
adjacency
=
NULL
;
test_context
=
new_test_context
();
if
(
!
test_context
)
{
skip
(
"Couldn't create test context
\n
"
);
goto
cleanup
;
}
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
tc
);
i
++
)
{
hr
=
D3DXCreateMesh
(
tc
[
i
].
num_faces
,
tc
[
i
].
num_vertices
,
tc
[
i
].
options
,
declaration
,
test_context
->
device
,
&
mesh
);
if
(
FAILED
(
hr
))
{
skip
(
"Couldn't create mesh %d. Got %x expected D3D_OK
\n
"
,
i
,
hr
);
goto
cleanup
;
}
if
(
i
==
0
)
/* Save first mesh for later NULL checks */
mesh_null_check
=
mesh
;
adjacency
=
HeapAlloc
(
GetProcessHeap
(),
0
,
VERTS_PER_FACE
*
tc
[
i
].
num_faces
*
sizeof
(
*
adjacency
));
if
(
!
adjacency
)
{
skip
(
"Couldn't allocate adjacency array.
\n
"
);
goto
cleanup
;
}
hr
=
mesh
->
lpVtbl
->
LockVertexBuffer
(
mesh
,
0
,
&
vertex_buffer
);
if
(
FAILED
(
hr
))
{
skip
(
"Couldn't lock vertex buffer.
\n
"
);
goto
cleanup
;
}
memcpy
(
vertex_buffer
,
tc
[
i
].
vertices
,
tc
[
i
].
num_vertices
*
sizeof
(
*
tc
[
i
].
vertices
));
hr
=
mesh
->
lpVtbl
->
UnlockVertexBuffer
(
mesh
);
if
(
FAILED
(
hr
))
{
skip
(
"Couldn't unlock vertex buffer.
\n
"
);
goto
cleanup
;
}
hr
=
mesh
->
lpVtbl
->
LockIndexBuffer
(
mesh
,
0
,
&
index_buffer
);
if
(
FAILED
(
hr
))
{
skip
(
"Couldn't lock index buffer.
\n
"
);
goto
cleanup
;
}
if
(
tc
[
i
].
options
&
D3DXMESH_32BIT
)
{
memcpy
(
index_buffer
,
tc
[
i
].
indices
,
VERTS_PER_FACE
*
tc
[
i
].
num_faces
*
sizeof
(
DWORD
));
}
else
{
memcpy
(
index_buffer
,
tc
[
i
].
indices
,
VERTS_PER_FACE
*
tc
[
i
].
num_faces
*
sizeof
(
WORD
));
}
hr
=
mesh
->
lpVtbl
->
UnlockIndexBuffer
(
mesh
);
if
(
FAILED
(
hr
))
{
skip
(
"Couldn't unlock index buffer.
\n
"
);
goto
cleanup
;
}
hr
=
mesh
->
lpVtbl
->
LockAttributeBuffer
(
mesh
,
0
,
&
attributes_buffer
);
if
(
FAILED
(
hr
))
{
skip
(
"Couldn't lock attributes buffer.
\n
"
);
goto
cleanup
;
}
memcpy
(
attributes_buffer
,
attributes
,
sizeof
(
attributes
));
hr
=
mesh
->
lpVtbl
->
UnlockAttributeBuffer
(
mesh
);
if
(
FAILED
(
hr
))
{
skip
(
"Couldn't unlock attributes buffer.
\n
"
);
goto
cleanup
;
}
/* Convert point representation to adjacency*/
memset
(
adjacency
,
-
2
,
VERTS_PER_FACE
*
tc
[
i
].
num_faces
*
sizeof
(
*
adjacency
));
hr
=
mesh
->
lpVtbl
->
ConvertPointRepsToAdjacency
(
mesh
,
tc
[
i
].
point_reps
,
adjacency
);
todo_wine
ok
(
hr
==
D3D_OK
,
"ConvertPointRepsToAdjacency failed case %d. "
"Got %x expected D3D_OK
\n
"
,
i
,
hr
);
/* Check adjacency */
for
(
j
=
0
;
j
<
VERTS_PER_FACE
*
tc
[
i
].
num_faces
;
j
++
)
{
todo_wine
ok
(
adjacency
[
j
]
==
tc
[
i
].
exp_adjacency
[
j
],
"Unexpected adjacency information at (%d, %d)."
" Got %d expected %d
\n
"
,
i
,
j
,
adjacency
[
j
],
tc
[
i
].
exp_adjacency
[
j
]);
}
/* NULL point representation is considered identity. */
memset
(
adjacency
,
-
2
,
VERTS_PER_FACE
*
tc
[
i
].
num_faces
*
sizeof
(
*
adjacency
));
hr
=
mesh_null_check
->
lpVtbl
->
ConvertPointRepsToAdjacency
(
mesh
,
NULL
,
adjacency
);
todo_wine
ok
(
hr
==
D3D_OK
,
"ConvertPointRepsToAdjacency NULL point_reps. "
"Got %x expected D3D_OK
\n
"
,
hr
);
for
(
j
=
0
;
j
<
VERTS_PER_FACE
*
tc
[
i
].
num_faces
;
j
++
)
{
todo_wine
ok
(
adjacency
[
j
]
==
tc
[
i
].
exp_id_adjacency
[
j
],
"Unexpected adjacency information (id) at (%d, %d)."
" Got %d expected %d
\n
"
,
i
,
j
,
adjacency
[
j
],
tc
[
i
].
exp_id_adjacency
[
j
]);
}
HeapFree
(
GetProcessHeap
(),
0
,
adjacency
);
if
(
i
!=
0
)
/* First mesh will be freed during cleanup */
mesh
->
lpVtbl
->
Release
(
mesh
);
}
/* NULL checks */
hr
=
mesh_null_check
->
lpVtbl
->
ConvertPointRepsToAdjacency
(
mesh_null_check
,
tc
[
0
].
point_reps
,
NULL
);
todo_wine
ok
(
hr
==
D3DERR_INVALIDCALL
,
"ConvertPointRepsToAdjacency NULL adjacency. "
"Got %x expected D3DERR_INVALIDCALL
\n
"
,
hr
);
hr
=
mesh_null_check
->
lpVtbl
->
ConvertPointRepsToAdjacency
(
mesh_null_check
,
NULL
,
NULL
);
todo_wine
ok
(
hr
==
D3DERR_INVALIDCALL
,
"ConvertPointRepsToAdjacency NULL point_reps and adjacency. "
"Got %x expected D3DERR_INVALIDCALL
\n
"
,
hr
);
cleanup:
if
(
mesh_null_check
)
mesh_null_check
->
lpVtbl
->
Release
(
mesh_null_check
);
HeapFree
(
GetProcessHeap
(),
0
,
adjacency
);
free_test_context
(
test_context
);
}
START_TEST
(
mesh
)
{
D3DXBoundProbeTest
();
...
...
@@ -5441,4 +5988,5 @@ START_TEST(mesh)
test_update_semantics
();
test_create_skin_info
();
test_convert_adjacency_to_point_reps
();
test_convert_point_reps_to_adjacency
();
}
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