ReactOS 0.4.17-dev-966-gf06eace
xfile.c File Reference
#include "d3dx9_private.h"
#include "d3dx9xof.h"
#include "dxfile.h"
Include dependency graph for xfile.c:

Go to the source code of this file.

Classes

struct  d3dx9_file
 
struct  d3dx9_file_enum_object
 
struct  d3dx9_file_data
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (d3dx)
 
static HRESULT error_dxfile_to_d3dxfile (HRESULT error)
 
static struct d3dx9_file * impl_from_ID3DXFile (ID3DXFile *iface)
 
static struct d3dx9_file_enum_object * impl_from_ID3DXFileEnumObject (ID3DXFileEnumObject *iface)
 
static struct d3dx9_file_data * impl_from_ID3DXFileData (ID3DXFileData *iface)
 
static HRESULT WINAPI d3dx9_file_data_QueryInterface (ID3DXFileData *iface, REFIID riid, void **out)
 
static ULONG WINAPI d3dx9_file_data_AddRef (ID3DXFileData *iface)
 
static ULONG WINAPI d3dx9_file_data_Release (ID3DXFileData *iface)
 
static HRESULT WINAPI d3dx9_file_data_GetEnum (ID3DXFileData *iface, ID3DXFileEnumObject **enum_object)
 
static HRESULT WINAPI d3dx9_file_data_GetName (ID3DXFileData *iface, char *name, SIZE_T *size)
 
static HRESULT WINAPI d3dx9_file_data_GetId (ID3DXFileData *iface, GUID *guid)
 
static HRESULT WINAPI d3dx9_file_data_Lock (ID3DXFileData *iface, SIZE_T *size, const void **data)
 
static HRESULT WINAPI d3dx9_file_data_Unlock (ID3DXFileData *iface)
 
static HRESULT WINAPI d3dx9_file_data_GetType (ID3DXFileData *iface, GUID *guid)
 
static BOOL WINAPI d3dx9_file_data_IsReference (ID3DXFileData *iface)
 
static HRESULT WINAPI d3dx9_file_data_GetChildren (ID3DXFileData *iface, SIZE_T *children)
 
static HRESULT WINAPI d3dx9_file_data_GetChild (ID3DXFileData *iface, SIZE_T id, ID3DXFileData **object)
 
static HRESULT d3dx9_file_data_create (IDirectXFileObject *dxfile_object, ID3DXFileData **ret_iface)
 
static HRESULT WINAPI d3dx9_file_enum_object_QueryInterface (ID3DXFileEnumObject *iface, REFIID riid, void **out)
 
static ULONG WINAPI d3dx9_file_enum_object_AddRef (ID3DXFileEnumObject *iface)
 
static ULONG WINAPI d3dx9_file_enum_object_Release (ID3DXFileEnumObject *iface)
 
static HRESULT WINAPI d3dx9_file_enum_object_GetFile (ID3DXFileEnumObject *iface, ID3DXFile **file)
 
static HRESULT WINAPI d3dx9_file_enum_object_GetChildren (ID3DXFileEnumObject *iface, SIZE_T *children)
 
static HRESULT WINAPI d3dx9_file_enum_object_GetChild (ID3DXFileEnumObject *iface, SIZE_T id, ID3DXFileData **object)
 
static HRESULT WINAPI d3dx9_file_enum_object_GetDataObjectById (ID3DXFileEnumObject *iface, REFGUID guid, ID3DXFileData **object)
 
static HRESULT WINAPI d3dx9_file_enum_object_GetDataObjectByName (ID3DXFileEnumObject *iface, const char *name, ID3DXFileData **object)
 
static HRESULT WINAPI d3dx9_file_QueryInterface (ID3DXFile *iface, REFIID riid, void **out)
 
static ULONG WINAPI d3dx9_file_AddRef (ID3DXFile *iface)
 
static ULONG WINAPI d3dx9_file_Release (ID3DXFile *iface)
 
static HRESULT WINAPI d3dx9_file_CreateEnumObject (ID3DXFile *iface, const void *source, D3DXF_FILELOADOPTIONS options, ID3DXFileEnumObject **enum_object)
 
static HRESULT WINAPI d3dx9_file_CreateSaveObject (ID3DXFile *iface, const void *data, D3DXF_FILESAVEOPTIONS options, D3DXF_FILEFORMAT format, ID3DXFileSaveObject **save_object)
 
static HRESULT WINAPI d3dx9_file_RegisterTemplates (ID3DXFile *iface, const void *data, SIZE_T size)
 
static HRESULT WINAPI d3dx9_file_RegisterEnumTemplates (ID3DXFile *iface, ID3DXFileEnumObject *enum_object)
 
HRESULT WINAPI D3DXFileCreate (ID3DXFile **d3dxfile)
 

Variables

static const ID3DXFileDataVtbl d3dx9_file_data_vtbl
 
static const ID3DXFileEnumObjectVtbl d3dx9_file_enum_object_vtbl
 
static const ID3DXFileVtbl d3dx9_file_vtbl
 

Function Documentation

