ReactOS  0.4.13-dev-551-gf37fb1f
vertexdeclaration.c
Go to the documentation of this file.
1 /*
2  * IDirect3DVertexDeclaration9 implementation
3  *
4  * Copyright 2002-2003 Raphael Junqueira
5  * Jason Edmeades
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20  */
21 
22 #include "config.h"
23 #include "d3d9_private.h"
24 
26 
27 static const struct
28 {
30  unsigned int component_count;
31  unsigned int component_size;
32 }
34 {
35  /* D3DDECLTYPE_FLOAT1 */ {WINED3DFMT_R32_FLOAT, 1, sizeof(float)},
36  /* D3DDECLTYPE_FLOAT2 */ {WINED3DFMT_R32G32_FLOAT, 2, sizeof(float)},
37  /* D3DDECLTYPE_FLOAT3 */ {WINED3DFMT_R32G32B32_FLOAT, 3, sizeof(float)},
38  /* D3DDECLTYPE_FLOAT4 */ {WINED3DFMT_R32G32B32A32_FLOAT, 4, sizeof(float)},
39  /* D3DDECLTYPE_D3DCOLOR */ {WINED3DFMT_B8G8R8A8_UNORM, 4, sizeof(BYTE)},
40  /* D3DDECLTYPE_UBYTE4 */ {WINED3DFMT_R8G8B8A8_UINT, 4, sizeof(BYTE)},
41  /* D3DDECLTYPE_SHORT2 */ {WINED3DFMT_R16G16_SINT, 2, sizeof(short int)},
42  /* D3DDECLTYPE_SHORT4 */ {WINED3DFMT_R16G16B16A16_SINT, 4, sizeof(short int)},
43  /* D3DDECLTYPE_UBYTE4N */ {WINED3DFMT_R8G8B8A8_UNORM, 4, sizeof(BYTE)},
44  /* D3DDECLTYPE_SHORT2N */ {WINED3DFMT_R16G16_SNORM, 2, sizeof(short int)},
45  /* D3DDECLTYPE_SHORT4N */ {WINED3DFMT_R16G16B16A16_SNORM, 4, sizeof(short int)},
46  /* D3DDECLTYPE_USHORT2N */ {WINED3DFMT_R16G16_UNORM, 2, sizeof(short int)},
47  /* D3DDECLTYPE_USHORT4N */ {WINED3DFMT_R16G16B16A16_UNORM, 4, sizeof(short int)},
48  /* D3DDECLTYPE_UDEC3 */ {WINED3DFMT_R10G10B10X2_UINT, 3, sizeof(short int)},
49  /* D3DDECLTYPE_DEC3N */ {WINED3DFMT_R10G10B10X2_SNORM, 3, sizeof(short int)},
50  /* D3DDECLTYPE_FLOAT16_2 */ {WINED3DFMT_R16G16_FLOAT, 2, sizeof(short int)},
51  /* D3DDECLTYPE_FLOAT16_4 */ {WINED3DFMT_R16G16B16A16_FLOAT, 4, sizeof(short int)}
52 };
53 
54 static inline struct d3d9_vertex_declaration *impl_from_IDirect3DVertexDeclaration9(IDirect3DVertexDeclaration9 *iface)
55 {
57 }
58 
60  DWORD fvf,
61  D3DVERTEXELEMENT9** ppVertexElements) {
62 
63  unsigned int idx, idx2;
64  unsigned int offset;
65  BOOL has_pos = (fvf & D3DFVF_POSITION_MASK) != 0;
66  BOOL has_blend = (fvf & D3DFVF_XYZB5) > D3DFVF_XYZRHW;
67  BOOL has_blend_idx = has_blend &&
68  (((fvf & D3DFVF_XYZB5) == D3DFVF_XYZB5) ||
71  BOOL has_normal = (fvf & D3DFVF_NORMAL) != 0;
72  BOOL has_psize = (fvf & D3DFVF_PSIZE) != 0;
73 
74  BOOL has_diffuse = (fvf & D3DFVF_DIFFUSE) != 0;
75  BOOL has_specular = (fvf & D3DFVF_SPECULAR) !=0;
76 
78  DWORD texcoords = (fvf & 0xFFFF0000) >> 16;
79 
80  D3DVERTEXELEMENT9 end_element = D3DDECL_END();
82 
83  unsigned int size;
84  DWORD num_blends = 1 + (((fvf & D3DFVF_XYZB5) - D3DFVF_XYZB1) >> 1);
85  if (has_blend_idx) num_blends--;
86 
87  /* Compute declaration size */
88  size = has_pos + (has_blend && num_blends > 0) + has_blend_idx + has_normal +
89  has_psize + has_diffuse + has_specular + num_textures + 1;
90 
91  /* convert the declaration */
92  if (!(elements = heap_alloc(size * sizeof(*elements))))
94 
95  elements[size-1] = end_element;
96  idx = 0;
97  if (has_pos) {
98  if (!has_blend && (fvf & D3DFVF_XYZRHW)) {
101  }
102  else if (!has_blend && (fvf & D3DFVF_XYZW) == D3DFVF_XYZW) {
105  }
106  else {
109  }
110  elements[idx].UsageIndex = 0;
111  idx++;
112  }
113  if (has_blend && (num_blends > 0)) {
116  else {
117  switch(num_blends) {
118  case 1: elements[idx].Type = D3DDECLTYPE_FLOAT1; break;
119  case 2: elements[idx].Type = D3DDECLTYPE_FLOAT2; break;
120  case 3: elements[idx].Type = D3DDECLTYPE_FLOAT3; break;
121  case 4: elements[idx].Type = D3DDECLTYPE_FLOAT4; break;
122  default:
123  ERR("Unexpected amount of blend values: %u\n", num_blends);
124  }
125  }
127  elements[idx].UsageIndex = 0;
128  idx++;
129  }
130  if (has_blend_idx) {
131  if (fvf & D3DFVF_LASTBETA_UBYTE4 ||
134  else if (fvf & D3DFVF_LASTBETA_D3DCOLOR)
136  else
139  elements[idx].UsageIndex = 0;
140  idx++;
141  }
142  if (has_normal) {
145  elements[idx].UsageIndex = 0;
146  idx++;
147  }
148  if (has_psize) {
151  elements[idx].UsageIndex = 0;
152  idx++;
153  }
154  if (has_diffuse) {
157  elements[idx].UsageIndex = 0;
158  idx++;
159  }
160  if (has_specular) {
163  elements[idx].UsageIndex = 1;
164  idx++;
165  }
166  for (idx2 = 0; idx2 < num_textures; idx2++) {
167  unsigned int numcoords = (texcoords >> (idx2*2)) & 0x03;
168  switch (numcoords) {
171  break;
174  break;
177  break;
180  break;
181  }
183  elements[idx].UsageIndex = idx2;
184  idx++;
185  }
186 
187  /* Now compute offsets, and initialize the rest of the fields */
188  for (idx = 0, offset = 0; idx < size-1; idx++) {
189  elements[idx].Stream = 0;
192  offset += d3d_dtype_lookup[elements[idx].Type].component_count
193  * d3d_dtype_lookup[elements[idx].Type].component_size;
194  }
195 
196  *ppVertexElements = elements;
197  return D3D_OK;
198 }
199 
200 static HRESULT WINAPI d3d9_vertex_declaration_QueryInterface(IDirect3DVertexDeclaration9 *iface,
201  REFIID riid, void **out)
202 {
203  TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
204 
205  if (IsEqualGUID(riid, &IID_IDirect3DVertexDeclaration9)
207  {
209  *out = iface;
210  return S_OK;
211  }
212 
213  WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
214 
215  *out = NULL;
216  return E_NOINTERFACE;
217 }
218 
219 static ULONG WINAPI d3d9_vertex_declaration_AddRef(IDirect3DVertexDeclaration9 *iface)
220 {
223 
224  TRACE("%p increasing refcount to %u.\n", iface, refcount);
225 
226  if (refcount == 1)
227  {
228  IDirect3DDevice9Ex_AddRef(declaration->parent_device);
230  wined3d_vertex_declaration_incref(declaration->wined3d_declaration);
232  }
233 
234  return refcount;
235 }
236 
237 static ULONG WINAPI d3d9_vertex_declaration_Release(IDirect3DVertexDeclaration9 *iface)
238 {
241 
242  TRACE("%p decreasing refcount to %u.\n", iface, refcount);
243 
244  if (!refcount)
245  {
246  IDirect3DDevice9Ex *parent_device = declaration->parent_device;
248  wined3d_vertex_declaration_decref(declaration->wined3d_declaration);
250 
251  /* Release the device last, as it may cause the device to be destroyed. */
253  }
254 
255  return refcount;
256 }
257 
258 static HRESULT WINAPI d3d9_vertex_declaration_GetDevice(IDirect3DVertexDeclaration9 *iface, IDirect3DDevice9 **device)
259 {
261 
262  TRACE("iface %p, device %p.\n", iface, device);
263 
264  *device = (IDirect3DDevice9 *)declaration->parent_device;
266 
267  TRACE("Returning device %p.\n", *device);
268 
269  return D3D_OK;
270 }
271 
272 static HRESULT WINAPI d3d9_vertex_declaration_GetDeclaration(IDirect3DVertexDeclaration9 *iface,
274 {
276 
277  TRACE("iface %p, elements %p, element_count %p.\n", iface, elements, element_count);
278 
279  *element_count = declaration->element_count;
280 
281  /* Passing a NULL elements is used to just retrieve the number of elements */
282  if (!elements)
283  return D3D_OK;
284 
285  TRACE("Copying %p to %p.\n", declaration->elements, elements);
286  memcpy(elements, declaration->elements, sizeof(*declaration->elements) * declaration->element_count);
287 
288  return D3D_OK;
289 }
290 
291 static const struct IDirect3DVertexDeclaration9Vtbl d3d9_vertex_declaration_vtbl =
292 {
293  /* IUnknown */
297  /* IDirect3DVertexDeclaration9 */
300 };
301 
303 {
304  if (!iface)
305  return NULL;
306  assert(iface->lpVtbl == &d3d9_vertex_declaration_vtbl);
308 }
309 
311 {
313  heap_free(declaration->elements);
315 }
316 
318 {
320 };
321 
323  struct wined3d_vertex_element **wined3d_elements, UINT *element_count)
324 {
325  const D3DVERTEXELEMENT9* element;
326  UINT count = 1;
327  UINT i;
328 
329  TRACE("d3d9_elements %p, wined3d_elements %p, element_count %p\n", d3d9_elements, wined3d_elements, element_count);
330 
331  element = d3d9_elements;
332  while (element++->Stream != 0xff && count++ < 128);
333 
334  if (count == 128) return E_FAIL;
335 
336  /* Skip the END element */
337  --count;
338 
339  if (!(*wined3d_elements = heap_alloc(count * sizeof(**wined3d_elements))))
340  {
341  FIXME("Memory allocation failed\n");
343  }
344 
345  for (i = 0; i < count; ++i)
346  {
347  if (d3d9_elements[i].Type >= ARRAY_SIZE(d3d_dtype_lookup))
348  {
349  WARN("Invalid element type %#x.\n", d3d9_elements[i].Type);
350  heap_free(*wined3d_elements);
351  return E_FAIL;
352  }
353  (*wined3d_elements)[i].format = d3d_dtype_lookup[d3d9_elements[i].Type].format;
354  (*wined3d_elements)[i].input_slot = d3d9_elements[i].Stream;
355  (*wined3d_elements)[i].offset = d3d9_elements[i].Offset;
356  (*wined3d_elements)[i].output_slot = WINED3D_OUTPUT_SLOT_SEMANTIC;
357  (*wined3d_elements)[i].input_slot_class = WINED3D_INPUT_PER_VERTEX_DATA;
358  (*wined3d_elements)[i].instance_data_step_rate = 0;
359  (*wined3d_elements)[i].method = d3d9_elements[i].Method;
360  (*wined3d_elements)[i].usage = d3d9_elements[i].Usage;
361  (*wined3d_elements)[i].usage_idx = d3d9_elements[i].UsageIndex;
362  }
363 
364  *element_count = count;
365 
366  return D3D_OK;
367 }
368 
370  struct d3d9_device *device, const D3DVERTEXELEMENT9 *elements)
371 {
372  struct wined3d_vertex_element *wined3d_elements;
373  UINT wined3d_element_count;
374  UINT element_count;
375  HRESULT hr;
376 
377  hr = convert_to_wined3d_declaration(elements, &wined3d_elements, &wined3d_element_count);
378  if (FAILED(hr))
379  {
380  WARN("Failed to create wined3d vertex declaration elements, hr %#x.\n", hr);
381  return hr;
382  }
383 
384  declaration->IDirect3DVertexDeclaration9_iface.lpVtbl = &d3d9_vertex_declaration_vtbl;
385  declaration->refcount = 1;
386 
387  element_count = wined3d_element_count + 1;
388  if (!(declaration->elements = heap_alloc(element_count * sizeof(*declaration->elements))))
389  {
390  heap_free(wined3d_elements);
391  ERR("Failed to allocate vertex declaration elements memory.\n");
393  }
394  memcpy(declaration->elements, elements, element_count * sizeof(*elements));
395  declaration->element_count = element_count;
396 
398  hr = wined3d_vertex_declaration_create(device->wined3d_device, wined3d_elements, wined3d_element_count,
401  heap_free(wined3d_elements);
402  if (FAILED(hr))
403  {
404  heap_free(declaration->elements);
405  WARN("Failed to create wined3d vertex declaration, hr %#x.\n", hr);
406  return hr;
407  }
408 
409  declaration->parent_device = &device->IDirect3DDevice9Ex_iface;
410  IDirect3DDevice9Ex_AddRef(declaration->parent_device);
411 
412  return D3D_OK;
413 }
414 
416  const D3DVERTEXELEMENT9 *elements, struct d3d9_vertex_declaration **declaration)
417 {
419  HRESULT hr;
420 
421  if (!(object = heap_alloc_zero(sizeof(*object))))
422  return E_OUTOFMEMORY;
423 
425  if (FAILED(hr))
426  {
427  WARN("Failed to initialize vertex declaration, hr %#x.\n", hr);
428  heap_free(object);
429  return hr;
430  }
431 
432  TRACE("Created vertex declaration %p.\n", object);
433  *declaration = object;
434 
435  return D3D_OK;
436 }
#define D3DFVF_XYZB1
Definition: d3d8types.h:115
IDirect3DVertexDeclaration9 IDirect3DVertexDeclaration9_iface
Definition: d3d9_private.h:240
static HRESULT vertexdeclaration_init(struct d3d9_vertex_declaration *declaration, struct d3d9_device *device, const D3DVERTEXELEMENT9 *elements)
#define D3DFVF_LASTBETA_UBYTE4
Definition: d3d8types.h:135
#define REFIID
Definition: guiddef.h:113
#define E_NOINTERFACE
Definition: winerror.h:2364
#define D3DFVF_XYZRHW
Definition: d3d8types.h:114
Type
Definition: Type.h:6
HRESULT hr
Definition: shlfolder.c:183
#define D3DFVF_PSIZE
Definition: d3d8types.h:121
REFIID riid
Definition: precomp.h:44
GLuint GLuint GLsizei count
Definition: gl.h:1545
#define D3DFVF_NORMAL
Definition: d3d8types.h:120
#define WARN(fmt,...)
Definition: debug.h:111
void WINAPI wined3d_mutex_lock(void)
Definition: wined3d_main.c:360
GLintptr offset
Definition: glext.h:5920
HRESULT CDECL wined3d_vertex_declaration_create(struct wined3d_device *device, const struct wined3d_vertex_element *elements, UINT element_count, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_vertex_declaration **declaration)
#define assert(x)
Definition: debug.h:53
#define IDirect3DDevice9Ex_Release(p)
Definition: d3d9.h:1917
struct d3d9_vertex_declaration * unsafe_impl_from_IDirect3DVertexDeclaration9(IDirect3DVertexDeclaration9 *iface)
#define E_FAIL
Definition: ddrawi.h:102
static ULONG WINAPI d3d9_vertex_declaration_AddRef(IDirect3DVertexDeclaration9 *iface)
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
static const struct @218 d3d_dtype_lookup[]
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
#define D3DFVF_TEXCOUNT_MASK
Definition: d3d8types.h:124
unsigned int component_count
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define IDirect3DVertexDeclaration9_AddRef(p)
Definition: d3d9.h:1184
unsigned int BOOL
Definition: ntddk_ex.h:94
#define D3DFVF_POSITION_MASK
Definition: d3d8types.h:112
Definition: devices.h:37
#define FIXME(fmt,...)
Definition: debug.h:110
unsigned int idx
Definition: utils.c:41
#define D3DFVF_SPECULAR
Definition: d3d8types.h:123
D3DVERTEXELEMENT9 * elements
Definition: d3d9_private.h:242
smooth NULL
Definition: ftsmooth.c:416
HRESULT vdecl_convert_fvf(DWORD fvf, D3DVERTEXELEMENT9 **ppVertexElements)
#define D3DFVF_TEXTUREFORMAT2
Definition: d3d8types.h:61
#define D3DFVF_XYZB2
Definition: d3d8types.h:116
IDirect3DDevice9Ex * parent_device
Definition: d3d9_private.h:246
#define debugstr_guid
Definition: kernel32.h:35
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
unsigned int component_size
#define IDirect3DDevice9Ex_AddRef(p)
Definition: d3d9.h:1916
ULONG CDECL wined3d_vertex_declaration_decref(struct wined3d_vertex_declaration *declaration)
#define D3DFVF_TEXTUREFORMAT4
Definition: d3d8types.h:63
WINE_DEFAULT_DEBUG_CHANNEL(d3d8)
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
HRESULT d3d9_vertex_declaration_create(struct d3d9_device *device, const D3DVERTEXELEMENT9 *elements, struct d3d9_vertex_declaration **declaration)
r parent
Definition: btrfs.c:2708
LONG HRESULT
Definition: typedefs.h:77
#define D3DFVF_XYZB5
Definition: d3d8types.h:119
const GUID IID_IUnknown
#define WINAPI
Definition: msvc.h:8
#define STDMETHODCALLTYPE
Definition: bdasup.h:9
static FILE * out
Definition: regtests2xml.c:44
unsigned long DWORD
Definition: ntddk_ex.h:95
enum wined3d_format_id format
#define IDirect3DDevice9_AddRef(p)
Definition: d3d9.h:1507
#define InterlockedDecrement
Definition: armddk.h:52
#define WINED3D_OUTPUT_SLOT_SEMANTIC
Definition: wined3d.h:1566
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
unsigned char BYTE
Definition: mem.h:68
#define D3DDECL_END()
Definition: d3d9types.h:311
static HRESULT convert_to_wined3d_declaration(const D3DVERTEXELEMENT9 *d3d9_elements, struct wined3d_vertex_element **wined3d_elements, UINT *element_count)
static HRESULT WINAPI d3d9_vertex_declaration_GetDevice(IDirect3DVertexDeclaration9 *iface, IDirect3DDevice9 **device)
static HRESULT WINAPI d3d9_vertex_declaration_QueryInterface(IDirect3DVertexDeclaration9 *iface, REFIID riid, void **out)
wined3d_format_id
Definition: wined3d.h:105
#define ERR(fmt,...)
Definition: debug.h:109
#define D3DERR_OUTOFVIDEOMEMORY
Definition: d3d8.h:85
#define S_OK
Definition: intsafe.h:59
static struct d3d9_vertex_declaration * impl_from_IDirect3DVertexDeclaration9(IDirect3DVertexDeclaration9 *iface)
#define D3D_OK
Definition: d3d.h:106
#define InterlockedIncrement
Definition: armddk.h:53
#define ARRAY_SIZE(a)
Definition: main.h:24
static void STDMETHODCALLTYPE d3d9_vertexdeclaration_wined3d_object_destroyed(void *parent)
#define D3DFVF_TEXCOUNT_SHIFT
Definition: d3d8types.h:125
unsigned int UINT
Definition: ndis.h:50
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4021
#define D3DFVF_DIFFUSE
Definition: d3d8types.h:122
#define D3DFVF_TEXTUREFORMAT3
Definition: d3d8types.h:62
#define D3DFVF_XYZW
Definition: d3d9types.h:143
unsigned int ULONG
Definition: retypes.h:1
static HRESULT WINAPI d3d9_vertex_declaration_GetDeclaration(IDirect3DVertexDeclaration9 *iface, D3DVERTEXELEMENT9 *elements, UINT *element_count)
static const struct IDirect3DVertexDeclaration9Vtbl d3d9_vertex_declaration_vtbl
void WINAPI wined3d_mutex_unlock(void)
Definition: wined3d_main.c:365
#define D3DFVF_LASTBETA_D3DCOLOR
Definition: d3d9types.h:160
static const struct wined3d_parent_ops d3d9_vertexdeclaration_wined3d_parent_ops
static ULONG WINAPI d3d9_vertex_declaration_Release(IDirect3DVertexDeclaration9 *iface)
_Inout_opt_ PUNICODE_STRING _Inout_opt_ PUNICODE_STRING Stream
Definition: fltkernel.h:1092
ULONG CDECL wined3d_vertex_declaration_incref(struct wined3d_vertex_declaration *declaration)
void * object
Definition: jmemsys.h:48
static BOOL heap_free(void *mem)
Definition: appwiz.h:75
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
#define D3DFVF_TEXTUREFORMAT1
Definition: d3d8types.h:60