From: David Adam Subject: d3dx9_36 [,patch 1/3, try 3]: Add tests for D3DXCreateBox Message-Id: Date: Tue, 8 Mar 2011 08:14:35 +0100
From e2b92f363e24ef80c6a603d927e0ffe339264613 Mon Sep 17 00:00:00 2001 From: David Adam Date: Mon, 7 Mar 2011 21:17:16 +0100 Subject: Add tests for D3DXCreateBox --- dlls/d3dx9_36/tests/mesh.c | 85 ++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 78 insertions(+), 7 deletions(-) diff --git a/dlls/d3dx9_36/tests/mesh.c b/dlls/d3dx9_36/tests/mesh.c index f460c2d..dd1b15f 100644 --- a/dlls/d3dx9_36/tests/mesh.c +++ b/dlls/d3dx9_36/tests/mesh.c @@ -1357,7 +1357,22 @@ static void D3DXCreateBoxTest(void) D3DPRESENT_PARAMETERS d3dpp; ID3DXMesh* box; ID3DXBuffer* ppBuffer; - DWORD *buffer; + BYTE *data; + D3DXVECTOR3 normale, vertice; + static const FLOAT exp_vec[144]= + {-5.50f,-10.0f,-2.50f,5.50f,10.0f,2.50f,-5.50f,-10.0f,2.50f,5.50f,10.0f,-2.50f, + -5.50f,10.0f,2.50f,5.50f,10.0f,-2.50f,-5.50f,10.0f,-2.50f,5.50f,10.0f,2.50f, + -5.50f,10.0f,-2.50f,5.50f,-10.0f,2.50f,-5.50f,10.0f,2.50f,5.50f,-10.0f,-2.50f, + 5.50f,10.0f,2.50f,-5.50f,-10.0f,2.50f,5.50f,10.0f,-2.50f,-5.50f,-10.0f,-2.50f, + 5.50f,10.0f,-2.50f,5.50f,-10.0f,-2.50f,5.50f,10.0f,2.50f,5.50f,-10.0f,2.50f, + 5.50f,-10.0f,2.50f,-5.50f,-10.0f,2.50f,5.50f,-10.0f,-2.50f,5.50f,-10.0f,2.50f, + -5.50f,-10.0f,2.50f,5.50f,10.0f,2.50f,-5.50f,-10.0f,-2.50f,-5.50f,10.0f,2.50f, + 5.50f,-10.0f,-2.50f,-5.50f,-10.0f,-2.50f,5.50f,-10.0f,2.50f,-5.50f,10.0f,-2.50f, + -5.50f,-10.0f,2.50f,5.50f,10.0f,-2.50f,5.50f,-10.0f,2.50f,5.50f,-10.0f,-2.50f, + 5.50f,10.0f,2.50f,0.0f,0.0f,0.0f,-5.50f,10.0f,2.50f,0.0f,0.0f,0.0f, + -5.50f,-10.0f,-2.50f,0.0f,0.0f,0.0f,-5.50f,10.0f,-2.50f,0.0f,0.0f,0.0f, + 5.50f,10.0f,-2.50f,0.0f,0.0f,0.0f,5.50f,-10.0f,-2.50f,0.0f,0.0f,0.0f}; + DWORD *buffer, buffer_size, num_bytes_per_vertex, num_faces, num_vertices; static const DWORD adjacency[36]= {6, 9, 1, 2, 10, 0, 1, 9, 3, 4, 10, 2, @@ -1366,6 +1381,14 @@ static void D3DXCreateBoxTest(void) 7, 4, 9, 2, 0, 8, 1, 3, 11, 5, 6, 10}; unsigned int i; + WORD indice; + static const WORD exp_ind[36]= + {0, 1, 2, 2, 3, 0, + 4, 5, 6, 6, 7, 4, + 8, 9, 10, 10, 11, 8, + 12, 13, 14, 14, 15, 12, + 16, 17, 18, 18, 19, 16, + 20, 21, 22, 22, 23, 20}; wc.lpfnWndProc = DefWindowProcA; wc.lpszClassName = "d3dx9_test_wc"; @@ -1404,10 +1427,6 @@ static void D3DXCreateBoxTest(void) return; } - hr = D3DXCreateBuffer(36 * sizeof(DWORD), &ppBuffer); - ok(hr==D3D_OK, "Expected D3D_OK, received %#x\n", hr); - if (FAILED(hr)) goto end; - hr = D3DXCreateBox(device,2.0f,20.0f,4.9f,NULL, &ppBuffer); todo_wine ok(hr==D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, received %#x\n", hr); @@ -1423,7 +1442,17 @@ static void D3DXCreateBoxTest(void) hr = D3DXCreateBox(device,22.0f,20.0f,-4.9f,&box, &ppBuffer); todo_wine ok(hr==D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, received %#x\n", hr); - hr = D3DXCreateBox(device,10.9f,20.0f,4.9f,&box, &ppBuffer); +/* Test for the size of the adjacency buffer after the D3DXCreateBox call */ + hr = D3DXCreateBuffer(2 * sizeof(DWORD), &ppBuffer); + ok(hr==D3D_OK, "Expected D3D_OK, received %#x\n", hr); + if (SUCCEEDED(hr)) + { + buffer_size = ID3DXBuffer_GetBufferSize(ppBuffer); + ok(buffer_size == 2 * sizeof(DWORD), "Expected buffer size = %#x, received %#x\n", 2 * sizeof(DWORD), buffer_size); + } + else skip("Failed to create the adjacency buffer\n"); + + hr = D3DXCreateBox(device,11.0f,20.0f,5.0f,&box, &ppBuffer); todo_wine ok(hr==D3D_OK, "Expected D3D_OK, received %#x\n", hr); if (FAILED(hr)) @@ -1432,11 +1461,53 @@ static void D3DXCreateBoxTest(void) goto end; } + buffer_size = ID3DXBuffer_GetBufferSize(ppBuffer); + todo_wine ok(buffer_size == 36 * sizeof(DWORD), "Expected buffer size = %#x, received %#x\n", 36 * sizeof(DWORD), buffer_size); + + num_faces = box->lpVtbl->GetNumFaces(box); + todo_wine ok(num_faces == 12, "Expected 12 faces, received %d\n", num_faces); + + num_vertices = box->lpVtbl->GetNumVertices(box); + todo_wine ok(num_vertices == 24, "Expected 24 vertices, received %d\n", num_vertices); + + num_bytes_per_vertex = box->lpVtbl->GetNumBytesPerVertex(box); + ok(num_bytes_per_vertex == 6 * sizeof(FLOAT),"Expected num_bytes_per_vertex = 0x18, received %#x\n", num_bytes_per_vertex); + buffer = ID3DXBuffer_GetBufferPointer(ppBuffer); for(i=0; i<36; i++) todo_wine ok(adjacency[i]==buffer[i], "expected adjacency %d: %#x, received %#x\n",i,adjacency[i], buffer[i]); - box->lpVtbl->Release(box); + hr = box->lpVtbl->LockVertexBuffer(box, D3DLOCK_READONLY, (VOID **)&data); + if (SUCCEEDED(hr)) + { + for (i=0; i<24; i++) + { + vertice = *((D3DXVECTOR3*)(data + i * num_bytes_per_vertex)); + normale = *((D3DXVECTOR3*)(data + i * num_bytes_per_vertex) + sizeof(D3DXVECTOR3)); + todo_wine ok(compare(vertice.x,exp_vec[6 * i]), "Expected vertice.x %d = %f, received %f\n", i, exp_vec[6 * i], vertice.x); + todo_wine ok(compare(vertice.y,exp_vec[6 * i + 1]), "Expected vertice.y %d = %f, received %f\n", i, exp_vec[6 * i + 1], vertice.y); + todo_wine ok(compare(vertice.z,exp_vec[6 * i + 2]), "Expected vertice.z %d = %f, received %f\n", i, exp_vec[6 * i + 2], vertice.z); + todo_wine ok(compare(normale.x,exp_vec[6 * i + 3]), "Expected normale.x %d = %f, received %f\n", i, exp_vec[6 * i + 3], normale.x); + todo_wine ok(compare(normale.y,exp_vec[6 * i + 4]), "Expected normale.y %d = %f, received %f\n", i, exp_vec[6 * i + 4], normale.y); + todo_wine ok(compare(normale.z,exp_vec[6 * i + 5]), "Expected normale.z %d = %f, received %f\n", i, exp_vec[6 * i + 5], normale.z); + } + } + else skip("LockVertexBuffer failed\n"); + box->lpVtbl->UnlockVertexBuffer(box); + + hr = box->lpVtbl->LockIndexBuffer(box, D3DLOCK_READONLY, (VOID **)&data); + if(SUCCEEDED(hr)) + { + for(i=0; i<36; i++) + { + indice=*((WORD*)(data + i * sizeof(WORD))); + todo_wine ok(indice==exp_ind[i], "Expected index %d = %#x, received %#x\n",i, exp_ind[i], indice); + } + } + else skip("LockIndexBuffer failed\n"); + box->lpVtbl->UnlockIndexBuffer(box); + + box->lpVtbl->Release(box); end: IDirect3DDevice9_Release(device); -- 1.7.3.4