◆ d3dx9_file_AddRef()

static ULONG WINAPI d3dx9_file_AddRef ( ID3DXFile *  iface)
static

Definition at line 513 of file xfile.c.

514{
515 struct d3dx9_file *file = impl_from_ID3DXFile(iface);
516 ULONG refcount = InterlockedIncrement(&file->ref);
517
518 TRACE("%p increasing refcount to %lu.\n", file, refcount);
519
520 return refcount;
521}
#define InterlockedIncrement
Definition: armddk.h:53
static struct d3dx9_file * impl_from_ID3DXFile(ID3DXFile *iface)
Definition: xfile.c:73
#define TRACE(s)
Definition: solgame.cpp:4
Definition: fci.c:123
LONG ref
Definition: filesystem.c:114
uint32_t ULONG
Definition: typedefs.h:59

◆ d3dx9_file_CreateEnumObject()

static HRESULT WINAPI d3dx9_file_CreateEnumObject ( ID3DXFile *  iface,
const void *  source,
D3DXF_FILELOADOPTIONS  options,
ID3DXFileEnumObject **  enum_object 
)
static

Definition at line 539 of file xfile.c.

541{
542 struct d3dx9_file *file = impl_from_ID3DXFile(iface);
544 IDirectXFileEnumObject *dxfile_enum_object;
545 void *dxfile_source;
546 DXFILELOADOPTIONS dxfile_options;
547 DXFILELOADRESOURCE dxfile_resource;
548 DXFILELOADMEMORY dxfile_memory;
549 IDirectXFileData *data_object;
550 unsigned children_array_size = 0;
551 HRESULT ret;
552
553 TRACE("iface %p, source %p, options %#lx, enum_object %p.\n", iface, source, options, enum_object);
554
555 if (!enum_object)
556 return E_POINTER;
557
558 *enum_object = NULL;
559
561 {
562 dxfile_source = (void*)source;
563 dxfile_options = DXFILELOAD_FROMFILE;
564 }
566 {
568
569 dxfile_resource.hModule = resource->hModule;
570 dxfile_resource.lpName = resource->lpName;
571 dxfile_resource.lpType = resource->lpType;
572 dxfile_source = &dxfile_resource;
573 dxfile_options = DXFILELOAD_FROMRESOURCE;
574 }
576 {
578
579 dxfile_memory.lpMemory = (void *)memory->lpMemory;
580 dxfile_memory.dSize = memory->dSize;
581 dxfile_source = &dxfile_memory;
582 dxfile_options = DXFILELOAD_FROMMEMORY;
583 }
584 else
585 {
586 FIXME("Source type %lu not handled yet.\n", options);
587 return E_NOTIMPL;
588 }
589
590 object = calloc(1, sizeof(*object));
591 if (!object)
592 return E_OUTOFMEMORY;
593
594 object->ID3DXFileEnumObject_iface.lpVtbl = &d3dx9_file_enum_object_vtbl;
595 object->ref = 1;
596
597 ret = IDirectXFile_CreateEnumObject(file->dxfile, dxfile_source, dxfile_options, &dxfile_enum_object);
598
599 if (ret != S_OK)
600 {
601 free(object);
602 return ret;
603 }
604
605 /* Fill enum object with top level data objects */
606 while (SUCCEEDED(ret = IDirectXFileEnumObject_GetNextDataObject(dxfile_enum_object, &data_object)))
607 {
608 if (object->child_count >= children_array_size)
609 {
610 ID3DXFileData **new_children;
611
612 children_array_size = object->children ? children_array_size * 2 : 4;
613 new_children = realloc(object->children, sizeof(*object->children) * children_array_size);
614 if (!new_children)
615 {
617 break;
618 }
619 object->children = new_children;
620 }
621 ret = d3dx9_file_data_create((IDirectXFileObject*)data_object,
622 &object->children[object->child_count]);
623 IUnknown_Release(data_object);
624 if (FAILED(ret))
625 break;
626 ++object->child_count;
627 }
628 if (object->children)
629 {
630 ID3DXFileData **new_children;
631
632 new_children = realloc(object->children, sizeof(*object->children) * object->child_count);
633 if (new_children)
634 object->children = new_children;
635 }
636
637 IDirectXFileEnumObject_Release(dxfile_enum_object);
638
640 WARN("Cannot get all top level data objects\n");
641
642 TRACE("Found %u children.\n", object->child_count);
643
644 *enum_object = &object->ID3DXFileEnumObject_iface;
645
646 return S_OK;
647}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_NOTIMPL
Definition: ddrawi.h:99
#define realloc
Definition: debug_ros.c:6
#define free
Definition: debug_ros.c:5
#define NULL
Definition: types.h:112
static const ID3DXFileEnumObjectVtbl d3dx9_file_enum_object_vtbl
Definition: xfile.c:483
static HRESULT d3dx9_file_data_create(IDirectXFileObject *dxfile_object, ID3DXFileData **ret_iface)
Definition: xfile.c:295
return ret
Definition: mutex.c:147
#define D3DXF_FILELOAD_FROMFILE
Definition: d3dx9xof.h:38
#define D3DXF_FILELOAD_FROMRESOURCE
Definition: d3dx9xof.h:40
#define D3DXF_FILELOAD_FROMMEMORY
Definition: d3dx9xof.h:41
DWORD DXFILELOADOPTIONS
Definition: dxfile.h:35
#define IDirectXFileEnumObject_GetNextDataObject(p, a)
Definition: dxfile.h:109
#define IDirectXFileEnumObject_Release(p)
Definition: dxfile.h:107
#define DXFILELOAD_FROMFILE
Definition: dxfile.h:37
#define IDirectXFile_CreateEnumObject(p, a, b, c)
Definition: dxfile.h:84
#define DXFILELOAD_FROMRESOURCE
Definition: dxfile.h:38
#define DXFILEERR_NOMOREOBJECTS
Definition: dxfile.h:291
#define DXFILELOAD_FROMMEMORY
Definition: dxfile.h:39
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
static char memory[1024 *256]
Definition: process.c:122
#define calloc
Definition: rosglue.h:14
LPVOID lpMemory
Definition: dxfile.h:50
HMODULE hModule
Definition: dxfile.h:44
#define E_POINTER
Definition: winerror.h:3480

