ReactOS 0.4.17-dev-966-gf06eace
skin.c
Go to the documentation of this file.
1/*
2 * Skin Info operations specific to D3DX9.
3 *
4 * Copyright (C) 2011 Dylan Smith
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 */
20
21
22#include "d3dx9_private.h"
23
25
26struct bone
27{
28 char *name;
33};
34
36{
37 ID3DXSkinInfo ID3DXSkinInfo_iface;
39
44 struct bone *bones;
45};
46
47static inline struct d3dx9_skin_info *impl_from_ID3DXSkinInfo(ID3DXSkinInfo *iface)
48{
50}
51
52static HRESULT WINAPI d3dx9_skin_info_QueryInterface(ID3DXSkinInfo *iface, REFIID riid, void **out)
53{
54 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
55
56 if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_ID3DXSkinInfo))
57 {
58 IUnknown_AddRef(iface);
59 *out = iface;
60 return D3D_OK;
61 }
62
63 WARN("%s not implemented, returning E_NOINTERFACE\n", debugstr_guid(riid));
64
65 return E_NOINTERFACE;
66}
67
68static ULONG WINAPI d3dx9_skin_info_AddRef(ID3DXSkinInfo *iface)
69{
70 struct d3dx9_skin_info *skin = impl_from_ID3DXSkinInfo(iface);
71 ULONG refcount = InterlockedIncrement(&skin->ref);
72
73 TRACE("%p increasing refcount to %lu.\n", skin, refcount);
74
75 return refcount;
76}
77
78static ULONG WINAPI d3dx9_skin_info_Release(ID3DXSkinInfo *iface)
79{
80 struct d3dx9_skin_info *skin = impl_from_ID3DXSkinInfo(iface);
81 ULONG refcount = InterlockedDecrement(&skin->ref);
82
83 TRACE("%p decreasing refcount to %lu.\n", skin, refcount);
84
85 if (!refcount)
86 {
87 DWORD i;
88
89 for (i = 0; i < skin->num_bones; ++i)
90 {
91 free(skin->bones[i].name);
92 free(skin->bones[i].vertices);
93 free(skin->bones[i].weights);
94 }
95 free(skin->bones);
96 free(skin);
97 }
98
99 return refcount;
100}
101
103 DWORD bone_num, DWORD num_influences, const DWORD *vertices, const float *weights)
104{
105 struct d3dx9_skin_info *skin = impl_from_ID3DXSkinInfo(iface);
106 struct bone *bone;
107 DWORD *new_vertices = NULL;
108 FLOAT *new_weights = NULL;
109
110 TRACE("iface %p, bone_num %lu, num_influences %lu, vertices %p, weights %p.\n",
111 iface, bone_num, num_influences, vertices, weights);
112
113 if (bone_num >= skin->num_bones || !vertices || !weights)
114 return D3DERR_INVALIDCALL;
115
116 if (num_influences) {
117 new_vertices = malloc(num_influences * sizeof(*vertices));
118 if (!new_vertices)
119 return E_OUTOFMEMORY;
120 new_weights = malloc(num_influences * sizeof(*weights));
121 if (!new_weights) {
122 free(new_vertices);
123 return E_OUTOFMEMORY;
124 }
125 memcpy(new_vertices, vertices, num_influences * sizeof(*vertices));
126 memcpy(new_weights, weights, num_influences * sizeof(*weights));
127 }
128 bone = &skin->bones[bone_num];
131 free(bone->weights);
132 bone->vertices = new_vertices;
133 bone->weights = new_weights;
134
135 return D3D_OK;
136}
137
139 DWORD bone_idx, DWORD influence_idx, float weight)
140{
141 FIXME("iface %p, bone_idx %lu, influence_idx %lu, weight %.8e stub!\n",
142 iface, bone_idx, influence_idx, weight);
143
144 return E_NOTIMPL;
145}
146
147static DWORD WINAPI d3dx9_skin_info_GetNumBoneInfluences(ID3DXSkinInfo *iface, DWORD bone_idx)
148{
149 struct d3dx9_skin_info *skin = impl_from_ID3DXSkinInfo(iface);
150
151 TRACE("iface %p, bone_idx %lu.\n", iface, bone_idx);
152
153 if (bone_idx >= skin->num_bones)
154 return 0;
155
156 return skin->bones[bone_idx].num_influences;
157}
158
160 DWORD bone_idx, DWORD *vertices, float *weights)
161{
162 struct d3dx9_skin_info *skin = impl_from_ID3DXSkinInfo(iface);
163 struct bone *bone;
164
165 TRACE("iface %p, bone_idx %lu, vertices %p, weights %p.\n",
166 iface, bone_idx, vertices, weights);
167
168 if (bone_idx >= skin->num_bones || !vertices)
169 return D3DERR_INVALIDCALL;
170
171 bone = &skin->bones[bone_idx];
172 if (!bone->num_influences)
173 return D3D_OK;
174
176 if (weights)
178
179 return D3D_OK;
180}
181
183 DWORD bone_idx, DWORD influence_idx, float *weight, DWORD *vertex_idx)
184{
185 FIXME("iface %p, bone_idx %lu, influence_idx %lu, weight %p, vertex_idx %p stub!\n",
186 iface, bone_idx, influence_idx, weight, vertex_idx);
187
188 return E_NOTIMPL;
189}
190
191static HRESULT WINAPI d3dx9_skin_info_GetMaxVertexInfluences(ID3DXSkinInfo *iface, DWORD *max_vertex_influences)
192{
193 FIXME("iface %p, max_vertex_influences %p stub!\n", iface, max_vertex_influences);
194
195 return E_NOTIMPL;
196}
197
198static DWORD WINAPI d3dx9_skin_info_GetNumBones(ID3DXSkinInfo *iface)
199{
200 struct d3dx9_skin_info *skin = impl_from_ID3DXSkinInfo(iface);
201
202 TRACE("iface %p.\n", iface);
203
204 return skin->num_bones;
205}
206
208 DWORD bone_idx, DWORD vertex_idx, DWORD *influence_idx)
209{
210 FIXME("iface %p, bone_idx %lu, vertex_idx %lu, influence_idx %p stub!\n",
211 iface, bone_idx, vertex_idx, influence_idx);
212
213 return E_NOTIMPL;
214}
215
216static HRESULT WINAPI d3dx9_skin_info_GetMaxFaceInfluences(struct ID3DXSkinInfo *iface,
217 struct IDirect3DIndexBuffer9 *index_buffer, DWORD face_count, DWORD *max_face_influences)
218{
219 FIXME("iface %p, index_buffer %p, face_count %lu, max_face_influences %p stub!\n",
220 iface, index_buffer, face_count, max_face_influences);
221
222 return E_NOTIMPL;
223}
224
225static HRESULT WINAPI d3dx9_skin_info_SetMinBoneInfluence(ID3DXSkinInfo *iface, float min_influence)
226{
227 FIXME("iface %p, min_influence %.8e stub!\n", iface, min_influence);
228
229 return E_NOTIMPL;
230}
231
232static float WINAPI d3dx9_skin_info_GetMinBoneInfluence(ID3DXSkinInfo *iface)
233{
234 FIXME("iface %p stub!\n", iface);
235
236 return 0.0f;
237}
238
239static HRESULT WINAPI d3dx9_skin_info_SetBoneName(ID3DXSkinInfo *iface, DWORD bone_idx, const char *name)
240{
241 struct d3dx9_skin_info *skin = impl_from_ID3DXSkinInfo(iface);
242 char *new_name;
243
244 TRACE("iface %p, bone_idx %lu, name %s.\n", iface, bone_idx, debugstr_a(name));
245
246 if (bone_idx >= skin->num_bones || !name)
247 return D3DERR_INVALIDCALL;
248
249 new_name = strdup(name);
250 if (!new_name)
251 return E_OUTOFMEMORY;
252 free(skin->bones[bone_idx].name);
253 skin->bones[bone_idx].name = new_name;
254
255 return D3D_OK;
256}
257
258static const char * WINAPI d3dx9_skin_info_GetBoneName(ID3DXSkinInfo *iface, DWORD bone_idx)
259{
260 struct d3dx9_skin_info *skin = impl_from_ID3DXSkinInfo(iface);
261
262 TRACE("iface %p, bone_idx %lu.\n", iface, bone_idx);
263
264 if (bone_idx >= skin->num_bones)
265 return NULL;
266
267 return skin->bones[bone_idx].name;
268}
269
271 DWORD bone_idx, const D3DXMATRIX *bone_transform)
272{
273 struct d3dx9_skin_info *skin = impl_from_ID3DXSkinInfo(iface);
274
275 TRACE("iface %p, bone_idx %lu, bone_transform %p.\n", iface, bone_idx, bone_transform);
276
277 if (bone_idx >= skin->num_bones || !bone_transform)
278 return D3DERR_INVALIDCALL;
279
280 skin->bones[bone_idx].transform = *bone_transform;
281 return D3D_OK;
282}
283
284static D3DXMATRIX * WINAPI d3dx9_skin_info_GetBoneOffsetMatrix(ID3DXSkinInfo *iface, DWORD bone_idx)
285{
286 struct d3dx9_skin_info *skin = impl_from_ID3DXSkinInfo(iface);
287
288 TRACE("iface %p, bone_idx %lu.\n", iface, bone_idx);
289
290 if (bone_idx >= skin->num_bones)
291 return NULL;
292
293 return &skin->bones[bone_idx].transform;
294}
295
296static HRESULT WINAPI d3dx9_skin_info_Clone(ID3DXSkinInfo *iface, ID3DXSkinInfo **skin_info)
297{
298 struct d3dx9_skin_info *skin = impl_from_ID3DXSkinInfo(iface);
299 unsigned int i;
300 HRESULT hr;
301
302 TRACE("iface %p, skin_info %p.\n", iface, skin_info);
303
304 if (FAILED(hr = D3DXCreateSkinInfo(skin->num_vertices, skin->vertex_declaration, skin->num_bones, skin_info)))
305 return hr;
306
307 for (i = 0; i < skin->num_bones; ++i)
308 {
309 struct bone *current_bone = &skin->bones[i];
310
311 if (current_bone->name && FAILED(hr = (*skin_info)->lpVtbl->SetBoneName(*skin_info, i, current_bone->name)))
312 break;
313 if (FAILED(hr = (*skin_info)->lpVtbl->SetBoneOffsetMatrix(*skin_info, i, &current_bone->transform)))
314 break;
315 if (current_bone->vertices && current_bone->weights
316 && FAILED(hr = (*skin_info)->lpVtbl->SetBoneInfluence(*skin_info, i, current_bone->num_influences,
317 current_bone->vertices, current_bone->weights)))
318 break;
319 }
320
321 if (FAILED(hr))
322 (*skin_info)->lpVtbl->Release(*skin_info);
323
324 return hr;
325}
326
327static HRESULT WINAPI d3dx9_skin_info_Remap(ID3DXSkinInfo *iface, DWORD vertex_count, DWORD *vertex_remap)
328{
329 FIXME("iface %p, vertex_count %lu, vertex_remap %p stub!\n", iface, vertex_count, vertex_remap);
330
331 return E_NOTIMPL;
332}
333
334static HRESULT WINAPI d3dx9_skin_info_SetFVF(ID3DXSkinInfo *iface, DWORD fvf)
335{
336 HRESULT hr;
338
339 TRACE("iface %p, fvf %#lx.\n", iface, fvf);
340
342 if (FAILED(hr)) return hr;
343
344 return iface->lpVtbl->SetDeclaration(iface, declaration);
345}
346
348{
349 struct d3dx9_skin_info *skin = impl_from_ID3DXSkinInfo(iface);
350 HRESULT hr;
351 int count;
352
353 TRACE("iface %p, declaration %p.\n", iface, declaration);
354
355 if (!declaration)
356 return D3DERR_INVALIDCALL;
357 for (count = 0; declaration[count].Stream != 0xff; count++) {
358 if (declaration[count].Stream != 0) {
359 WARN("Invalid vertex element %u; contains non-zero stream %u\n",
361 return D3DERR_INVALIDCALL;
362 }
363 }
364 count++;
365
367
369 skin->fvf = 0;
370
371 return D3D_OK;
372}
373
374static DWORD WINAPI d3dx9_skin_info_GetFVF(ID3DXSkinInfo *iface)
375{
376 struct d3dx9_skin_info *skin = impl_from_ID3DXSkinInfo(iface);
377
378 TRACE("iface %p.\n", iface);
379
380 return skin->fvf;
381}
382
385{
386 struct d3dx9_skin_info *skin = impl_from_ID3DXSkinInfo(iface);
387 UINT count = 0;
388
389 TRACE("iface %p, declaration %p.\n", iface, declaration);
390
391 while (skin->vertex_declaration[count++].Stream != 0xff);
393 return D3D_OK;
394}
395
396static HRESULT WINAPI d3dx9_skin_info_UpdateSkinnedMesh(ID3DXSkinInfo *iface, const D3DXMATRIX *bone_transforms,
397 const D3DXMATRIX *bone_inv_transpose_transforms, const void *src_vertices, void *dst_vertices)
398{
399 FIXME("iface %p, bone_transforms %p, bone_inv_transpose_transforms %p, src_vertices %p, dst_vertices %p stub!\n",
400 iface, bone_transforms, bone_inv_transpose_transforms, src_vertices, dst_vertices);
401
402 return E_NOTIMPL;
403}
404
405static HRESULT WINAPI d3dx9_skin_info_ConvertToBlendedMesh(ID3DXSkinInfo *iface, ID3DXMesh *mesh_in,
406 DWORD options, const DWORD *adjacency_in, DWORD *adjacency_out, DWORD *face_remap,
407 ID3DXBuffer **vertex_remap, DWORD *max_face_influences, DWORD *bone_combination_count,
408 ID3DXBuffer **bone_combination_table, ID3DXMesh **mesh_out)
409{
410 FIXME("iface %p, mesh_in %p, options %#lx, adjacency_in %p, adjacency_out %p, face_remap %p, vertex_remap %p, "
411 "max_face_influences %p, bone_combination_count %p, bone_combination_table %p, mesh_out %p stub!\n",
412 iface, mesh_in, options, adjacency_in, adjacency_out, face_remap, vertex_remap,
413 max_face_influences, bone_combination_count, bone_combination_table, mesh_out);
414
415 return E_NOTIMPL;
416}
417
418static HRESULT WINAPI d3dx9_skin_info_ConvertToIndexedBlendedMesh(ID3DXSkinInfo *iface, ID3DXMesh *mesh_in,
419 DWORD options, DWORD palette_size, const DWORD *adjacency_in, DWORD *adjacency_out, DWORD *face_remap,
420 ID3DXBuffer **vertex_remap, DWORD *max_vertex_influences, DWORD *bone_combination_count,
421 ID3DXBuffer **bone_combination_table, ID3DXMesh **mesh_out)
422{
423 FIXME("iface %p, mesh_in %p, options %#lx, palette_size %lu, adjacency_in %p, adjacency_out %p, "
424 "face_remap %p, vertex_remap %p, max_vertex_influences %p, bone_combination_count %p, "
425 "bone_combination_table %p, mesh_out %p stub!\n",
426 iface, mesh_in, options, palette_size, adjacency_in, adjacency_out, face_remap, vertex_remap,
427 max_vertex_influences, bone_combination_count, bone_combination_table, mesh_out);
428
429 return E_NOTIMPL;
430}
431
432static const struct ID3DXSkinInfoVtbl d3dx9_skin_info_vtbl =
433{
461};
462
464 DWORD bone_count, ID3DXSkinInfo **skin_info)
465{
466 HRESULT hr;
467 static const D3DVERTEXELEMENT9 empty_declaration = D3DDECL_END();
468 struct d3dx9_skin_info *object = NULL;
469
470 TRACE("vertex_count %lu, declaration %p, bone_count %lu, skin_info %p.\n",
471 vertex_count, declaration, bone_count, skin_info);
472
473 if (!skin_info || !declaration)
474 return D3DERR_INVALIDCALL;
475
476 object = calloc(1, sizeof(*object));
477 if (!object)
478 return E_OUTOFMEMORY;
479
480 object->ID3DXSkinInfo_iface.lpVtbl = &d3dx9_skin_info_vtbl;
481 object->ref = 1;
482 object->num_vertices = vertex_count;
483 object->num_bones = bone_count;
484 object->vertex_declaration[0] = empty_declaration;
485 object->fvf = 0;
486
487 object->bones = calloc(bone_count, sizeof(*object->bones));
488 if (!object->bones) {
490 goto error;
491 }
492
493 if (FAILED(hr = d3dx9_skin_info_SetDeclaration(&object->ID3DXSkinInfo_iface, declaration)))
494 goto error;
495
496 *skin_info = &object->ID3DXSkinInfo_iface;
497
498 return D3D_OK;
499error:
500 free(object->bones);
501 free(object);
502 return hr;
503}
504
505HRESULT WINAPI D3DXCreateSkinInfoFVF(DWORD vertex_count, DWORD fvf, DWORD bone_count, ID3DXSkinInfo **skin_info)
506{
507 HRESULT hr;
509
510 TRACE("vertex_count %lu, fvf %#lx, bone_count %lu, skin_info %p.\n",
511 vertex_count, fvf, bone_count, skin_info);
512
514 if (FAILED(hr))
515 return hr;
516
517 return D3DXCreateSkinInfo(vertex_count, declaration, bone_count, skin_info);
518}
#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 D3DERR_INVALIDCALL
Definition: d3d10_private.h:42
#define D3DDECL_END()
Definition: d3d9types.h:329
#define D3D_OK
Definition: d3d.h:106
struct ID3DXBuffer ID3DXBuffer
Definition: d3dx8core.h:51
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_NOTIMPL
Definition: ddrawi.h:99
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
HRESULT WINAPI D3DXDeclaratorFromFVF(DWORD fvf, D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE])
Definition: mesh.c:2034
HRESULT WINAPI D3DXFVFFromDeclarator(const D3DVERTEXELEMENT9 *declaration, DWORD *fvf)
Definition: mesh.c:2132
static unsigned int palette_size(DWORD flags)
Definition: palette.c:239
static char * strdup(const char *buf)
Definition: string.h:83
@ MAX_FVF_DECL_SIZE
Definition: d3dx9mesh.h:41
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint GLsizei count
Definition: gl.h:1545
const GLbyte * weights
Definition: glext.h:6523
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
unsigned int UINT
Definition: sysinfo.c:13
REFIID riid
Definition: atlbase.h:39
ULONG Release()
#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
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
int face_count
Definition: d3drm.c:3529
int vertex_count
Definition: d3drm.c:3528
static IStream Stream
Definition: htmldoc.c:1115
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
weight
Definition: sortkey.c:157
static DWORD WINAPI d3dx9_skin_info_GetNumBoneInfluences(ID3DXSkinInfo *iface, DWORD bone_idx)
Definition: skin.c:147
static float WINAPI d3dx9_skin_info_GetMinBoneInfluence(ID3DXSkinInfo *iface)
Definition: skin.c:232
static HRESULT WINAPI d3dx9_skin_info_Clone(ID3DXSkinInfo *iface, ID3DXSkinInfo **skin_info)
Definition: skin.c:296
HRESULT WINAPI D3DXCreateSkinInfo(DWORD vertex_count, const D3DVERTEXELEMENT9 *declaration, DWORD bone_count, ID3DXSkinInfo **skin_info)
Definition: skin.c:463
HRESULT WINAPI D3DXCreateSkinInfoFVF(DWORD vertex_count, DWORD fvf, DWORD bone_count, ID3DXSkinInfo **skin_info)
Definition: skin.c:505
static HRESULT WINAPI d3dx9_skin_info_SetFVF(ID3DXSkinInfo *iface, DWORD fvf)
Definition: skin.c:334
static const char *WINAPI d3dx9_skin_info_GetBoneName(ID3DXSkinInfo *iface, DWORD bone_idx)
Definition: skin.c:258
static HRESULT WINAPI d3dx9_skin_info_ConvertToBlendedMesh(ID3DXSkinInfo *iface, ID3DXMesh *mesh_in, DWORD options, const DWORD *adjacency_in, DWORD *adjacency_out, DWORD *face_remap, ID3DXBuffer **vertex_remap, DWORD *max_face_influences, DWORD *bone_combination_count, ID3DXBuffer **bone_combination_table, ID3DXMesh **mesh_out)
Definition: skin.c:405
static const struct ID3DXSkinInfoVtbl d3dx9_skin_info_vtbl
Definition: skin.c:432
static HRESULT WINAPI d3dx9_skin_info_SetBoneOffsetMatrix(ID3DXSkinInfo *iface, DWORD bone_idx, const D3DXMATRIX *bone_transform)
Definition: skin.c:270
static HRESULT WINAPI d3dx9_skin_info_SetBoneInfluence(ID3DXSkinInfo *iface, DWORD bone_num, DWORD num_influences, const DWORD *vertices, const float *weights)
Definition: skin.c:102
static D3DXMATRIX *WINAPI d3dx9_skin_info_GetBoneOffsetMatrix(ID3DXSkinInfo *iface, DWORD bone_idx)
Definition: skin.c:284
static HRESULT WINAPI d3dx9_skin_info_ConvertToIndexedBlendedMesh(ID3DXSkinInfo *iface, ID3DXMesh *mesh_in, DWORD options, DWORD palette_size, const DWORD *adjacency_in, DWORD *adjacency_out, DWORD *face_remap, ID3DXBuffer **vertex_remap, DWORD *max_vertex_influences, DWORD *bone_combination_count, ID3DXBuffer **bone_combination_table, ID3DXMesh **mesh_out)
Definition: skin.c:418
static HRESULT WINAPI d3dx9_skin_info_GetDeclaration(ID3DXSkinInfo *iface, D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE])
Definition: skin.c:383
static HRESULT WINAPI d3dx9_skin_info_GetMaxFaceInfluences(struct ID3DXSkinInfo *iface, struct IDirect3DIndexBuffer9 *index_buffer, DWORD face_count, DWORD *max_face_influences)
Definition: skin.c:216
static HRESULT WINAPI d3dx9_skin_info_GetMaxVertexInfluences(ID3DXSkinInfo *iface, DWORD *max_vertex_influences)
Definition: skin.c:191
static HRESULT WINAPI d3dx9_skin_info_SetBoneVertexInfluence(ID3DXSkinInfo *iface, DWORD bone_idx, DWORD influence_idx, float weight)
Definition: skin.c:138
static ULONG WINAPI d3dx9_skin_info_Release(ID3DXSkinInfo *iface)
Definition: skin.c:78
static HRESULT WINAPI d3dx9_skin_info_GetBoneVertexInfluence(ID3DXSkinInfo *iface, DWORD bone_idx, DWORD influence_idx, float *weight, DWORD *vertex_idx)
Definition: skin.c:182
static struct d3dx9_skin_info * impl_from_ID3DXSkinInfo(ID3DXSkinInfo *iface)
Definition: skin.c:47
static HRESULT WINAPI d3dx9_skin_info_Remap(ID3DXSkinInfo *iface, DWORD vertex_count, DWORD *vertex_remap)
Definition: skin.c:327
static HRESULT WINAPI d3dx9_skin_info_GetBoneInfluence(ID3DXSkinInfo *iface, DWORD bone_idx, DWORD *vertices, float *weights)
Definition: skin.c:159
static HRESULT WINAPI d3dx9_skin_info_QueryInterface(ID3DXSkinInfo *iface, REFIID riid, void **out)
Definition: skin.c:52
static HRESULT WINAPI d3dx9_skin_info_FindBoneVertexInfluenceIndex(ID3DXSkinInfo *iface, DWORD bone_idx, DWORD vertex_idx, DWORD *influence_idx)
Definition: skin.c:207
static HRESULT WINAPI d3dx9_skin_info_UpdateSkinnedMesh(ID3DXSkinInfo *iface, const D3DXMATRIX *bone_transforms, const D3DXMATRIX *bone_inv_transpose_transforms, const void *src_vertices, void *dst_vertices)
Definition: skin.c:396
static HRESULT WINAPI d3dx9_skin_info_SetBoneName(ID3DXSkinInfo *iface, DWORD bone_idx, const char *name)
Definition: skin.c:239
static ULONG WINAPI d3dx9_skin_info_AddRef(ID3DXSkinInfo *iface)
Definition: skin.c:68
static HRESULT WINAPI d3dx9_skin_info_SetMinBoneInfluence(ID3DXSkinInfo *iface, float min_influence)
Definition: skin.c:225
static HRESULT WINAPI d3dx9_skin_info_SetDeclaration(ID3DXSkinInfo *iface, const D3DVERTEXELEMENT9 *declaration)
Definition: skin.c:347
static DWORD WINAPI d3dx9_skin_info_GetNumBones(ID3DXSkinInfo *iface)
Definition: skin.c:198
static DWORD WINAPI d3dx9_skin_info_GetFVF(ID3DXSkinInfo *iface)
Definition: skin.c:374
#define TRACE(s)
Definition: solgame.cpp:4
Definition: skin.c:27
FLOAT * weights
Definition: skin.c:32
char * name
Definition: skin.c:28
DWORD * vertices
Definition: skin.c:31
D3DXMATRIX transform
Definition: skin.c:29
DWORD num_influences
Definition: skin.c:30
struct bone * bones
Definition: skin.c:44
ID3DXSkinInfo ID3DXSkinInfo_iface
Definition: skin.c:37
DWORD fvf
Definition: skin.c:40
LONG ref
Definition: skin.c:38
DWORD num_vertices
Definition: skin.c:42
D3DVERTEXELEMENT9 vertex_declaration[MAX_FVF_DECL_SIZE]
Definition: skin.c:41
DWORD num_bones
Definition: skin.c:43
Definition: name.c:39
float FLOAT
Definition: typedefs.h:69
#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