d3dx9_36: Implement ID3DXFileImpl_RegisterTemplates + tests.
This commit is contained in:
parent
732376d5b9
commit
b742b98c55
|
@ -20,16 +20,67 @@
|
|||
#include "d3dx9.h"
|
||||
#include "d3dx9xof.h"
|
||||
|
||||
START_TEST(xfile)
|
||||
char templates_bad_file_type1[] =
|
||||
"xOf 0302txt 0064\n";
|
||||
|
||||
char templates_bad_file_version[] =
|
||||
"xof 0102txt 0064\n";
|
||||
|
||||
char templates_bad_file_type2[] =
|
||||
"xof 0302foo 0064\n";
|
||||
|
||||
char templates_bad_file_float_size[] =
|
||||
"xof 0302txt 0050\n";
|
||||
|
||||
char templates_parse_error[] =
|
||||
"xof 0302txt 0064"
|
||||
"foobar;\n";
|
||||
|
||||
char templates[] =
|
||||
"xof 0302txt 0064"
|
||||
"template Header"
|
||||
"{"
|
||||
"<3D82AB43-62DA-11CF-AB39-0020AF71E433>"
|
||||
"WORD major;"
|
||||
"WORD minor;"
|
||||
"DWORD flags;"
|
||||
"}\n";
|
||||
|
||||
|
||||
void test_templates(void)
|
||||
{
|
||||
ID3DXFile *file;
|
||||
ID3DXFile *d3dxfile;
|
||||
HRESULT ret;
|
||||
|
||||
ret = D3DXFileCreate(NULL);
|
||||
ok(ret == E_POINTER, "D3DXCreateFile returned %#x, expected %#x\n", ret, E_POINTER);
|
||||
|
||||
ret = D3DXFileCreate(&file);
|
||||
ret = D3DXFileCreate(&d3dxfile);
|
||||
ok(ret == S_OK, "D3DXCreateFile failed with %#x\n", ret);
|
||||
|
||||
file->lpVtbl->Release(file);
|
||||
ret = d3dxfile->lpVtbl->RegisterTemplates(d3dxfile, (const void *)templates_bad_file_type1, (SIZE_T)(sizeof(templates_bad_file_type1) - 1));
|
||||
ok(ret == D3DXFERR_BADFILETYPE, "RegisterTemplates returned %#x, expected %#x\n", ret, D3DXFERR_BADFILETYPE);
|
||||
|
||||
ret = d3dxfile->lpVtbl->RegisterTemplates(d3dxfile, (const void *)templates_bad_file_version, (SIZE_T)(sizeof(templates_bad_file_version) - 1));
|
||||
ok(ret == D3DXFERR_BADFILEVERSION, "RegisterTemplates returned %#x, expected %#x\n", ret, D3DXFERR_BADFILEVERSION);
|
||||
|
||||
ret = d3dxfile->lpVtbl->RegisterTemplates(d3dxfile, (const void *)templates_bad_file_type2, (SIZE_T)(sizeof(templates_bad_file_type2) - 1));
|
||||
ok(ret == D3DXFERR_BADFILETYPE, "RegisterTemplates returned %#x, expected %#x\n", ret, D3DXFERR_BADFILETYPE);
|
||||
|
||||
ret = d3dxfile->lpVtbl->RegisterTemplates(d3dxfile, (const void *)templates_bad_file_float_size, (SIZE_T)(sizeof(templates_bad_file_float_size) - 1));
|
||||
ok(ret == D3DXFERR_BADFILEFLOATSIZE, "RegisterTemplates returned %#x, expected %#x\n", ret, D3DXFERR_BADFILEFLOATSIZE);
|
||||
|
||||
ret = d3dxfile->lpVtbl->RegisterTemplates(d3dxfile, (const void *)templates_parse_error, (SIZE_T)(sizeof(templates_parse_error) - 1));
|
||||
todo_wine ok(ret == D3DXFERR_PARSEERROR, "RegisterTemplates returned %#x, expected %#x\n", ret, D3DXFERR_PARSEERROR);
|
||||
|
||||
ret = d3dxfile->lpVtbl->RegisterTemplates(d3dxfile, (const void *)templates, (SIZE_T)(sizeof(templates) - 1));
|
||||
ok(ret == S_OK, "RegisterTemplates with %#x\n", ret);
|
||||
|
||||
d3dxfile->lpVtbl->Release(d3dxfile);
|
||||
}
|
||||
|
||||
|
||||
START_TEST(xfile)
|
||||
{
|
||||
test_templates();
|
||||
}
|
||||
|
|
|
@ -21,12 +21,33 @@
|
|||
|
||||
#include "d3dx9.h"
|
||||
#include "d3dx9xof.h"
|
||||
#undef MAKE_DDHRESULT
|
||||
#include "dxfile.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(d3dx);
|
||||
|
||||
HRESULT error_dxfile_to_d3dxfile(HRESULT error)
|
||||
{
|
||||
switch (error)
|
||||
{
|
||||
case DXFILEERR_BADFILETYPE:
|
||||
return D3DXFERR_BADFILETYPE;
|
||||
case DXFILEERR_BADFILEVERSION:
|
||||
return D3DXFERR_BADFILEVERSION;
|
||||
case DXFILEERR_BADFILEFLOATSIZE:
|
||||
return D3DXFERR_BADFILEFLOATSIZE;
|
||||
case DXFILEERR_PARSEERROR:
|
||||
return D3DXFERR_PARSEERROR;
|
||||
default:
|
||||
FIXME("Cannot map error %#x\n", error);
|
||||
return E_FAIL;
|
||||
}
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
ID3DXFile ID3DXFile_iface;
|
||||
LONG ref;
|
||||
IDirectXFile *dxfile;
|
||||
} ID3DXFileImpl;
|
||||
|
||||
|
||||
|
@ -75,7 +96,10 @@ static ULONG WINAPI ID3DXFileImpl_Release(ID3DXFile *iface)
|
|||
TRACE("(%p)->(): new ref %d\n", iface, ref);
|
||||
|
||||
if (!ref)
|
||||
{
|
||||
IDirectXFile_Release(This->dxfile);
|
||||
HeapFree(GetProcessHeap(), 0, This);
|
||||
}
|
||||
|
||||
return ref;
|
||||
}
|
||||
|
@ -101,9 +125,19 @@ static HRESULT WINAPI ID3DXFileImpl_CreateSaveObject(ID3DXFile *iface, const voi
|
|||
|
||||
static HRESULT WINAPI ID3DXFileImpl_RegisterTemplates(ID3DXFile *iface, const void *data, SIZE_T size)
|
||||
{
|
||||
FIXME("(%p)->(%p, %lu): stub\n", iface, data, size);
|
||||
ID3DXFileImpl *This = impl_from_ID3DXFile(iface);
|
||||
HRESULT ret;
|
||||
|
||||
return E_NOTIMPL;
|
||||
TRACE("(%p)->(%p, %lu)\n", iface, data, size);
|
||||
|
||||
ret = IDirectXFile_RegisterTemplates(This->dxfile, (void*)data, size);
|
||||
if (ret != DXFILE_OK)
|
||||
{
|
||||
WARN("Error %#x\n", ret);
|
||||
return error_dxfile_to_d3dxfile(ret);
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
|
@ -129,6 +163,7 @@ static const ID3DXFileVtbl ID3DXFile_Vtbl =
|
|||
HRESULT WINAPI D3DXFileCreate(ID3DXFile **d3dxfile)
|
||||
{
|
||||
ID3DXFileImpl *object;
|
||||
HRESULT ret;
|
||||
|
||||
TRACE("(%p)\n", d3dxfile);
|
||||
|
||||
|
@ -141,6 +176,15 @@ HRESULT WINAPI D3DXFileCreate(ID3DXFile **d3dxfile)
|
|||
if (!object)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
ret = DirectXFileCreate(&object->dxfile);
|
||||
if (ret != S_OK)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, object);
|
||||
if (ret == E_OUTOFMEMORY)
|
||||
return ret;
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
object->ID3DXFile_iface.lpVtbl = &ID3DXFile_Vtbl;
|
||||
object->ref = 1;
|
||||
|
||||
|
|
Loading…
Reference in New Issue