◆ d3dx9_file_CreateSaveObject()

static HRESULT WINAPI d3dx9_file_CreateSaveObject ( ID3DXFile *  iface,
const void *  data,
D3DXF_FILESAVEOPTIONS  options,
D3DXF_FILEFORMAT  format,
ID3DXFileSaveObject **  save_object 
)
static

Definition at line 649 of file xfile.c.

651{
652 FIXME("iface %p, data %p, options %#lx, format %#lx, save_object %p stub!\n",
653 iface, data, options, format, save_object);
654
655 return E_NOTIMPL;
656}
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950

◆ d3dx9_file_data_AddRef()

static ULONG WINAPI d3dx9_file_data_AddRef ( ID3DXFileData *  iface)
static

Definition at line 106 of file xfile.c.

107{
108 struct d3dx9_file_data *file_data = impl_from_ID3DXFileData(iface);
109 ULONG refcount = InterlockedIncrement(&file_data->ref);
110
111 TRACE("%p increasing refcount to %lu.\n", file_data, refcount);
112
113 return refcount;
114}
static struct d3dx9_file_data * impl_from_ID3DXFileData(ID3DXFileData *iface)
Definition: xfile.c:83
LONG ref
Definition: xfile.c:66

◆ d3dx9_file_data_create()

static HRESULT d3dx9_file_data_create ( IDirectXFileObject *  dxfile_object,
ID3DXFileData **  ret_iface 
)
static

Definition at line 295 of file xfile.c.

296{
297 struct d3dx9_file_data *object;
298 IDirectXFileObject *data_object;
299 unsigned int children_array_size = 0;
300 HRESULT ret;
301
302 TRACE("dxfile_object %p, ret_iface %p.\n", dxfile_object, ret_iface);
303
304 *ret_iface = NULL;
305
306 object = calloc(1, sizeof(*object));
307 if (!object)
308 return E_OUTOFMEMORY;
309
310 object->ID3DXFileData_iface.lpVtbl = &d3dx9_file_data_vtbl;
311 object->ref = 1;
312
313 ret = IDirectXFileObject_QueryInterface(dxfile_object, &IID_IDirectXFileData, (void **)&object->dxfile_data);
314 if (FAILED(ret))
315 {
316 IDirectXFileDataReference *reference;
317
318 ret = IDirectXFileObject_QueryInterface(dxfile_object, &IID_IDirectXFileDataReference, (void **)&reference);
319 if (SUCCEEDED(ret))
320 {
322 IUnknown_Release(reference);
323 if (FAILED(ret))
324 {
325 free(object);
326 return E_FAIL;
327 }
328 object->reference = TRUE;
329 }
330 else
331 {
332 FIXME("Don't know what to do with binary object\n");
333 free(object);
334 return E_FAIL;
335 }
336 }
337
338 while (SUCCEEDED(ret = IDirectXFileData_GetNextObject(object->dxfile_data, &data_object)))
339 {
340 if (object->child_count >= children_array_size)
341 {
342 ID3DXFileData **new_children;
343
344 children_array_size = object->children ? children_array_size * 2 : 4;
345 new_children = realloc(object->children, sizeof(*object->children) * children_array_size);
346 if (!new_children)
347 {
349 break;
350 }
351 object->children = new_children;
352 }
353 ret = d3dx9_file_data_create(data_object, &object->children[object->child_count]);
354 IUnknown_Release(data_object);
355 if (FAILED(ret))
356 break;
357 ++object->child_count;
358 }
360 {
361 (&object->ID3DXFileData_iface)->lpVtbl->Release(&object->ID3DXFileData_iface);
362 return ret;
363 }
364 if (object->children)
365 {
366 ID3DXFileData **new_children;
367
368 new_children = realloc(object->children, sizeof(*object->children) * object->child_count);
369 if (new_children)
370 object->children = new_children;
371 }
372
373 TRACE("Found %u children.\n", object->child_count);
374
375 *ret_iface = &object->ID3DXFileData_iface;
376
377 return S_OK;
378}
#define E_FAIL
Definition: ddrawi.h:102
#define TRUE
Definition: types.h:120
static const ID3DXFileDataVtbl d3dx9_file_data_vtbl
Definition: xfile.c:279
#define IDirectXFileObject_QueryInterface(p, a, b)
Definition: dxfile.h:158
#define IDirectXFileDataReference_Resolve(p, a)
Definition: dxfile.h:217
#define IDirectXFileData_GetNextObject(p, a)
Definition: dxfile.h:192
GLint reference
Definition: glext.h:11729

