ReactOS 0.4.17-dev-966-gf06eace
xfile.c
Go to the documentation of this file.
1/*
2 * Copyright (C) 2012 Christian Costa
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 *
18 */
19
20
21#include "d3dx9_private.h"
22#include "d3dx9xof.h"
23#undef MAKE_DDHRESULT
24#include "dxfile.h"
25
27
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}
47
49{
50 ID3DXFile ID3DXFile_iface;
52 IDirectXFile *dxfile;
53};
54
56{
57 ID3DXFileEnumObject ID3DXFileEnumObject_iface;
59 unsigned int child_count;
60 ID3DXFileData **children;
61};
62
64{
65 ID3DXFileData ID3DXFileData_iface;
68 IDirectXFileData *dxfile_data;
69 unsigned int child_count;
70 ID3DXFileData **children;
71};
72
73static inline struct d3dx9_file *impl_from_ID3DXFile(ID3DXFile *iface)
74{
75 return CONTAINING_RECORD(iface, struct d3dx9_file, ID3DXFile_iface);
76}
77
78static inline struct d3dx9_file_enum_object *impl_from_ID3DXFileEnumObject(ID3DXFileEnumObject *iface)
79{
81}
82
83static inline struct d3dx9_file_data *impl_from_ID3DXFileData(ID3DXFileData *iface)
84{
86}
87
88static HRESULT WINAPI d3dx9_file_data_QueryInterface(ID3DXFileData *iface, REFIID riid, void **out)
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}
105
106static ULONG WINAPI d3dx9_file_data_AddRef(ID3DXFileData *iface)
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}
115
116static ULONG WINAPI d3dx9_file_data_Release(ID3DXFileData *iface)
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}
139
140static HRESULT WINAPI d3dx9_file_data_GetEnum(ID3DXFileData *iface, ID3DXFileEnumObject **enum_object)
141{
142 FIXME("iface %p, enum_object %p stub!\n", iface, enum_object);
143
144 return E_NOTIMPL;
145}
146
147static HRESULT WINAPI d3dx9_file_data_GetName(ID3DXFileData *iface, char *name, SIZE_T *size)
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}
177
178static HRESULT WINAPI d3dx9_file_data_GetId(ID3DXFileData *iface, GUID *guid)
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}
194
195static HRESULT WINAPI d3dx9_file_data_Lock(ID3DXFileData *iface, SIZE_T *size, const void **data)
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}
214
215static HRESULT WINAPI d3dx9_file_data_Unlock(ID3DXFileData *iface)
216{
217 TRACE("iface %p.\n", iface);
218
219 /* Nothing to do */
220
221 return S_OK;
222}
223
224static HRESULT WINAPI d3dx9_file_data_GetType(ID3DXFileData *iface, GUID *guid)
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}
240
241static BOOL WINAPI d3dx9_file_data_IsReference(ID3DXFileData *iface)
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}
249
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}
263
264static HRESULT WINAPI d3dx9_file_data_GetChild(ID3DXFileData *iface, SIZE_T id, ID3DXFileData **object)
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}
278
279static const ID3DXFileDataVtbl d3dx9_file_data_vtbl =
280{
293};
294
295static HRESULT d3dx9_file_data_create(IDirectXFileObject *dxfile_object, ID3DXFileData **ret_iface)
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}
379
380static HRESULT WINAPI d3dx9_file_enum_object_QueryInterface(ID3DXFileEnumObject *iface, REFIID riid, void **out)
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}
397
398static ULONG WINAPI d3dx9_file_enum_object_AddRef(ID3DXFileEnumObject *iface)
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}
407
408static ULONG WINAPI d3dx9_file_enum_object_Release(ID3DXFileEnumObject *iface)
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}
430
431static HRESULT WINAPI d3dx9_file_enum_object_GetFile(ID3DXFileEnumObject *iface, ID3DXFile **file)
432{
433 FIXME("iface %p, file %p stub!\n", iface, file);
434
435 return E_NOTIMPL;
436}
437
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}
451
452static HRESULT WINAPI d3dx9_file_enum_object_GetChild(ID3DXFileEnumObject *iface, SIZE_T id, ID3DXFileData **object)
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}
466
468 REFGUID guid, ID3DXFileData **object)
469{
470 FIXME("iface %p, guid %s, object %p stub!\n", iface, debugstr_guid(guid), object);
471
472 return E_NOTIMPL;
473}
474
476 const char *name, ID3DXFileData **object)
477{
478 FIXME("iface %p, name %s, object %p stub!\n", iface, debugstr_a(name), object);
479
480 return E_NOTIMPL;
481}
482
483static const ID3DXFileEnumObjectVtbl d3dx9_file_enum_object_vtbl =
484{
493};
494
495static HRESULT WINAPI d3dx9_file_QueryInterface(ID3DXFile *iface, REFIID riid, void **out)
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}
512
513static ULONG WINAPI d3dx9_file_AddRef(ID3DXFile *iface)
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}
522
523static ULONG WINAPI d3dx9_file_Release(ID3DXFile *iface)
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}
538
539static HRESULT WINAPI d3dx9_file_CreateEnumObject(ID3DXFile *iface, const void *source,
540 D3DXF_FILELOADOPTIONS options, ID3DXFileEnumObject **enum_object)
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}
648
649static HRESULT WINAPI d3dx9_file_CreateSaveObject(ID3DXFile *iface, const void *data,
650 D3DXF_FILESAVEOPTIONS options, D3DXF_FILEFORMAT format, ID3DXFileSaveObject **save_object)
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}
657
658static HRESULT WINAPI d3dx9_file_RegisterTemplates(ID3DXFile *iface, const void *data, SIZE_T size)
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}
674
675static HRESULT WINAPI d3dx9_file_RegisterEnumTemplates(ID3DXFile *iface, ID3DXFileEnumObject *enum_object)
676{
677 FIXME("iface %p, enum_object %p stub!\n", iface, enum_object);
678
679 return E_NOTIMPL;
680}
681
682static const ID3DXFileVtbl d3dx9_file_vtbl =
683{
691};
692
693HRESULT WINAPI D3DXFileCreate(ID3DXFile **d3dxfile)
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}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define realloc
Definition: debug_ros.c:6
#define free
Definition: debug_ros.c:5
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
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_enum_object_GetDataObjectByName(ID3DXFileEnumObject *iface, const char *name, ID3DXFileData **object)
Definition: xfile.c:475
static struct d3dx9_file_enum_object * impl_from_ID3DXFileEnumObject(ID3DXFileEnumObject *iface)
Definition: xfile.c:78
static HRESULT WINAPI d3dx9_file_data_Lock(ID3DXFileData *iface, SIZE_T *size, const void **data)
Definition: xfile.c:195
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_data_GetType(ID3DXFileData *iface, GUID *guid)
Definition: xfile.c:224
static HRESULT WINAPI d3dx9_file_data_Unlock(ID3DXFileData *iface)
Definition: xfile.c:215
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_enum_object_GetChildren(ID3DXFileEnumObject *iface, SIZE_T *children)
Definition: xfile.c:438
static HRESULT WINAPI d3dx9_file_QueryInterface(ID3DXFile *iface, REFIID riid, void **out)
Definition: xfile.c:495
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_RegisterEnumTemplates(ID3DXFile *iface, ID3DXFileEnumObject *enum_object)
Definition: xfile.c:675
static struct d3dx9_file_data * impl_from_ID3DXFileData(ID3DXFileData *iface)
Definition: xfile.c:83
static HRESULT WINAPI d3dx9_file_data_GetChildren(ID3DXFileData *iface, SIZE_T *children)
Definition: xfile.c:250
static ULONG WINAPI d3dx9_file_Release(ID3DXFile *iface)
Definition: xfile.c:523
static HRESULT WINAPI d3dx9_file_enum_object_GetChild(ID3DXFileEnumObject *iface, SIZE_T id, ID3DXFileData **object)
Definition: xfile.c:452
static const ID3DXFileVtbl d3dx9_file_vtbl
Definition: xfile.c:682
static HRESULT error_dxfile_to_d3dxfile(HRESULT error)
Definition: xfile.c:28
static HRESULT WINAPI d3dx9_file_data_QueryInterface(ID3DXFileData *iface, REFIID riid, void **out)
Definition: xfile.c:88
static const ID3DXFileEnumObjectVtbl d3dx9_file_enum_object_vtbl
Definition: xfile.c:483
static HRESULT WINAPI d3dx9_file_enum_object_QueryInterface(ID3DXFileEnumObject *iface, REFIID riid, void **out)
Definition: xfile.c:380
static HRESULT d3dx9_file_data_create(IDirectXFileObject *dxfile_object, ID3DXFileData **ret_iface)
Definition: xfile.c:295
static const ID3DXFileDataVtbl d3dx9_file_data_vtbl
Definition: xfile.c:279
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 ULONG WINAPI d3dx9_file_data_Release(ID3DXFileData *iface)
Definition: xfile.c:116
HRESULT WINAPI D3DXFileCreate(ID3DXFile **d3dxfile)
Definition: xfile.c:693
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
static HRESULT WINAPI d3dx9_file_data_GetName(ID3DXFileData *iface, char *name, SIZE_T *size)
Definition: xfile.c:147
static ULONG WINAPI d3dx9_file_AddRef(ID3DXFile *iface)
Definition: xfile.c:513
static BOOL WINAPI d3dx9_file_data_IsReference(ID3DXFileData *iface)
Definition: xfile.c:241
static struct d3dx9_file * impl_from_ID3DXFile(ID3DXFile *iface)
Definition: xfile.c:73
HRESULT WINAPI DirectXFileCreate(LPDIRECTXFILE *lplpDirectXFile)
Definition: main.c:121
GUID guid
Definition: version.c:147
return ret
Definition: mutex.c:147
#define D3DXF_FILELOAD_FROMFILE
Definition: d3dx9xof.h:38
#define D3DXFERR_BADFILEVERSION
Definition: d3dx9xof.h:172
DWORD D3DXF_FILESAVEOPTIONS
Definition: d3dx9xof.h:33
#define D3DXFERR_BADFILEFLOATSIZE
Definition: d3dx9xof.h:173
#define D3DXF_FILELOAD_FROMRESOURCE
Definition: d3dx9xof.h:40
DWORD D3DXF_FILELOADOPTIONS
Definition: d3dx9xof.h:37
#define D3DXF_FILELOAD_FROMMEMORY
Definition: d3dx9xof.h:41
#define D3DXFERR_PARSEERROR
Definition: d3dx9xof.h:175
#define D3DXFERR_BADFILETYPE
Definition: d3dx9xof.h:171
DWORD D3DXF_FILEFORMAT
Definition: d3dx9xof.h:28
#define D3DXFERR_BADVALUE
Definition: d3dx9xof.h:164
#define IDirectXFile_RegisterTemplates(p, a, b)
Definition: dxfile.h:86
DWORD DXFILELOADOPTIONS
Definition: dxfile.h:35
#define IDirectXFile_Release(p)
Definition: dxfile.h:82
#define IDirectXFileData_GetId(p, a)
Definition: dxfile.h:188
#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 DXFILEERR_BADFILEVERSION
Definition: dxfile.h:282
#define IDirectXFile_CreateEnumObject(p, a, b, c)
Definition: dxfile.h:84
#define DXFILEERR_BADFILEFLOATSIZE
Definition: dxfile.h:283
#define DXFILEERR_BADFILETYPE
Definition: dxfile.h:281
#define IDirectXFileData_GetType(p, a)
Definition: dxfile.h:191
#define DXFILE_OK
Definition: dxfile.h:268
#define IDirectXFileData_GetName(p, a, b)
Definition: dxfile.h:187
#define DXFILEERR_PARSEERROR
Definition: dxfile.h:286
#define IDirectXFileData_GetData(p, a, b, c)
Definition: dxfile.h:190
#define IDirectXFileObject_QueryInterface(p, a, b)
Definition: dxfile.h:158
#define DXFILELOAD_FROMRESOURCE
Definition: dxfile.h:38
#define DXFILEERR_NOMOREOBJECTS
Definition: dxfile.h:291
#define DXFILELOAD_FROMMEMORY
Definition: dxfile.h:39
#define IDirectXFileDataReference_Resolve(p, a)
Definition: dxfile.h:217
#define DXFILEERR_BADVALUE
Definition: dxfile.h:271
#define IDirectXFileData_GetNextObject(p, a)
Definition: dxfile.h:192
#define IDirectXFileData_Release(p)
Definition: dxfile.h:185
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLsizeiptr size
Definition: glext.h:5919
GLint reference
Definition: glext.h:11729
GLuint id
Definition: glext.h:5910
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
REFIID riid
Definition: atlbase.h:39
nsrefcnt Release()
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_a
Definition: kernel32.h:31
#define error(str)
Definition: mkdosfs.c:1605
static char memory[1024 *256]
Definition: process.c:122
static HWND child
Definition: cursoricon.c:298
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
#define calloc
Definition: rosglue.h:14
#define TRACE(s)
Definition: solgame.cpp:4
LPVOID lpMemory
Definition: dxfile.h:50
HMODULE hModule
Definition: dxfile.h:44
Definition: scsiwmi.h:51
ID3DXFileData ** children
Definition: xfile.c:70
ID3DXFileData ID3DXFileData_iface
Definition: xfile.c:65
unsigned int child_count
Definition: xfile.c:69
LONG ref
Definition: xfile.c:66
IDirectXFileData * dxfile_data
Definition: xfile.c:68
BOOL reference
Definition: xfile.c:67
ID3DXFileEnumObject ID3DXFileEnumObject_iface
Definition: xfile.c:57
ID3DXFileData ** children
Definition: xfile.c:60
unsigned int child_count
Definition: xfile.c:59
IDirectXFile * dxfile
Definition: xfile.c:52
ID3DXFile ID3DXFile_iface
Definition: xfile.c:50
LONG ref
Definition: xfile.c:51
Definition: fci.c:123
LONG ref
Definition: filesystem.c:114
Definition: name.c:39
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:3479
#define E_POINTER
Definition: winerror.h:3480