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

Go to the source code of this file.

Classes

struct  bone
 
struct  d3dx9_skin_info
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (d3dx)
 
static struct d3dx9_skin_info * impl_from_ID3DXSkinInfo (ID3DXSkinInfo *iface)
 
static HRESULT WINAPI d3dx9_skin_info_QueryInterface (ID3DXSkinInfo *iface, REFIID riid, void **out)
 
static ULONG WINAPI d3dx9_skin_info_AddRef (ID3DXSkinInfo *iface)
 
static ULONG WINAPI d3dx9_skin_info_Release (ID3DXSkinInfo *iface)
 
static HRESULT WINAPI d3dx9_skin_info_SetBoneInfluence (ID3DXSkinInfo *iface, DWORD bone_num, DWORD num_influences, const DWORD *vertices, const float *weights)
 
static HRESULT WINAPI d3dx9_skin_info_SetBoneVertexInfluence (ID3DXSkinInfo *iface, DWORD bone_idx, DWORD influence_idx, float weight)
 
static DWORD WINAPI d3dx9_skin_info_GetNumBoneInfluences (ID3DXSkinInfo *iface, DWORD bone_idx)
 
static HRESULT WINAPI d3dx9_skin_info_GetBoneInfluence (ID3DXSkinInfo *iface, DWORD bone_idx, DWORD *vertices, float *weights)
 
static HRESULT WINAPI d3dx9_skin_info_GetBoneVertexInfluence (ID3DXSkinInfo *iface, DWORD bone_idx, DWORD influence_idx, float *weight, DWORD *vertex_idx)
 
static HRESULT WINAPI d3dx9_skin_info_GetMaxVertexInfluences (ID3DXSkinInfo *iface, DWORD *max_vertex_influences)
 
static DWORD WINAPI d3dx9_skin_info_GetNumBones (ID3DXSkinInfo *iface)
 
static HRESULT WINAPI d3dx9_skin_info_FindBoneVertexInfluenceIndex (ID3DXSkinInfo *iface, DWORD bone_idx, DWORD vertex_idx, DWORD *influence_idx)
 
static HRESULT WINAPI d3dx9_skin_info_GetMaxFaceInfluences (struct ID3DXSkinInfo *iface, struct IDirect3DIndexBuffer9 *index_buffer, DWORD face_count, DWORD *max_face_influences)
 
static HRESULT WINAPI d3dx9_skin_info_SetMinBoneInfluence (ID3DXSkinInfo *iface, float min_influence)
 
static float WINAPI d3dx9_skin_info_GetMinBoneInfluence (ID3DXSkinInfo *iface)
 
static HRESULT WINAPI d3dx9_skin_info_SetBoneName (ID3DXSkinInfo *iface, DWORD bone_idx, const char *name)
 
static const char *WINAPI d3dx9_skin_info_GetBoneName (ID3DXSkinInfo *iface, DWORD bone_idx)
 
static HRESULT WINAPI d3dx9_skin_info_SetBoneOffsetMatrix (ID3DXSkinInfo *iface, DWORD bone_idx, const D3DXMATRIX *bone_transform)
 
static D3DXMATRIX *WINAPI d3dx9_skin_info_GetBoneOffsetMatrix (ID3DXSkinInfo *iface, DWORD bone_idx)
 
static HRESULT WINAPI d3dx9_skin_info_Clone (ID3DXSkinInfo *iface, ID3DXSkinInfo **skin_info)
 
static HRESULT WINAPI d3dx9_skin_info_Remap (ID3DXSkinInfo *iface, DWORD vertex_count, DWORD *vertex_remap)
 
static HRESULT WINAPI d3dx9_skin_info_SetFVF (ID3DXSkinInfo *iface, DWORD fvf)
 
static HRESULT WINAPI d3dx9_skin_info_SetDeclaration (ID3DXSkinInfo *iface, const D3DVERTEXELEMENT9 *declaration)
 
static DWORD WINAPI d3dx9_skin_info_GetFVF (ID3DXSkinInfo *iface)
 
static HRESULT WINAPI d3dx9_skin_info_GetDeclaration (ID3DXSkinInfo *iface, D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE])
 
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)
 
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)
 
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)
 
