/* * 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; } static char data_bad_version[] = "xof 0302txt 0064\n" "Header Object\n" "{\n" "1; 2; 3;\n" "}\n"; static char data_no_mesh[] = "xof 0302txt 0064\n" "Header Object\n" "{\n" "1; 0; 1;\n" "}\n"; static 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, "Should 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, "Should 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); }