[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