HRESULT WINAPI D3DXCreateSkinInfo (DWORD vertex_count, const D3DVERTEXELEMENT9 *declaration, DWORD bone_count, ID3DXSkinInfo **skin_info)
 
HRESULT WINAPI D3DXCreateSkinInfoFVF (DWORD vertex_count, DWORD fvf, DWORD bone_count, ID3DXSkinInfo **skin_info)
 

Variables

static const struct ID3DXSkinInfoVtbl d3dx9_skin_info_vtbl
 

Function Documentation

◆ d3dx9_skin_info_AddRef()

static ULONG WINAPI d3dx9_skin_info_AddRef ( ID3DXSkinInfo *  iface)
static

Definition at line 68 of file skin.c.

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}
#define InterlockedIncrement
Definition: armddk.h:53
static struct d3dx9_skin_info * impl_from_ID3DXSkinInfo(ID3DXSkinInfo *iface)
Definition: skin.c:47
#define TRACE(s)
Definition: solgame.cpp:4
LONG ref
Definition: skin.c:38
uint32_t ULONG
Definition: typedefs.h:59

◆ d3dx9_skin_info_Clone()

static HRESULT WINAPI d3dx9_skin_info_Clone ( ID3DXSkinInfo *  iface,
ID3DXSkinInfo **  skin_info 
)
static

Definition at line 296 of file skin.c.

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}
HRESULT hr
Definition: delayimp.cpp:582
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
ULONG Release()
#define FAILED(hr)
Definition: intsafe.h:51
HRESULT WINAPI D3DXCreateSkinInfo(DWORD vertex_count, const D3DVERTEXELEMENT9 *declaration, DWORD bone_count, ID3DXSkinInfo **skin_info)
Definition: skin.c:463
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
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

◆ d3dx9_skin_info_ConvertToBlendedMesh()

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 
)
static

Definition at line 405 of file skin.c.

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}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ d3dx9_skin_info_ConvertToIndexedBlendedMesh()

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 
)
static

Definition at line 418 of file skin.c.

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}
static unsigned int palette_size(DWORD flags)
Definition: palette.c:239

◆ d3dx9_skin_info_FindBoneVertexInfluenceIndex()

static HRESULT WINAPI d3dx9_skin_info_FindBoneVertexInfluenceIndex ( ID3DXSkinInfo *  iface,
DWORD  bone_idx,
DWORD  vertex_idx,
DWORD *  influence_idx 
)
static

Definition at line 207 of file skin.c.

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}

◆ d3dx9_skin_info_GetBoneInfluence()

static HRESULT WINAPI d3dx9_skin_info_GetBoneInfluence ( ID3DXSkinInfo *  iface,
DWORD  bone_idx,
DWORD *  vertices,
float *  weights 
)
static

Definition at line 159 of file skin.c.

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}
#define D3DERR_INVALIDCALL
Definition: d3d10_private.h:42
#define D3D_OK
Definition: d3d.h:106
const GLbyte * weights
Definition: glext.h:6523
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878

◆ d3dx9_skin_info_GetBoneName()

static const char *WINAPI d3dx9_skin_info_GetBoneName ( ID3DXSkinInfo *  iface,
DWORD  bone_idx 
)
static

Definition at line 258 of file skin.c.

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}
#define NULL
Definition: types.h:112

◆ d3dx9_skin_info_GetBoneOffsetMatrix()

static D3DXMATRIX *WINAPI d3dx9_skin_info_GetBoneOffsetMatrix ( ID3DXSkinInfo *  iface,
DWORD  bone_idx 
)
static

Definition at line 284 of file skin.c.

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}

◆ d3dx9_skin_info_GetBoneVertexInfluence()

static HRESULT WINAPI d3dx9_skin_info_GetBoneVertexInfluence ( ID3DXSkinInfo *  iface,
DWORD  bone_idx,
DWORD  influence_idx,
float *  weight,
DWORD *  vertex_idx 
)
static

Definition at line 182 of file skin.c.

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}
weight
Definition: sortkey.c:157

◆ d3dx9_skin_info_GetDeclaration()

static HRESULT WINAPI d3dx9_skin_info_GetDeclaration ( ID3DXSkinInfo *  iface,
D3DVERTEXELEMENT9  declaration[MAX_FVF_DECL_SIZE] 
)
static

