d3drm: Implement partially IDirect3DRMMeshBuilderImpl_Load.
This commit is contained in:
parent
aaf2ef418e
commit
4296852b88
|
@ -4,7 +4,7 @@ SRCDIR = @srcdir@
|
|||
VPATH = @srcdir@
|
||||
MODULE = d3drm.dll
|
||||
IMPORTLIB = d3drm
|
||||
IMPORTS = dxguid uuid kernel32
|
||||
IMPORTS = dxguid uuid d3dxof kernel32
|
||||
|
||||
C_SRCS = \
|
||||
d3drm.c \
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
|
||||
#include "winbase.h"
|
||||
#include "wingdi.h"
|
||||
#include "dxfile.h"
|
||||
|
||||
#include "d3drm_private.h"
|
||||
#include "d3drm.h"
|
||||
|
@ -40,6 +41,229 @@ typedef struct {
|
|||
|
||||
static const struct IDirect3DRMMeshBuilderVtbl Direct3DRMMeshBuilder_Vtbl;
|
||||
|
||||
static const GUID GUID_Mesh = { 0x3D82AB44, 0x62DA, 0x11CF, { 0xAB, 0x39, 0x00, 0x20, 0xAF, 0x71, 0xE4, 0x33 } };
|
||||
|
||||
static char templates[] = {
|
||||
"xof 0302txt 0064"
|
||||
"template Header"
|
||||
"{"
|
||||
"<3D82AB43-62DA-11CF-AB39-0020AF71E433>"
|
||||
"WORD major;"
|
||||
"WORD minor;"
|
||||
"DWORD flags;"
|
||||
"}"
|
||||
"template Vector"
|
||||
"{"
|
||||
"<3D82AB5E-62DA-11CF-AB39-0020AF71E433>"
|
||||
"FLOAT x;"
|
||||
"FLOAT y;"
|
||||
"FLOAT z;"
|
||||
"}"
|
||||
"template Coords2d"
|
||||
"{"
|
||||
"<F6F23F44-7686-11CF-8F52-0040333594A3>"
|
||||
"FLOAT u;"
|
||||
"FLOAT v;"
|
||||
"}"
|
||||
"template Matrix4x4"
|
||||
"{"
|
||||
"<F6F23F45-7686-11CF-8F52-0040333594A3>"
|
||||
"array FLOAT matrix[16];"
|
||||
"}"
|
||||
"template ColorRGBA"
|
||||
"{"
|
||||
"<35FF44E0-6C7C-11CF-8F52-0040333594A3>"
|
||||
"FLOAT red;"
|
||||
"FLOAT green;"
|
||||
"FLOAT blue;"
|
||||
"FLOAT alpha;"
|
||||
"}"
|
||||
"template ColorRGB"
|
||||
"{"
|
||||
"<D3E16E81-7835-11CF-8F52-0040333594A3>"
|
||||
"FLOAT red;"
|
||||
"FLOAT green;"
|
||||
"FLOAT blue;"
|
||||
"}"
|
||||
"template IndexedColor"
|
||||
"{"
|
||||
"<1630B820-7842-11CF-8F52-0040333594A3>"
|
||||
"DWORD index;"
|
||||
"ColorRGBA indexColor;"
|
||||
"}"
|
||||
"template Boolean"
|
||||
"{"
|
||||
"<537DA6A0-CA37-11D0-941C-0080C80CFA7B>"
|
||||
"DWORD truefalse;"
|
||||
"}"
|
||||
"template Boolean2d"
|
||||
"{"
|
||||
"<4885AE63-78E8-11CF-8F52-0040333594A3>"
|
||||
"Boolean u;"
|
||||
"Boolean v;"
|
||||
"}"
|
||||
"template MaterialWrap"
|
||||
"{"
|
||||
"<4885AE60-78E8-11CF-8F52-0040333594A3>"
|
||||
"Boolean u;"
|
||||
"Boolean v;"
|
||||
"}"
|
||||
"template TextureFilename"
|
||||
"{"
|
||||
"<A42790E1-7810-11CF-8F52-0040333594A3>"
|
||||
"STRING filename;"
|
||||
"}"
|
||||
"template Material"
|
||||
"{"
|
||||
"<3D82AB4D-62DA-11CF-AB39-0020AF71E433>"
|
||||
"ColorRGBA faceColor;"
|
||||
"FLOAT power;"
|
||||
"ColorRGB specularColor;"
|
||||
"ColorRGB emissiveColor;"
|
||||
"[...]"
|
||||
"}"
|
||||
"template MeshFace"
|
||||
"{"
|
||||
"<3D82AB5F-62DA-11CF-AB39-0020AF71E433>"
|
||||
"DWORD nFaceVertexIndices;"
|
||||
"array DWORD faceVertexIndices[nFaceVertexIndices];"
|
||||
"}"
|
||||
"template MeshFaceWraps"
|
||||
"{"
|
||||
"<ED1EC5C0-C0A8-11D0-941C-0080C80CFA7B>"
|
||||
"DWORD nFaceWrapValues;"
|
||||
"array Boolean2d faceWrapValues[nFaceWrapValues];"
|
||||
"}"
|
||||
"template MeshTextureCoords"
|
||||
"{"
|
||||
"<F6F23F40-7686-11CF-8F52-0040333594A3>"
|
||||
"DWORD nTextureCoords;"
|
||||
"array Coords2d textureCoords[nTextureCoords];"
|
||||
"}"
|
||||
"template MeshMaterialList"
|
||||
"{"
|
||||
"<F6F23F42-7686-11CF-8F52-0040333594A3>"
|
||||
"DWORD nMaterials;"
|
||||
"DWORD nFaceIndexes;"
|
||||
"array DWORD faceIndexes[nFaceIndexes];"
|
||||
"[Material]"
|
||||
"}"
|
||||
"template MeshNormals"
|
||||
"{"
|
||||
"<F6F23F43-7686-11CF-8F52-0040333594A3>"
|
||||
"DWORD nNormals;"
|
||||
"array Vector normals[nNormals];"
|
||||
"DWORD nFaceNormals;"
|
||||
"array MeshFace faceNormals[nFaceNormals];"
|
||||
"}"
|
||||
"template MeshVertexColors"
|
||||
"{"
|
||||
"<1630B821-7842-11CF-8F52-0040333594A3>"
|
||||
"DWORD nVertexColors;"
|
||||
"array IndexedColor vertexColors[nVertexColors];"
|
||||
"}"
|
||||
"template Mesh"
|
||||
"{"
|
||||
"<3D82AB44-62DA-11CF-AB39-0020AF71E433>"
|
||||
"DWORD nVertices;"
|
||||
"array Vector vertices[nVertices];"
|
||||
"DWORD nFaces;"
|
||||
"array MeshFace faces[nFaces];"
|
||||
"[...]"
|
||||
"}"
|
||||
"template FrameTransformMatrix"
|
||||
"{"
|
||||
"<F6F23F41-7686-11CF-8F52-0040333594A3>"
|
||||
"Matrix4x4 frameMatrix;"
|
||||
"}"
|
||||
"template Frame"
|
||||
"{"
|
||||
"<3D82AB46-62DA-11CF-AB39-0020AF71E433>"
|
||||
"[...]"
|
||||
"}"
|
||||
"template FloatKeys"
|
||||
"{"
|
||||
"<10DD46A9-775B-11CF-8F52-0040333594A3>"
|
||||
"DWORD nValues;"
|
||||
"array FLOAT values[nValues];"
|
||||
"}"
|
||||
"template TimedFloatKeys"
|
||||
"{"
|
||||
"<F406B180-7B3B-11CF-8F52-0040333594A3>"
|
||||
"DWORD time;"
|
||||
"FloatKeys tfkeys;"
|
||||
"}"
|
||||
"template AnimationKey"
|
||||
"{"
|
||||
"<10DD46A8-775B-11CF-8F52-0040333594A3>"
|
||||
"DWORD keyType;"
|
||||
"DWORD nKeys;"
|
||||
"array TimedFloatKeys keys[nKeys];"
|
||||
"}"
|
||||
"template AnimationOptions"
|
||||
"{"
|
||||
"<E2BF56C0-840F-11CF-8F52-0040333594A3>"
|
||||
"DWORD openclosed;"
|
||||
"DWORD positionquality;"
|
||||
"}"
|
||||
"template Animation"
|
||||
"{"
|
||||
"<3D82AB4F-62DA-11CF-AB39-0020AF71E433>"
|
||||
"[...]"
|
||||
"}"
|
||||
"template AnimationSet"
|
||||
"{"
|
||||
"<3D82AB50-62DA-11CF-AB39-0020AF71E433>"
|
||||
"[Animation]"
|
||||
"}"
|
||||
"template InlineData"
|
||||
"{"
|
||||
"<3A23EEA0-94B1-11D0-AB39-0020AF71E433>"
|
||||
"[BINARY]"
|
||||
"}"
|
||||
"template Url"
|
||||
"{"
|
||||
"<3A23EEA1-94B1-11D0-AB39-0020AF71E433>"
|
||||
"DWORD nUrls;"
|
||||
"array STRING urls[nUrls];"
|
||||
"}"
|
||||
"template ProgressiveMesh"
|
||||
"{"
|
||||
"<8A63C360-997D-11D0-941C-0080C80CFA7B>"
|
||||
"[Url,InlineData]"
|
||||
"}"
|
||||
"template Guid"
|
||||
"{"
|
||||
"<A42790E0-7810-11CF-8F52-0040333594A3>"
|
||||
"DWORD data1;"
|
||||
"WORD data2;"
|
||||
"WORD data3;"
|
||||
"array UCHAR data4[8];"
|
||||
"}"
|
||||
"template StringProperty"
|
||||
"{"
|
||||
"<7F0F21E0-BFE1-11D1-82C0-00A0C9697271>"
|
||||
"STRING key;"
|
||||
"STRING value;"
|
||||
"}"
|
||||
"template PropertyBag"
|
||||
"{"
|
||||
"<7F0F21E1-BFE1-11D1-82C0-00A0C9697271>"
|
||||
"[StringProperty]"
|
||||
"}"
|
||||
"template ExternalVisual"
|
||||
"{"
|
||||
"<98116AA0-BDBA-11D1-82C0-00A0C9697271>"
|
||||
"Guid guidExternalVisual;"
|
||||
"[...]"
|
||||
"}"
|
||||
"template RightHanded"
|
||||
"{"
|
||||
"<7F5D5EA0-D53A-11D1-82C0-00A0C9697271>"
|
||||
"DWORD bRightHanded;"
|
||||
"}"
|
||||
};
|
||||
|
||||
HRESULT Direct3DRMMeshBuilder_create(LPDIRECT3DRMMESHBUILDER* ppMeshBuilder)
|
||||
{
|
||||
IDirect3DRMMeshBuilderImpl* object;
|
||||
|
@ -179,10 +403,69 @@ static HRESULT WINAPI IDirect3DRMMeshBuilderImpl_GetClassName(IDirect3DRMMeshBui
|
|||
static HRESULT WINAPI IDirect3DRMMeshBuilderImpl_Load(IDirect3DRMMeshBuilder* iface, LPVOID filename, LPVOID name, D3DRMLOADOPTIONS loadflags, D3DRMLOADTEXTURECALLBACK cb, LPVOID pArg)
|
||||
{
|
||||
IDirect3DRMMeshBuilderImpl *This = (IDirect3DRMMeshBuilderImpl *)iface;
|
||||
DXFILELOADOPTIONS load_options;
|
||||
LPDIRECTXFILE pDXFile = NULL;
|
||||
LPDIRECTXFILEENUMOBJECT pEnumObject = NULL;
|
||||
LPDIRECTXFILEDATA pData = NULL;
|
||||
const GUID* pGuid;
|
||||
HRESULT hr;
|
||||
HRESULT ret = D3DRMERR_BADOBJECT;
|
||||
|
||||
FIXME("(%p)->(%p,%p,%x,%p,%p): stub\n", This, filename, name, loadflags, cb, pArg);
|
||||
FIXME("(%p)->(%p,%p,%x,%p,%p): partial stub\n", This, filename, name, loadflags, cb, pArg);
|
||||
|
||||
return E_NOTIMPL;
|
||||
if (loadflags == D3DRMLOAD_FROMMEMORY)
|
||||
{
|
||||
DXFILELOADMEMORY info;
|
||||
LPD3DRMLOADMEMORY pinfo = (LPD3DRMLOADMEMORY)filename;
|
||||
info.lpMemory = pinfo->lpMemory;
|
||||
info.dSize = pinfo->dSize;
|
||||
load_options = DXFILELOAD_FROMMEMORY;
|
||||
}
|
||||
else
|
||||
{
|
||||
FIXME("Load options %d not supported yet\n", loadflags);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
hr = DirectXFileCreate(&pDXFile);
|
||||
if (hr != DXFILE_OK)
|
||||
goto end;
|
||||
|
||||
hr = IDirectXFile_RegisterTemplates(pDXFile, templates, sizeof(templates));
|
||||
if (hr != DXFILE_OK)
|
||||
goto end;
|
||||
|
||||
hr = IDirectXFile_CreateEnumObject(pDXFile, filename, load_options, &pEnumObject);
|
||||
if (hr != DXFILE_OK)
|
||||
goto end;
|
||||
|
||||
hr = IDirectXFileEnumObject_GetNextDataObject(pEnumObject, &pData);
|
||||
if (hr != DXFILE_OK)
|
||||
goto end;
|
||||
|
||||
hr = IDirectXFileData_GetType(pData, &pGuid);
|
||||
if (hr != DXFILE_OK)
|
||||
goto end;
|
||||
|
||||
TRACE("Found object type whose GUID = %s\n", debugstr_guid(pGuid));
|
||||
|
||||
if (!IsEqualGUID(pGuid, &GUID_Mesh))
|
||||
{
|
||||
ret = D3DRMERR_BADFILE;
|
||||
goto end;
|
||||
}
|
||||
|
||||
ret = D3DRM_OK;
|
||||
|
||||
end:
|
||||
if (pData)
|
||||
IDirectXFileData_Release(pData);
|
||||
if (pEnumObject)
|
||||
IDirectXFileEnumObject_Release(pEnumObject);
|
||||
if (pDXFile)
|
||||
IDirectXFile_Release(pDXFile);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IDirect3DRMMeshBuilderImpl_Save(IDirect3DRMMeshBuilder* iface, const char *filename, D3DRMXOFFORMAT format, D3DRMSAVEOPTIONS save)
|
||||
|
|
|
@ -78,12 +78,12 @@ void Test(void)
|
|||
info.lpMemory = data_bad;
|
||||
info.dSize = sizeof(data_bad);
|
||||
hr = IDirect3DRMMeshBuilder_Load(pMeshBuilder, &info, NULL, D3DRMLOAD_FROMMEMORY, NULL, NULL);
|
||||
todo_wine ok(hr == D3DRMERR_BADFILE, "Sould have returned D3DRMERR_BADFILE (hr = %x)\n", hr);
|
||||
ok(hr == D3DRMERR_BADFILE, "Sould have returned D3DRMERR_BADFILE (hr = %x)\n", hr);
|
||||
|
||||
info.lpMemory = data_ok;
|
||||
info.dSize = sizeof(data_ok);
|
||||
hr = IDirect3DRMMeshBuilder_Load(pMeshBuilder, &info, NULL, D3DRMLOAD_FROMMEMORY, NULL, NULL);
|
||||
todo_wine ok(hr == D3DRM_OK, "Cannot load mesh data (hr = %x)\n", hr);
|
||||
ok(hr == D3DRM_OK, "Cannot load mesh data (hr = %x)\n", hr);
|
||||
|
||||
IDirect3DRMMeshBuilder_Release(pMeshBuilder);
|
||||
|
||||
|
|
Loading…
Reference in New Issue