[PATCH 05/10] d3dx9: Add tests for D3DXCreateBox.
Misha Koshelev
misha680 at gmail.com
Fri Jul 16 17:20:31 CDT 2010
---
dlls/d3dx9_36/tests/mesh.c | 156 ++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 156 insertions(+), 0 deletions(-)
diff --git a/dlls/d3dx9_36/tests/mesh.c b/dlls/d3dx9_36/tests/mesh.c
index 9cb3421..c4481ce 100644
--- a/dlls/d3dx9_36/tests/mesh.c
+++ b/dlls/d3dx9_36/tests/mesh.c
@@ -480,6 +480,161 @@ static void D3DXIntersectTriTest(void)
ok( got_res == exp_res, "Expected result = %d, got %d\n",exp_res,got_res);
}
+static void D3DXCreateBoxTest(void)
+{
+ HRESULT hr;
+ HWND wnd;
+ IDirect3D9* d3d;
+ IDirect3DDevice9* device;
+ D3DPRESENT_PARAMETERS d3dpp;
+ ID3DXMesh* box = NULL;
+ DWORD number_of_vertices;
+ IDirect3DVertexBuffer9* vertex_buffer = NULL;
+ D3DVERTEXBUFFER_DESC vertex_buffer_description;
+ D3DXVECTOR3* vertex_data = NULL;
+ D3DXVECTOR3 test_vertex_data[48];
+ int expected, i;
+
+ hr = D3DXCreateBox(NULL, 0.0f, 0.0f, 0.0f, NULL, NULL);
+ todo_wine ok( hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3DERR_INVALIDCALL)\n",hr,D3DERR_INVALIDCALL);
+
+ hr = D3DXCreateBox(NULL, 1.0f, 0.0f, 0.0f, NULL, NULL);
+ todo_wine ok( hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3DERR_INVALIDCALL)\n",hr,D3DERR_INVALIDCALL);
+
+ hr = D3DXCreateBox(NULL, 0.0f, 1.0f, 0.0f, NULL, NULL);
+ todo_wine ok( hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3DERR_INVALIDCALL)\n",hr,D3DERR_INVALIDCALL);
+
+ hr = D3DXCreateBox(NULL, 0.0f, 0.0f, 1.0f, NULL, NULL);
+ todo_wine ok( hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3DERR_INVALIDCALL)\n",hr,D3DERR_INVALIDCALL);
+
+ wnd = CreateWindow("static", "d3dx9_test", 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL);
+ d3d = Direct3DCreate9(D3D_SDK_VERSION);
+ if (!wnd)
+ {
+ skip("Couldn't create application window\n");
+ return;
+ }
+ if (!d3d)
+ {
+ skip("Couldn't create IDirect3D9 object\n");
+ DestroyWindow(wnd);
+ return;
+ }
+
+ ZeroMemory(&d3dpp, sizeof(d3dpp));
+ d3dpp.Windowed = TRUE;
+ d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
+ hr = IDirect3D9_CreateDevice(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, wnd, D3DCREATE_MIXED_VERTEXPROCESSING, &d3dpp, &device);
+ if (FAILED(hr))
+ {
+ skip("Failed to create IDirect3DDevice9 object %#x\n", hr);
+ IDirect3D9_Release(d3d);
+ DestroyWindow(wnd);
+ return;
+ }
+
+ hr = D3DXCreateBox(device, 1.0f, 1.0f, 1.0f, &box, NULL);
+ todo_wine ok( hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n",hr);
+
+ if (box)
+ {
+ number_of_vertices = box->lpVtbl->GetNumVertices(box);
+ todo_wine ok( number_of_vertices == 24, "Got result %u, expected 24\n",number_of_vertices);
+
+ hr = box->lpVtbl->GetVertexBuffer(box, &vertex_buffer);
+ todo_wine ok( hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n",hr);
+
+ if (vertex_buffer)
+ {
+ hr = IDirect3DVertexBuffer9_GetDesc(vertex_buffer, &vertex_buffer_description);
+ todo_wine ok( hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n",hr);
+
+ if (hr == D3D_OK)
+ {
+ todo_wine ok( vertex_buffer_description.Format == D3DFMT_VERTEXDATA, "Got result %x, expected %x (D3DFMT_VERTEXDATA)\n",vertex_buffer_description.Format,D3DFMT_VERTEXDATA);
+ todo_wine ok( vertex_buffer_description.Type == D3DRTYPE_VERTEXBUFFER, "Got result %x, expected %x (D3DRTYPE_VERTEXBUFFER)\n",vertex_buffer_description.Type,D3DRTYPE_VERTEXBUFFER);
+ todo_wine ok( vertex_buffer_description.Usage == 0, "Got result %x, expected %x\n",vertex_buffer_description.Usage,0);
+ todo_wine ok( vertex_buffer_description.Pool == D3DPOOL_MANAGED, "Got result %x, expected %x (D3DPOOL_DEFAULT)\n",vertex_buffer_description.Pool,D3DPOOL_DEFAULT);
+ expected = number_of_vertices * sizeof(D3DXVECTOR3) * 2;
+ todo_wine ok( vertex_buffer_description.Size == expected, "Got result %x, expected %x\n",vertex_buffer_description.Size,expected);
+ todo_wine ok( vertex_buffer_description.FVF == (D3DFVF_XYZ | D3DFVF_NORMAL), "Got result %x, expected %x (D3DFVF_XYZ | D3DFVF_NORMAL)\n",vertex_buffer_description.FVF,D3DFVF_XYZ | D3DFVF_NORMAL);
+ }
+
+ /* Specify offset and size to avoid potential overruns */
+ hr = IDirect3DVertexBuffer9_Lock(vertex_buffer, 0, number_of_vertices * sizeof(D3DXVECTOR3) * 2, (LPVOID *)&vertex_data, D3DLOCK_DISCARD);
+ todo_wine ok( hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n",hr);
+
+ if (vertex_data)
+ {
+ test_vertex_data[0].x = -0.5f; test_vertex_data[0].y = -0.5f; test_vertex_data[0].z = -0.5f;
+ test_vertex_data[1].x = -1.0f; test_vertex_data[1].y = 0.0f; test_vertex_data[1].z = 0.0f;
+ test_vertex_data[2].x = -0.5f; test_vertex_data[2].y = -0.5f; test_vertex_data[2].z = 0.5f;
+ test_vertex_data[3].x = -1.0f; test_vertex_data[3].y = 0.0f; test_vertex_data[3].z = 0.0f;
+ test_vertex_data[4].x = -0.5f; test_vertex_data[4].y = 0.5f; test_vertex_data[4].z = 0.5f;
+ test_vertex_data[5].x = -1.0f; test_vertex_data[5].y = 0.0f; test_vertex_data[5].z = 0.0f;
+ test_vertex_data[6].x = -0.5f; test_vertex_data[6].y = 0.5f; test_vertex_data[6].z = -0.5f;
+ test_vertex_data[7].x = -1.0f; test_vertex_data[7].y = 0.0f; test_vertex_data[7].z = 0.0f;
+ test_vertex_data[8].x = -0.5f; test_vertex_data[8].y = 0.5f; test_vertex_data[8].z = -0.5f;
+ test_vertex_data[9].x = 0.0f; test_vertex_data[9].y = 1.0f; test_vertex_data[9].z = 0.0f;
+ test_vertex_data[10].x = -0.5f; test_vertex_data[10].y = 0.5f; test_vertex_data[10].z = 0.5f;
+ test_vertex_data[11].x = 0.0f; test_vertex_data[11].y = 1.0f; test_vertex_data[11].z = 0.0f;
+ test_vertex_data[12].x = 0.5f; test_vertex_data[12].y = 0.5f; test_vertex_data[12].z = 0.5f;
+ test_vertex_data[13].x = 0.0f; test_vertex_data[13].y = 1.0f; test_vertex_data[13].z = 0.0f;
+ test_vertex_data[14].x = 0.5f; test_vertex_data[14].y = 0.5f; test_vertex_data[14].z = -0.5f;
+ test_vertex_data[15].x = 0.0f; test_vertex_data[15].y = 1.0f; test_vertex_data[15].z = 0.0f;
+ test_vertex_data[16].x = 0.5f; test_vertex_data[16].y = 0.5f; test_vertex_data[16].z = -0.5f;
+ test_vertex_data[17].x = 1.0f; test_vertex_data[17].y = 0.0f; test_vertex_data[17].z = 0.0f;
+ test_vertex_data[18].x = 0.5f; test_vertex_data[18].y = 0.5f; test_vertex_data[18].z = 0.5f;
+ test_vertex_data[19].x = 1.0f; test_vertex_data[19].y = 0.0f; test_vertex_data[19].z = 0.0f;
+ test_vertex_data[20].x = 0.5f; test_vertex_data[20].y = -0.5f; test_vertex_data[20].z = 0.5f;
+ test_vertex_data[21].x = 1.0f; test_vertex_data[21].y = 0.0f; test_vertex_data[21].z = 0.0f;
+ test_vertex_data[22].x = 0.5f; test_vertex_data[22].y = -0.5f; test_vertex_data[22].z = -0.5f;
+ test_vertex_data[23].x = 1.0f; test_vertex_data[23].y = 0.0f; test_vertex_data[23].z = 0.0f;
+ test_vertex_data[24].x = -0.5f; test_vertex_data[24].y = -0.5f; test_vertex_data[24].z = 0.5f;
+ test_vertex_data[25].x = 0.0f; test_vertex_data[25].y = -1.0f; test_vertex_data[25].z = 0.0f;
+ test_vertex_data[26].x = -0.5f; test_vertex_data[26].y = -0.5f; test_vertex_data[26].z = -0.5f;
+ test_vertex_data[27].x = 0.0f; test_vertex_data[27].y = -1.0f; test_vertex_data[27].z = 0.0f;
+ test_vertex_data[28].x = 0.5f; test_vertex_data[28].y = -0.5f; test_vertex_data[28].z = -0.5f;
+ test_vertex_data[29].x = 0.0f; test_vertex_data[29].y = -1.0f; test_vertex_data[29].z = 0.0f;
+ test_vertex_data[30].x = 0.5f; test_vertex_data[30].y = -0.5f; test_vertex_data[30].z = 0.5f;
+ test_vertex_data[31].x = 0.0f; test_vertex_data[31].y = -1.0f; test_vertex_data[31].z = 0.0f;
+ test_vertex_data[32].x = -0.5f; test_vertex_data[32].y = -0.5f; test_vertex_data[32].z = 0.5f;
+ test_vertex_data[33].x = 0.0f; test_vertex_data[33].y = 0.0f; test_vertex_data[33].z = 1.0f;
+ test_vertex_data[34].x = 0.5f; test_vertex_data[34].y = -0.5f; test_vertex_data[34].z = 0.5f;
+ test_vertex_data[35].x = 0.0f; test_vertex_data[35].y = 0.0f; test_vertex_data[35].z = 1.0f;
+ test_vertex_data[36].x = 0.5f; test_vertex_data[36].y = 0.5f; test_vertex_data[36].z = 0.5f;
+ test_vertex_data[37].x = 0.0f; test_vertex_data[37].y = 0.0f; test_vertex_data[37].z = 1.0f;
+ test_vertex_data[38].x = -0.5f; test_vertex_data[38].y = 0.5f; test_vertex_data[38].z = 0.5f;
+ test_vertex_data[39].x = 0.0f; test_vertex_data[39].y = 0.0f; test_vertex_data[39].z = 1.0f;
+ test_vertex_data[40].x = -0.5f; test_vertex_data[40].y = -0.5f; test_vertex_data[40].z = -0.5f;
+ test_vertex_data[41].x = 0.0f; test_vertex_data[41].y = 0.0f; test_vertex_data[41].z = -1.0f;
+ test_vertex_data[42].x = -0.5f; test_vertex_data[42].y = 0.5f; test_vertex_data[42].z = -0.5f;
+ test_vertex_data[43].x = 0.0f; test_vertex_data[43].y = 0.0f; test_vertex_data[43].z = -1.0f;
+ test_vertex_data[44].x = 0.5f; test_vertex_data[44].y = 0.5f; test_vertex_data[44].z = -0.5f;
+ test_vertex_data[45].x = 0.0f; test_vertex_data[45].y = 0.0f; test_vertex_data[45].z = -1.0f;
+ test_vertex_data[46].x = 0.5f; test_vertex_data[46].y = -0.5f; test_vertex_data[46].z = -0.5f;
+ test_vertex_data[47].x = 0.0f; test_vertex_data[47].y = 0.0f; test_vertex_data[47].z = -1.0f;
+
+ /* number_of_vertices*2 as we have both (x,y,z) and normals (nx,ny,nz) */
+ for (i=0; i<number_of_vertices*2; i++)
+ {
+ todo_wine ok( compare_vec3(vertex_data[i],test_vertex_data[i]), "Expected: (%f, %f, %f), got: (%f, %f, %f)\n", test_vertex_data[i].x,test_vertex_data[i].y,test_vertex_data[i].z,vertex_data[i].x,vertex_data[i].y,vertex_data[i].z);
+ }
+ }
+
+ IDirect3DVertexBuffer9_Unlock(vertex_buffer);
+
+ IDirect3DVertexBuffer9_Release(vertex_buffer);
+ }
+
+ box->lpVtbl->Release(box);
+ }
+
+ IDirect3DDevice9_Release(device);
+ IDirect3D9_Release(d3d);
+ DestroyWindow(wnd);
+}
+
static void D3DXCreateSphereTest(void)
{
HRESULT hr;
@@ -678,6 +833,7 @@ START_TEST(mesh)
D3DXDeclaratorFromFVFTest();
D3DXGetFVFVertexSizeTest();
D3DXIntersectTriTest();
+ D3DXCreateBoxTest();
D3DXCreateSphereTest();
test_get_decl_vertex_size();
}
--
1.7.1
More information about the wine-patches
mailing list