Definition at line 383 of file skin.c.

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}
GLuint GLuint GLsizei count
Definition: gl.h:1545
unsigned int UINT
Definition: sysinfo.c:13

◆ d3dx9_skin_info_GetFVF()

static DWORD WINAPI d3dx9_skin_info_GetFVF ( ID3DXSkinInfo *  iface)
static

Definition at line 374 of file skin.c.

375{
376 struct d3dx9_skin_info *skin = impl_from_ID3DXSkinInfo(iface);
377
378 TRACE("iface %p.\n", iface);
379
380 return skin->fvf;
381}
DWORD fvf
Definition: skin.c:40

◆ d3dx9_skin_info_GetMaxFaceInfluences()

static HRESULT WINAPI d3dx9_skin_info_GetMaxFaceInfluences ( struct ID3DXSkinInfo *  iface,
struct IDirect3DIndexBuffer9 *  index_buffer,
DWORD  face_count,
DWORD *  max_face_influences 
)
static

Definition at line 216 of file skin.c.

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}
int face_count
Definition: d3drm.c:3529

◆ d3dx9_skin_info_GetMaxVertexInfluences()

static HRESULT WINAPI d3dx9_skin_info_GetMaxVertexInfluences ( ID3DXSkinInfo *  iface,
DWORD *  max_vertex_influences 
)
static

Definition at line 191 of file skin.c.

192{
193 FIXME("iface %p, max_vertex_influences %p stub!\n", iface, max_vertex_influences);
194
195 return E_NOTIMPL;
196}

◆ d3dx9_skin_info_GetMinBoneInfluence()

static float WINAPI d3dx9_skin_info_GetMinBoneInfluence ( ID3DXSkinInfo *  iface)
static

Definition at line 232 of file skin.c.

233{
234 FIXME("iface %p stub!\n", iface);
235
236 return 0.0f;
237}

◆ d3dx9_skin_info_GetNumBoneInfluences()

static DWORD WINAPI d3dx9_skin_info_GetNumBoneInfluences ( ID3DXSkinInfo *  iface,
DWORD  bone_idx 
)
static

Definition at line 147 of file skin.c.

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}

◆ d3dx9_skin_info_GetNumBones()

static DWORD WINAPI d3dx9_skin_info_GetNumBones ( ID3DXSkinInfo *  iface)
static

Definition at line 198 of file skin.c.

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}

◆ d3dx9_skin_info_QueryInterface()

static HRESULT WINAPI d3dx9_skin_info_QueryInterface ( ID3DXSkinInfo *  iface,
REFIID  riid,
void **  out 
)
static

Definition at line 52 of file skin.c.

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}
#define WARN(fmt,...)
Definition: precomp.h:61
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_skin_info_Release()

static ULONG WINAPI d3dx9_skin_info_Release ( ID3DXSkinInfo *  iface)
static

Definition at line 78 of file skin.c.

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}
#define InterlockedDecrement
Definition: armddk.h:52
#define free
Definition: debug_ros.c:5
unsigned long DWORD
Definition: ntddk_ex.h:95

◆ d3dx9_skin_info_Remap()

static HRESULT WINAPI d3dx9_skin_info_Remap ( ID3DXSkinInfo *  iface,
DWORD  vertex_count,
DWORD *  vertex_remap 
)
static

Definition at line 327 of file skin.c.

328{
329 FIXME("iface %p, vertex_count %lu, vertex_remap %p stub!\n", iface, vertex_count, vertex_remap);
330
331 return E_NOTIMPL;
332}
int vertex_count
Definition: d3drm.c:3528

◆ d3dx9_skin_info_SetBoneInfluence()

static HRESULT WINAPI d3dx9_skin_info_SetBoneInfluence ( ID3DXSkinInfo *  iface,
DWORD  bone_num,
DWORD  num_influences,
const DWORD *  vertices,
const float *  weights 
)
static

Definition at line 102 of file skin.c.

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}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define malloc
Definition: debug_ros.c:4
float FLOAT
Definition: typedefs.h:69

◆ d3dx9_skin_info_SetBoneName()

static HRESULT WINAPI d3dx9_skin_info_SetBoneName ( ID3DXSkinInfo *  iface,
DWORD  bone_idx,
const char *  name 
)
static