Referenced by d3dx9_file_CreateEnumObject(), and d3dx9_file_data_create().

◆ d3dx9_file_data_GetChild()

static HRESULT WINAPI d3dx9_file_data_GetChild ( ID3DXFileData *  iface,
SIZE_T  id,
ID3DXFileData **  object 
)
static

Definition at line 264 of file xfile.c.

265{
266 struct d3dx9_file_data *file_data = impl_from_ID3DXFileData(iface);
267
268 TRACE("iface %p, id %#Ix, object %p.\n", iface, id, object);
269
270 if (!object)
271 return E_POINTER;
272
273 *object = file_data->children[id];
274 (*object)->lpVtbl->AddRef(*object);
275
276 return S_OK;
277}
GLuint id
Definition: glext.h:5910
ID3DXFileData ** children
Definition: xfile.c:70

◆ d3dx9_file_data_GetChildren()

static HRESULT WINAPI d3dx9_file_data_GetChildren ( ID3DXFileData *  iface,
SIZE_T *  children 
)
static

Definition at line 250 of file xfile.c.

251{
252 struct d3dx9_file_data *file_data = impl_from_ID3DXFileData(iface);
253
254 TRACE("iface %p, children %p.\n", iface, children);
255
256 if (!children)
257 return E_POINTER;
258
259 *children = file_data->child_count;
260
261 return S_OK;
262}
unsigned int child_count
Definition: xfile.c:69

◆ d3dx9_file_data_GetEnum()

static HRESULT WINAPI d3dx9_file_data_GetEnum ( ID3DXFileData *  iface,
ID3DXFileEnumObject **  enum_object 
)
static

Definition at line 140 of file xfile.c.

141{
142 FIXME("iface %p, enum_object %p stub!\n", iface, enum_object);
143
144 return E_NOTIMPL;
145}

◆ d3dx9_file_data_GetId()

static HRESULT WINAPI d3dx9_file_data_GetId ( ID3DXFileData *  iface,
GUID *  guid 
)
static

Definition at line 178 of file xfile.c.

179{
180 struct d3dx9_file_data *file_data = impl_from_ID3DXFileData(iface);
181 HRESULT ret;
182
183 TRACE("iface %p, guid %p.\n", iface, guid);
184
185 if (!guid)
186 return E_POINTER;
187
189 if (ret != DXFILE_OK)
191
192 return S_OK;
193}
static HRESULT error_dxfile_to_d3dxfile(HRESULT error)
Definition: xfile.c:28
GUID guid
Definition: version.c:147
#define IDirectXFileData_GetId(p, a)
Definition: dxfile.h:188
#define DXFILE_OK
Definition: dxfile.h:268
IDirectXFileData * dxfile_data
Definition: xfile.c:68

◆ d3dx9_file_data_GetName()

static HRESULT WINAPI d3dx9_file_data_GetName ( ID3DXFileData *  iface,
char *  name,
SIZE_T *  size 
)
static

Definition at line 147 of file xfile.c.

148{
149 struct d3dx9_file_data *file_data = impl_from_ID3DXFileData(iface);
150 DWORD dxfile_size;
151 HRESULT ret;
152
153 TRACE("iface %p, name %p, size %p.\n", iface, name, size);
154
155 if (!size)
156 return D3DXFERR_BADVALUE;
157
158 dxfile_size = *size;
159
160 ret = IDirectXFileData_GetName(file_data->dxfile_data, name, &dxfile_size);
161 if (ret != DXFILE_OK)
163
164 if (!dxfile_size)
165 {
166 /* Contrary to d3dxof, d3dx9_36 returns an empty string with a null byte when no name is available.
167 * If the input size is 0, it returns a length of 1 without touching the buffer */
168 dxfile_size = 1;
169 if (name && *size)
170 name[0] = 0;
171 }
172
173 *size = dxfile_size;
174
175 return S_OK;
176}
#define D3DXFERR_BADVALUE
Definition: d3dx9xof.h:164
#define IDirectXFileData_GetName(p, a, b)
Definition: dxfile.h:187
unsigned long DWORD
Definition: ntddk_ex.h:95
GLsizeiptr size
Definition: glext.h:5919
Definition: name.c:39

◆ d3dx9_file_data_GetType()

static HRESULT WINAPI d3dx9_file_data_GetType ( ID3DXFileData *  iface,
GUID *  guid 
)
static

