| /* |
| * Copyright 2010 Christian Costa |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
| */ |
| |
| #include "d3drm.h" |
| |
| #include "wine/test.h" |
| |
| static HMODULE d3drm_handle = 0; |
| |
| static HRESULT (WINAPI * pDirect3DRMCreate)(LPDIRECT3DRM* ppDirect3DRM); |
| |
| #define D3DRM_GET_PROC(func) \ |
| p ## func = (void*)GetProcAddress(d3drm_handle, #func); \ |
| if(!p ## func) { \ |
| trace("GetProcAddress(%s) failed\n", #func); \ |
| FreeLibrary(d3drm_handle); \ |
| return FALSE; \ |
| } |
| |
| static BOOL InitFunctionPtrs(void) |
| { |
| d3drm_handle = LoadLibraryA("d3drm.dll"); |
| |
| if(!d3drm_handle) |
| { |
| skip("Could not load d3drm.dll\n"); |
| return FALSE; |
| } |
| |
| D3DRM_GET_PROC(Direct3DRMCreate) |
| |
| return TRUE; |
| } |
| |
| char data_bad_version[] = |
| "xof 0302txt 0064\n" |
| "Header Object\n" |
| "{\n" |
| "1; 2; 3;\n" |
| "}\n"; |
| |
| char data_no_mesh[] = |
| "xof 0302txt 0064\n" |
| "Header Object\n" |
| "{\n" |
| "1; 0; 1;\n" |
| "}\n"; |
| |
| char data_ok[] = |
| "xof 0302txt 0064\n" |
| "Header Object\n" |
| "{\n" |
| "1; 0; 1;\n" |
| "}\n" |
| "Mesh Object\n" |
| "{\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) |
| { |
| HRESULT hr; |
| 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); |
| |
| hr = IDirect3DRM_CreateMeshBuilder(pD3DRM, &pMeshBuilder); |
| ok(hr == D3DRM_OK, "Cannot get IDirect3DRMMeshBuilder interface (hr = %x)\n", hr); |
| |
| info.lpMemory = data_bad_version; |
| info.dSize = strlen(data_bad_version); |
| hr = IDirect3DRMMeshBuilder_Load(pMeshBuilder, &info, NULL, D3DRMLOAD_FROMMEMORY, NULL, NULL); |
| ok(hr == D3DRMERR_BADFILE, "Sould have returned D3DRMERR_BADFILE (hr = %x)\n", hr); |
| |
| info.lpMemory = data_no_mesh; |
| info.dSize = strlen(data_no_mesh); |
| hr = IDirect3DRMMeshBuilder_Load(pMeshBuilder, &info, NULL, D3DRMLOAD_FROMMEMORY, NULL, NULL); |
| ok(hr == D3DRMERR_NOTFOUND, "Sould have returned D3DRMERR_NOTFOUND (hr = %x)\n", hr); |
| |
| info.lpMemory = data_ok; |
| info.dSize = strlen(data_ok); |
| 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); |
| } |
| |
| START_TEST(d3drm) |
| { |
| if (!InitFunctionPtrs()) |
| return; |
| |
| MeshBuilderTest(); |
| |
| FreeLibrary(d3drm_handle); |
| } |