Definition at line 239 of file skin.c.

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}
static char * strdup(const char *buf)
Definition: string.h:83
#define debugstr_a
Definition: kernel32.h:31
Definition: name.c:39

◆ d3dx9_skin_info_SetBoneOffsetMatrix()

static HRESULT WINAPI d3dx9_skin_info_SetBoneOffsetMatrix ( ID3DXSkinInfo *  iface,
DWORD  bone_idx,
const D3DXMATRIX *  bone_transform 
)
static

Definition at line 270 of file skin.c.

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}

◆ d3dx9_skin_info_SetBoneVertexInfluence()

static HRESULT WINAPI d3dx9_skin_info_SetBoneVertexInfluence ( ID3DXSkinInfo *  iface,
DWORD  bone_idx,
DWORD  influence_idx,
float  weight 
)
static

Definition at line 138 of file skin.c.

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}

◆ d3dx9_skin_info_SetDeclaration()

static HRESULT WINAPI d3dx9_skin_info_SetDeclaration ( ID3DXSkinInfo *  iface,
const D3DVERTEXELEMENT9 *  declaration 
)
static

Definition at line 347 of file skin.c.

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}
HRESULT WINAPI D3DXFVFFromDeclarator(const D3DVERTEXELEMENT9 *declaration, DWORD *fvf)
Definition: mesh.c:2132
static IStream Stream
Definition: htmldoc.c:1115

Referenced by D3DXCreateSkinInfo().

◆ d3dx9_skin_info_SetFVF()

static HRESULT WINAPI d3dx9_skin_info_SetFVF ( ID3DXSkinInfo *  iface,
DWORD  fvf 
)
static

Definition at line 334 of file skin.c.

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}
HRESULT WINAPI D3DXDeclaratorFromFVF(DWORD fvf, D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE])
Definition: mesh.c:2034
@ MAX_FVF_DECL_SIZE
Definition: d3dx9mesh.h:41

◆ d3dx9_skin_info_SetMinBoneInfluence()

static HRESULT WINAPI d3dx9_skin_info_SetMinBoneInfluence ( ID3DXSkinInfo *  iface,
float  min_influence 
)
static

Definition at line 225 of file skin.c.

226{
227 FIXME("iface %p, min_influence %.8e stub!\n", iface, min_influence);
228
229 return E_NOTIMPL;
230}

◆ d3dx9_skin_info_UpdateSkinnedMesh()

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 
)
static

Definition at line 396 of file skin.c.

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}

◆ D3DXCreateSkinInfo()

HRESULT WINAPI D3DXCreateSkinInfo ( DWORD  vertex_count,
const D3DVERTEXELEMENT9 *  declaration,
DWORD  bone_count,
ID3DXSkinInfo **  skin_info 
)

Definition at line 463 of file skin.c.

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}
#define D3DDECL_END()
Definition: d3d9types.h:329
#define error(str)
Definition: mkdosfs.c:1605
#define calloc
Definition: rosglue.h:14
static const struct ID3DXSkinInfoVtbl d3dx9_skin_info_vtbl
Definition: skin.c:432
static HRESULT WINAPI d3dx9_skin_info_SetDeclaration(ID3DXSkinInfo *iface, const D3DVERTEXELEMENT9 *declaration)
Definition: skin.c:347

Referenced by d3dx9_skin_info_Clone(), D3DXCreateSkinInfoFVF(), and test_create_skin_info().

◆ D3DXCreateSkinInfoFVF()

HRESULT WINAPI D3DXCreateSkinInfoFVF ( DWORD  vertex_count,
DWORD  fvf,
DWORD  bone_count,
ID3DXSkinInfo **  skin_info 
)

Definition at line 505 of file skin.c.

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}

Referenced by parse_mesh(), parse_skin_mesh_header(), and test_create_skin_info().

◆ impl_from_ID3DXSkinInfo()

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( d3dx  )

Variable Documentation

◆ d3dx9_skin_info_vtbl

const struct ID3DXSkinInfoVtbl d3dx9_skin_info_vtbl
static
Initial value:
=
{
}
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
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 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 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 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

Definition at line 432 of file skin.c.

Referenced by D3DXCreateSkinInfo().