Definition at line 224 of file xfile.c.

225{
226 struct d3dx9_file_data *file_data = impl_from_ID3DXFileData(iface);
227 const GUID *dxfile_guid;
228 HRESULT ret;
229
230 TRACE("iface %p, guid %p.\n", iface, guid);
231
232 ret = IDirectXFileData_GetType(file_data->dxfile_data, &dxfile_guid);
233 if (ret != DXFILE_OK)
235
236 *guid = *dxfile_guid;
237
238 return S_OK;
239}
#define IDirectXFileData_GetType(p, a)
Definition: dxfile.h:191

◆ d3dx9_file_data_IsReference()

static BOOL WINAPI d3dx9_file_data_IsReference ( ID3DXFileData *  iface)
static

Definition at line 241 of file xfile.c.

242{
243 struct d3dx9_file_data *file_data = impl_from_ID3DXFileData(iface);
244
245 TRACE("iface %p.\n", iface);
246
247 return file_data->reference;
248}
BOOL reference
Definition: xfile.c:67

◆ d3dx9_file_data_Lock()

static HRESULT WINAPI d3dx9_file_data_Lock ( ID3DXFileData *  iface,
SIZE_T *  size,
const void **  data 
)
static

Definition at line 195 of file xfile.c.

196{
197 struct d3dx9_file_data *file_data = impl_from_ID3DXFileData(iface);
198 DWORD dxfile_size;
199 HRESULT ret;
200
201 TRACE("iface %p, size %p, data %p.\n", iface, size, data);
202
203 if (!size || !data)
204 return E_POINTER;
205
206 ret = IDirectXFileData_GetData(file_data->dxfile_data, NULL, &dxfile_size, (void **)data);
207 if (ret != DXFILE_OK)
209
210 *size = dxfile_size;
211
212 return S_OK;
213}
#define IDirectXFileData_GetData(p, a, b, c)
Definition: dxfile.h:190

◆ d3dx9_file_data_QueryInterface()

static HRESULT WINAPI d3dx9_file_data_QueryInterface ( ID3DXFileData *  iface,
REFIID  riid,
void **  out 
)
static

Definition at line 88 of file xfile.c.

89{
90 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
91
92 if (IsEqualGUID(riid, &IID_ID3DXFileData)
94 {
95 iface->lpVtbl->AddRef(iface);
96 *out = iface;
97 return S_OK;
98 }
99
100 WARN("Interface %s not found.\n", debugstr_guid(riid));
101
102 *out = NULL;
103 return E_NOINTERFACE;
104}
const GUID IID_IUnknown
REFIID riid
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ d3dx9_file_data_Release()

static ULONG WINAPI d3dx9_file_data_Release ( ID3DXFileData *  iface)
static

Definition at line 116 of file xfile.c.

117{
118 struct d3dx9_file_data *file_data = impl_from_ID3DXFileData(iface);
119 ULONG refcount = InterlockedDecrement(&file_data->ref);
120
121 TRACE("%p decreasing refcount to %lu.\n", file_data, refcount);
122
123 if (!refcount)
124 {
125 ULONG i;
126
127 for (i = 0; i < file_data->child_count; ++i)
128 {
129 ID3DXFileData *child = file_data->children[i];
130 child->lpVtbl->Release(child);
131 }
132 free(file_data->children);
134 free(file_data);
135 }
136
137 return refcount;
138}
#define InterlockedDecrement
Definition: armddk.h:52
#define IDirectXFileData_Release(p)
Definition: dxfile.h:185
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
nsrefcnt Release()
static HWND child
Definition: cursoricon.c:298

◆ d3dx9_file_data_Unlock()

static HRESULT WINAPI d3dx9_file_data_Unlock ( ID3DXFileData *  iface)
static

Definition at line 215 of file xfile.c.

216{
217 TRACE("iface %p.\n", iface);
218
219 /* Nothing to do */
220
221 return S_OK;
222}

◆ d3dx9_file_enum_object_AddRef()

static ULONG WINAPI d3dx9_file_enum_object_AddRef ( ID3DXFileEnumObject *  iface)
static

Definition at line 398 of file xfile.c.

399{
400 struct d3dx9_file_enum_object *file_enum = impl_from_ID3DXFileEnumObject(iface);
401 ULONG refcount = InterlockedIncrement(&file_enum->ref);
402
403 TRACE("%p increasing refcount to %lu.\n", file_enum, refcount);
404
405 return refcount;
406}
static struct d3dx9_file_enum_object * impl_from_ID3DXFileEnumObject(ID3DXFileEnumObject *iface)
Definition: xfile.c:78

◆ d3dx9_file_enum_object_GetChild()

static HRESULT WINAPI d3dx9_file_enum_object_GetChild ( ID3DXFileEnumObject *  iface,
SIZE_T  id,
ID3DXFileData **  object 
)
static

Definition at line 452 of file xfile.c.

453{
454 struct d3dx9_file_enum_object *file_enum = impl_from_ID3DXFileEnumObject(iface);
455
456 TRACE("iface %p, id %#Ix, object %p.\n", iface, id, object);
457
458 if (!object)
459 return E_POINTER;
460
461 *object = file_enum->children[id];
462 (*object)->lpVtbl->AddRef(*object);
463
464 return S_OK;
465}
ID3DXFileData ** children
Definition: xfile.c:60

◆ d3dx9_file_enum_object_GetChildren()

static HRESULT WINAPI d3dx9_file_enum_object_GetChildren ( ID3DXFileEnumObject *  iface,
SIZE_T *  children 
)
static

Definition at line 438 of file xfile.c.

439{
440 struct d3dx9_file_enum_object *file_enum = impl_from_ID3DXFileEnumObject(iface);
441
442 TRACE("iface %p, children %p.\n", iface, children);
443
444 if (!children)
445 return E_POINTER;
446
447 *children = file_enum->child_count;
448
449 return S_OK;
450}
unsigned int child_count
Definition: xfile.c:59

◆ d3dx9_file_enum_object_GetDataObjectById()

static HRESULT WINAPI d3dx9_file_enum_object_GetDataObjectById ( ID3DXFileEnumObject *  iface,
REFGUID  guid,
ID3DXFileData **  object 
)
static

Definition at line 467 of file xfile.c.

469{
470 FIXME("iface %p, guid %s, object %p stub!\n", iface, debugstr_guid(guid), object);
471
472 return E_NOTIMPL;
473}

◆ d3dx9_file_enum_object_GetDataObjectByName()

static HRESULT WINAPI d3dx9_file_enum_object_GetDataObjectByName ( ID3DXFileEnumObject *  iface,
const char *  name,
ID3DXFileData **  object 
)
static

Definition at line 475 of file xfile.c.

477{
478 FIXME("iface %p, name %s, object %p stub!\n", iface, debugstr_a(name), object);
479
480 return E_NOTIMPL;
481}
#define debugstr_a
Definition: kernel32.h:31

◆ d3dx9_file_enum_object_GetFile()

static HRESULT WINAPI d3dx9_file_enum_object_GetFile ( ID3DXFileEnumObject *  iface,
ID3DXFile **  file 
)
static

Definition at line 431 of file xfile.c.

432{
433 FIXME("iface %p, file %p stub!\n", iface, file);
434
435 return E_NOTIMPL;
436}

◆ d3dx9_file_enum_object_QueryInterface()

static HRESULT WINAPI d3dx9_file_enum_object_QueryInterface ( ID3DXFileEnumObject *  iface,
REFIID  riid,
void **  out 
)
static

Definition at line 380 of file xfile.c.

381{
382 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
383
384 if (IsEqualGUID(riid, &IID_ID3DXFileEnumObject)
386 {
387 iface->lpVtbl->AddRef(iface);
388 *out = iface;
389 return S_OK;
390 }
391
392 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
393
394 *out = NULL;
395 return E_NOINTERFACE;
396}

◆ d3dx9_file_enum_object_Release()

static ULONG WINAPI d3dx9_file_enum_object_Release ( ID3DXFileEnumObject *  iface)
static

Definition at line 408 of file xfile.c.

409{
410 struct d3dx9_file_enum_object *file_enum = impl_from_ID3DXFileEnumObject(iface);
411 ULONG refcount = InterlockedDecrement(&file_enum->ref);
412
413 TRACE("%p decreasing refcount to %lu.\n", file_enum, refcount);
414
415 if (!refcount)
416 {
417 ULONG i;
418
419 for (i = 0; i < file_enum->child_count; ++i)
420 {
421 ID3DXFileData *child = file_enum->children[i];
422 child->lpVtbl->Release(child);
423 }
424 free(file_enum->children);
425 free(file_enum);
426 }
427
428 return refcount;
429}

◆ d3dx9_file_QueryInterface()

static HRESULT WINAPI d3dx9_file_QueryInterface ( ID3DXFile *  iface,
REFIID  riid,
void **  out 
)
static

Definition at line 495 of file xfile.c.

496{
497 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
498
499 if (IsEqualGUID(riid, &IID_ID3DXFile)
501 {
502 iface->lpVtbl->AddRef(iface);
503 *out = iface;
504 return S_OK;
505 }
506
507 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
508
509 *out = NULL;
510 return E_NOINTERFACE;
511}

◆ d3dx9_file_RegisterEnumTemplates()

static HRESULT WINAPI d3dx9_file_RegisterEnumTemplates ( ID3DXFile *  iface,
ID3DXFileEnumObject *  enum_object 
)
static

Definition at line 675 of file xfile.c.

676{
677 FIXME("iface %p, enum_object %p stub!\n", iface, enum_object);
678
679 return E_NOTIMPL;
680}

◆ d3dx9_file_RegisterTemplates()

static HRESULT WINAPI d3dx9_file_RegisterTemplates ( ID3DXFile *  iface,
const void *  data,
SIZE_T  size 
)
static

Definition at line 658 of file xfile.c.

659{
660 struct d3dx9_file *file = impl_from_ID3DXFile(iface);
661 HRESULT ret;
662
663 TRACE("iface %p, data %p, size %Iu.\n", iface, data, size);
664
665 ret = IDirectXFile_RegisterTemplates(file->dxfile, (void *)data, size);
666 if (ret != DXFILE_OK)
667 {
668 WARN("Error registering templates, hr %#lx.\n", ret);
670 }
671
672 return S_OK;
673}
#define IDirectXFile_RegisterTemplates(p, a, b)
Definition: dxfile.h:86

◆ d3dx9_file_Release()

static ULONG WINAPI d3dx9_file_Release ( ID3DXFile *  iface)
static

Definition at line 523 of file xfile.c.

524{
525 struct d3dx9_file *file = impl_from_ID3DXFile(iface);
526 ULONG refcount = InterlockedDecrement(&file->ref);
527
528 TRACE("%p decreasing refcount to %lu.\n", file, refcount);
529
530 if (!refcount)
531 {
532 IDirectXFile_Release(file->dxfile);
533 free(file);
534 }
535
536 return refcount;
537}
#define IDirectXFile_Release(p)
Definition: dxfile.h:82

◆ D3DXFileCreate()

HRESULT WINAPI D3DXFileCreate ( ID3DXFile **  d3dxfile)

Definition at line 693 of file xfile.c.

694{
695 struct d3dx9_file *object;
696 HRESULT ret;
697
698 TRACE("d3dxfile %p.\n", d3dxfile);
699
700 if (!d3dxfile)
701 return E_POINTER;
702
703 *d3dxfile = NULL;
704
705 object = calloc(1, sizeof(*object));
706 if (!object)
707 return E_OUTOFMEMORY;
708
709 ret = DirectXFileCreate(&object->dxfile);
710 if (ret != S_OK)
711 {
712 free(object);
713 if (ret == E_OUTOFMEMORY)
714 return ret;
715 return E_FAIL;
716 }
717
718 object->ID3DXFile_iface.lpVtbl = &d3dx9_file_vtbl;
719 object->ref = 1;
720
721 *d3dxfile = &object->ID3DXFile_iface;
722
723 return S_OK;
724}
static const ID3DXFileVtbl d3dx9_file_vtbl
Definition: xfile.c:682
HRESULT WINAPI DirectXFileCreate(LPDIRECTXFILE *lplpDirectXFile)
Definition: main.c:121

Referenced by D3DXLoadMeshFromXInMemory(), D3DXLoadMeshHierarchyFromXInMemory(), get_mesh_data(), test_getname(), test_lock_unlock(), test_templates(), and test_type_index_color().

◆ error_dxfile_to_d3dxfile()

static HRESULT error_dxfile_to_d3dxfile ( HRESULT  error)
static

Definition at line 28 of file xfile.c.

29{
30 switch (error)
31 {
41 return D3DXFERR_BADVALUE;
42 default:
43 FIXME("Cannot map error %#lx.\n", error);
44 return E_FAIL;
45 }
46}
#define D3DXFERR_BADFILEVERSION
Definition: d3dx9xof.h:172
#define D3DXFERR_BADFILEFLOATSIZE
Definition: d3dx9xof.h:173
#define D3DXFERR_PARSEERROR
Definition: d3dx9xof.h:175
#define D3DXFERR_BADFILETYPE
Definition: d3dx9xof.h:171
#define DXFILEERR_BADFILEVERSION
Definition: dxfile.h:282
#define DXFILEERR_BADFILEFLOATSIZE
Definition: dxfile.h:283
#define DXFILEERR_BADFILETYPE
Definition: dxfile.h:281
#define DXFILEERR_PARSEERROR
Definition: dxfile.h:286
#define DXFILEERR_BADVALUE
Definition: dxfile.h:271
#define error(str)
Definition: mkdosfs.c:1605

Referenced by d3dx9_file_data_GetId(), d3dx9_file_data_GetName(), d3dx9_file_data_GetType(), d3dx9_file_data_Lock(), and d3dx9_file_RegisterTemplates().

◆ impl_from_ID3DXFile()

static struct d3dx9_file * impl_from_ID3DXFile ( ID3DXFile *  iface)
inlinestatic

Definition at line 73 of file xfile.c.

74{
75 return CONTAINING_RECORD(iface, struct d3dx9_file, ID3DXFile_iface);
76}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by d3dx9_file_AddRef(), d3dx9_file_CreateEnumObject(), d3dx9_file_RegisterTemplates(), and d3dx9_file_Release().

◆ impl_from_ID3DXFileData()

static struct d3dx9_file_data * impl_from_ID3DXFileData ( ID3DXFileData *  iface)
inlinestatic

◆ impl_from_ID3DXFileEnumObject()

static struct d3dx9_file_enum_object * impl_from_ID3DXFileEnumObject ( ID3DXFileEnumObject *  iface)
inlinestatic

Definition at line 78 of file xfile.c.

79{
80 return CONTAINING_RECORD(iface, struct d3dx9_file_enum_object, ID3DXFileEnumObject_iface);
81}

Referenced by d3dx9_file_enum_object_AddRef(), d3dx9_file_enum_object_GetChild(), d3dx9_file_enum_object_GetChildren(), and d3dx9_file_enum_object_Release().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( d3dx  )

Variable Documentation

◆ d3dx9_file_data_vtbl

const ID3DXFileDataVtbl d3dx9_file_data_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI d3dx9_file_data_GetEnum(ID3DXFileData *iface, ID3DXFileEnumObject **enum_object)
Definition: xfile.c:140
static HRESULT WINAPI d3dx9_file_data_GetChild(ID3DXFileData *iface, SIZE_T id, ID3DXFileData **object)
Definition: xfile.c:264
static HRESULT WINAPI d3dx9_file_data_Lock(ID3DXFileData *iface, SIZE_T *size, const void **data)
Definition: xfile.c:195
static HRESULT WINAPI d3dx9_file_data_GetType(ID3DXFileData *iface, GUID *guid)
Definition: xfile.c:224
static HRESULT WINAPI d3dx9_file_data_Unlock(ID3DXFileData *iface)
Definition: xfile.c:215
static ULONG WINAPI d3dx9_file_data_AddRef(ID3DXFileData *iface)
Definition: xfile.c:106
static HRESULT WINAPI d3dx9_file_data_GetId(ID3DXFileData *iface, GUID *guid)
Definition: xfile.c:178
static HRESULT WINAPI d3dx9_file_data_GetChildren(ID3DXFileData *iface, SIZE_T *children)
Definition: xfile.c:250
static HRESULT WINAPI d3dx9_file_data_QueryInterface(ID3DXFileData *iface, REFIID riid, void **out)
Definition: xfile.c:88
static ULONG WINAPI d3dx9_file_data_Release(ID3DXFileData *iface)
Definition: xfile.c:116
static HRESULT WINAPI d3dx9_file_data_GetName(ID3DXFileData *iface, char *name, SIZE_T *size)
Definition: xfile.c:147
static BOOL WINAPI d3dx9_file_data_IsReference(ID3DXFileData *iface)
Definition: xfile.c:241

Definition at line 279 of file xfile.c.

Referenced by d3dx9_file_data_create().

◆ d3dx9_file_enum_object_vtbl

const ID3DXFileEnumObjectVtbl d3dx9_file_enum_object_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI d3dx9_file_enum_object_GetDataObjectByName(ID3DXFileEnumObject *iface, const char *name, ID3DXFileData **object)
Definition: xfile.c:475
static HRESULT WINAPI d3dx9_file_enum_object_GetChildren(ID3DXFileEnumObject *iface, SIZE_T *children)
Definition: xfile.c:438
static HRESULT WINAPI d3dx9_file_enum_object_GetChild(ID3DXFileEnumObject *iface, SIZE_T id, ID3DXFileData **object)
Definition: xfile.c:452
static HRESULT WINAPI d3dx9_file_enum_object_QueryInterface(ID3DXFileEnumObject *iface, REFIID riid, void **out)
Definition: xfile.c:380
static ULONG WINAPI d3dx9_file_enum_object_Release(ID3DXFileEnumObject *iface)
Definition: xfile.c:408
static ULONG WINAPI d3dx9_file_enum_object_AddRef(ID3DXFileEnumObject *iface)
Definition: xfile.c:398
static HRESULT WINAPI d3dx9_file_enum_object_GetFile(ID3DXFileEnumObject *iface, ID3DXFile **file)
Definition: xfile.c:431
static HRESULT WINAPI d3dx9_file_enum_object_GetDataObjectById(ID3DXFileEnumObject *iface, REFGUID guid, ID3DXFileData **object)
Definition: xfile.c:467

Definition at line 483 of file xfile.c.

Referenced by d3dx9_file_CreateEnumObject().

◆ d3dx9_file_vtbl

const ID3DXFileVtbl d3dx9_file_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI d3dx9_file_CreateEnumObject(ID3DXFile *iface, const void *source, D3DXF_FILELOADOPTIONS options, ID3DXFileEnumObject **enum_object)
Definition: xfile.c:539
static HRESULT WINAPI d3dx9_file_CreateSaveObject(ID3DXFile *iface, const void *data, D3DXF_FILESAVEOPTIONS options, D3DXF_FILEFORMAT format, ID3DXFileSaveObject **save_object)
Definition: xfile.c:649
static HRESULT WINAPI d3dx9_file_RegisterTemplates(ID3DXFile *iface, const void *data, SIZE_T size)
Definition: xfile.c:658
static HRESULT WINAPI d3dx9_file_QueryInterface(ID3DXFile *iface, REFIID riid, void **out)
Definition: xfile.c:495
static HRESULT WINAPI d3dx9_file_RegisterEnumTemplates(ID3DXFile *iface, ID3DXFileEnumObject *enum_object)
Definition: xfile.c:675
static ULONG WINAPI d3dx9_file_Release(ID3DXFile *iface)
Definition: xfile.c:523
static ULONG WINAPI d3dx9_file_AddRef(ID3DXFile *iface)
Definition: xfile.c:513

Definition at line 682 of file xfile.c.

Referenced by D3DXFileCreate().