1 //****************************************************************************//
2 // cal3d_wrapper.h                                                            //
3 // Copyright (C) 2002 Bruno 'Beosil' Heidelberger                             //
4 //****************************************************************************//
5 // This library is free software; you can redistribute it and/or modify it    //
6 // under the terms of the GNU Lesser General Public License as published by   //
7 // the Free Software Foundation; either version 2.1 of the License, or (at    //
8 // your option) any later version.                                            //
9 //****************************************************************************//
10 
11 #ifndef CAL_CAL3D_WRAPPER_H
12 #define CAL_CAL3D_WRAPPER_H
13 
14 #ifdef __cplusplus
15 #include "cal3d/global.h"
16 #endif
17 
18 //****************************************************************************//
19 // Defines for Win32 and MingW32                                              //
20 //****************************************************************************//
21 
22 #ifdef _WIN32
23 
24 #ifdef __MINGW32__
25 
26 #define CAL3D_WRAPPER_API
27 
28 #else
29 
30 #pragma warning(disable : 4251)
31 #pragma warning(disable : 4786)
32 #pragma warning(disable : 4099)
33 
34 #ifdef CAL3D_WRAPPER_EXPORTS
35 #define CAL3D_WRAPPER_API __declspec(dllexport)
36 #else
37 #define CAL3D_WRAPPER_API __declspec(dllimport)
38 #endif
39 
40 #endif
41 
42 #else
43 
44 //****************************************************************************//
45 // Defines for Linux, Cygwin, FreeBSD Sun and Mips...                         //
46 //****************************************************************************//
47 
48 #define CAL3D_WRAPPER_API
49 
50 #endif
51 
52 //****************************************************************************//
53 // Forward declarations                                                       //
54 //****************************************************************************//
55 
56 #ifndef CAL3D_WRAPPER_EXPORTS
57 
58 struct CalAnimation;
59 struct CalAnimationAction;
60 struct CalAnimationCycle;
61 struct CalBone;
62 struct CalCoreAnimation;
63 struct CalCoreMorphAnimation;
64 struct CalCoreBone;
65 struct CalCoreKeyframe;
66 struct CalCoreMaterial;
67 struct CalCoreMesh;
68 struct CalCoreModel;
69 struct CalCoreSkeleton;
70 struct CalCoreSubmesh;
71 struct CalCoreTrack;
72 struct CalLoader;
73 struct CalMatrix;
74 struct CalMesh;
75 struct CalMixer;
76 struct CalMorphTargetMixer;
77 struct CalModel;
78 struct CalPhysique;
79 struct CalPlatform;
80 struct CalQuaternion;
81 struct CalRenderer;
82 struct CalSaver;
83 struct CalSkeleton;
84 struct CalSpringSystem;
85 struct CalSubmesh;
86 struct CalVector;
87 
88 #ifndef __cplusplus
89 typedef int CalIndex;
90 #endif
91 
92 #endif
93 
94 
95 
96 typedef void *CalUserData;
97 
98 //****************************************************************************//
99 // Substitute for the C++ 'bool' type                                         //
100 //****************************************************************************//
101 
102 #undef True
103 #undef False
104 
105 enum Boolean
106 {
107   False = 0,
108   True = 1
109 };
110 
111 //****************************************************************************//
112 // "C" wrapper functions declaration                                          //
113 //****************************************************************************//
114 
115 #ifdef __cplusplus
116 extern "C"
117 {
118 #endif
119 
120 //****************************************************************************//
121 // CalAnimation wrapper functions declaration                                 //
122 //****************************************************************************//
123 
124   CAL3D_WRAPPER_API enum CalAnimationType
125   {
126     ANIMATION_TYPE_NONE = 0,
127     ANIMATION_TYPE_CYCLE,
128     ANIMATION_TYPE_POSE,
129     ANIMATION_TYPE_ACTION
130   };
131 
132   CAL3D_WRAPPER_API enum CalAnimationState
133   {
134     ANIMATION_STATE_NONE = 0,
135     ANIMATION_STATE_SYNC,
136     ANIMATION_STATE_ASYNC,
137     ANIMATION_STATE_IN,
138     ANIMATION_STATE_STEADY,
139     ANIMATION_STATE_OUT
140   };
141 
142   CAL3D_WRAPPER_API void CalAnimation_Delete(struct CalAnimation *self);
143   CAL3D_WRAPPER_API struct CalCoreAnimation *CalAnimation_GetCoreAnimation(struct CalAnimation *self);
144   CAL3D_WRAPPER_API enum CalAnimationState CalAnimation_GetState(struct CalAnimation *self);
145   CAL3D_WRAPPER_API float CalAnimation_GetTime(struct CalAnimation *self);
146   CAL3D_WRAPPER_API enum CalAnimationType CalAnimation_GetType(struct CalAnimation *self);
147   CAL3D_WRAPPER_API float CalAnimation_GetWeight(struct CalAnimation *self);
148 
149 //****************************************************************************//
150 // CalAnimationAction wrapper functions declaration                           //
151 //****************************************************************************//
152 
153   CAL3D_WRAPPER_API void CalAnimationAction_Delete(struct CalAnimationAction *self);
154   CAL3D_WRAPPER_API enum Boolean CalAnimationAction_Execute(struct CalAnimationAction *self, float delayIn, float delayOut);
155   CAL3D_WRAPPER_API struct CalAnimationAction *CalAnimationAction_New(struct CalCoreAnimation *pCoreAnimation);
156   CAL3D_WRAPPER_API enum Boolean CalAnimationAction_Update(struct CalAnimationAction *self, float deltaTime);
157   CAL3D_WRAPPER_API void CalCoreAnimation_Scale(struct CalCoreAnimation *self, float factor);
158 
159 //****************************************************************************//
160 // CalAnimationCycle wrapper functions declaration                            //
161 //****************************************************************************//
162 
163   CAL3D_WRAPPER_API enum Boolean CalAnimationCycle_Blend(struct CalAnimationCycle *self, float weight, float delay);
164   CAL3D_WRAPPER_API void CalAnimationCycle_Delete(struct CalAnimationCycle *self);
165   CAL3D_WRAPPER_API struct CalAnimationCycle *CalAnimationCycle_New(struct CalCoreAnimation *pCoreAnimation);
166   CAL3D_WRAPPER_API void CalAnimationCycle_SetAsync(struct CalAnimationCycle *self, float time, float duration);
167   CAL3D_WRAPPER_API enum Boolean CalAnimationCycle_Update(struct CalAnimationCycle *self, float deltaTime);
168 
169 //****************************************************************************//
170 // CalBone wrapper functions declaration                                      //
171 //****************************************************************************//
172 
173   CAL3D_WRAPPER_API void CalBone_BlendState(struct CalBone *self, float weight, struct CalVector *pTranslation, struct CalQuaternion *pRotation);
174   CAL3D_WRAPPER_API void CalBone_CalculateState(struct CalBone *self);
175   CAL3D_WRAPPER_API void CalBone_ClearState(struct CalBone *self);
176   CAL3D_WRAPPER_API void CalBone_Delete(struct CalBone *self);
177   CAL3D_WRAPPER_API struct CalCoreBone *CalBone_GetCoreBone(struct CalBone *self);
178   CAL3D_WRAPPER_API struct CalQuaternion *CalBone_GetRotation(struct CalBone *self);
179   CAL3D_WRAPPER_API struct CalQuaternion *CalBone_GetRotationAbsolute(struct CalBone *self);
180   CAL3D_WRAPPER_API struct CalQuaternion *CalBone_GetRotationBoneSpace(struct CalBone *self);
181   CAL3D_WRAPPER_API struct CalVector *CalBone_GetTranslation(struct CalBone *self);
182   CAL3D_WRAPPER_API struct CalVector *CalBone_GetTranslationAbsolute(struct CalBone *self);
183   CAL3D_WRAPPER_API struct CalVector *CalBone_GetTranslationBoneSpace(struct CalBone *self);
184   CAL3D_WRAPPER_API void CalBone_LockState(struct CalBone *self);
185   CAL3D_WRAPPER_API struct CalBone *CalBone_New(struct CalCoreBone* coreBone);
186   CAL3D_WRAPPER_API void CalBone_SetSkeleton(struct CalBone *self, struct CalSkeleton *pSkeleton);
187   CAL3D_WRAPPER_API void CalBone_SetTranslation(struct CalBone *self, struct CalVector *pTranslation);
188   CAL3D_WRAPPER_API void CalBone_SetRotation(struct CalBone *self, struct CalQuaternion *pRotation);
189   CAL3D_WRAPPER_API void CalBone_SetCoreState(struct CalBone *self);
190   CAL3D_WRAPPER_API void CalBone_SetCoreStateRecursive(struct CalBone *self);
191 
192 
193 //****************************************************************************//
194 // CalCoreAnimation wrapper functions declaration                             //
195 //****************************************************************************//
196 
197   CAL3D_WRAPPER_API struct CalCoreAnimation *CalCoreAnimation_New();
198   CAL3D_WRAPPER_API void CalCoreAnimation_Delete(struct CalCoreAnimation* self);
199 
200   CAL3D_WRAPPER_API float CalCoreAnimation_GetDuration(struct CalCoreAnimation *self);
201   CAL3D_WRAPPER_API void CalCoreAnimation_SetDuration(struct CalCoreAnimation *self, float duration);
202   CAL3D_WRAPPER_API void CalCoreAnimation_Scale(struct CalCoreAnimation *self, float factor);
203 
204 //****************************************************************************//
205 // CalCoreMorphAnimation wrapper functions declaration                             //
206 //****************************************************************************//
207 
208   CAL3D_WRAPPER_API struct CalCoreMorphAnimation *CalCoreMorphAnimation_New();
209   CAL3D_WRAPPER_API void CalCoreMorphAnimation_Delete(struct CalCoreMorphAnimation* self);
210   CAL3D_WRAPPER_API enum Boolean CalCoreMorphAnimation_AddMorphTarget(struct CalCoreMorphAnimation* self, int meshID, int morphID);
211 
212 //****************************************************************************//
213 // CalCoreBone wrapper functions declaration                                  //
214 //****************************************************************************//
215 
216   CAL3D_WRAPPER_API enum Boolean CalCoreBone_AddChildId(struct CalCoreBone *self, int childId);
217   CAL3D_WRAPPER_API void CalCoreBone_CalculateState(struct CalCoreBone *self);
218   CAL3D_WRAPPER_API void CalCoreBone_Delete(struct CalCoreBone *self);
219 //  CAL3D_WRAPPER_API std::list<int>& CalCoreBone_GetListChildId(struct CalCoreBone *self);
220   CAL3D_WRAPPER_API char *CalCoreBone_GetName(struct CalCoreBone *self);
221   CAL3D_WRAPPER_API int CalCoreBone_GetParentId(struct CalCoreBone *self);
222   CAL3D_WRAPPER_API struct CalQuaternion *CalCoreBone_GetRotation(struct CalCoreBone *self);
223   CAL3D_WRAPPER_API struct CalQuaternion *CalCoreBone_GetRotationAbsolute(struct CalCoreBone *self);
224   CAL3D_WRAPPER_API struct CalQuaternion *CalCoreBone_GetRotationBoneSpace(struct CalCoreBone *self);
225   CAL3D_WRAPPER_API struct CalVector *CalCoreBone_GetTranslation(struct CalCoreBone *self);
226   CAL3D_WRAPPER_API struct CalVector *CalCoreBone_GetTranslationAbsolute(struct CalCoreBone *self);
227   CAL3D_WRAPPER_API struct CalVector *CalCoreBone_GetTranslationBoneSpace(struct CalCoreBone *self);
228   CAL3D_WRAPPER_API CalUserData CalCoreBone_GetUserData(struct CalCoreBone *self);
229   CAL3D_WRAPPER_API struct CalCoreBone *CalCoreBone_New(const char* name);
230   CAL3D_WRAPPER_API void CalCoreBone_SetCoreSkeleton(struct CalCoreBone *self, struct CalCoreSkeleton *pCoreSkeleton);
231   CAL3D_WRAPPER_API void CalCoreBone_SetParentId(struct CalCoreBone *self, int parentId);
232   CAL3D_WRAPPER_API void CalCoreBone_SetRotation(struct CalCoreBone *self, struct CalQuaternion *pRotation);
233   CAL3D_WRAPPER_API void CalCoreBone_SetRotationBoneSpace(struct CalCoreBone *self, struct CalQuaternion *pRotation);
234   CAL3D_WRAPPER_API void CalCoreBone_SetTranslation(struct CalCoreBone *self, struct CalVector *pTranslation);
235   CAL3D_WRAPPER_API void CalCoreBone_SetTranslationBoneSpace(struct CalCoreBone *self, struct CalVector *pTranslation);
236   CAL3D_WRAPPER_API void CalCoreBone_SetUserData(struct CalCoreBone *self, CalUserData userData);
237 
238 //****************************************************************************//
239 // CalCoreMaterial wrapper functions declaration                              //
240 //****************************************************************************//
241 
242   CAL3D_WRAPPER_API struct CalCoreMaterial *CalCoreMaterial_New();
243   CAL3D_WRAPPER_API void CalCoreMaterial_Delete(struct CalCoreMaterial *self);
244 
245 //  CAL3D_WRAPPER_API CalCoreMaterial::Color *CalCoreMaterial_GetAmbientColor(struct CalCoreMaterial *self);
246 //  CAL3D_WRAPPER_API CalCoreMaterial::Color *CalCoreMaterial_GetDiffuseColor(struct CalCoreMaterial *self);
247   CAL3D_WRAPPER_API int CalCoreMaterial_GetMapCount(struct CalCoreMaterial *self);
248   CAL3D_WRAPPER_API char *CalCoreMaterial_GetMapFilename(struct CalCoreMaterial *self, int mapId);
249   CAL3D_WRAPPER_API CalUserData CalCoreMaterial_GetMapUserData(struct CalCoreMaterial *self, int mapId);
250   CAL3D_WRAPPER_API float CalCoreMaterial_GetShininess(struct CalCoreMaterial *self);
251 //  CAL3D_WRAPPER_API CalCoreMaterial::Color *CalCoreMaterial_GetSpecularColor(struct CalCoreMaterial *self);
252   CAL3D_WRAPPER_API CalUserData CalCoreMaterial_GetUserData(struct CalCoreMaterial *self);
253 //  CAL3D_WRAPPER_API std::vector<Map>& CalCoreMaterial_GetVectorMap(struct CalCoreMaterial *self);
254   CAL3D_WRAPPER_API enum Boolean CalCoreMaterial_Reserve(struct CalCoreMaterial *self, int mapCount);
255 //  CAL3D_WRAPPER_API void CalCoreMaterial_SetAmbientColor(struct CalCoreMaterial *self, struct CalCoreMaterial::Color *pAmbientColor);
256 //  CAL3D_WRAPPER_API void CalCoreMaterial_SetDiffuseColor(struct CalCoreMaterial *self, struct CalCoreMaterial::Color *pDiffuseColor);
257 //  CAL3D_WRAPPER_API enum Boolean CalCoreMaterial_SetMap(struct CalCoreMaterial *self, int mapId, struct CalCoreMaterial::Map *pMap);
258   CAL3D_WRAPPER_API enum Boolean CalCoreMaterial_SetMapUserData(struct CalCoreMaterial *self, int mapId, CalUserData userData);
259   CAL3D_WRAPPER_API void CalCoreMaterial_SetShininess(struct CalCoreMaterial *self, float shininess);
260 //  CAL3D_WRAPPER_API void CalCoreMaterial_SetSpecularColor(struct CalCoreMaterial *self, struct CalCoreMaterial::Color *pSpecularColor);
261   CAL3D_WRAPPER_API void CalCoreMaterial_SetUserData(struct CalCoreMaterial *self, CalUserData userData);
262 
263 //****************************************************************************//
264 // CalCoreMesh wrapper functions declaration                                  //
265 //****************************************************************************//
266 
267   CAL3D_WRAPPER_API struct CalCoreMesh *CalCoreMesh_New();
268   CAL3D_WRAPPER_API void CalCoreMesh_Delete(struct CalCoreMesh *self);
269 
270   CAL3D_WRAPPER_API int CalCoreMesh_AddCoreSubmesh(struct CalCoreMesh *self, struct CalCoreSubmesh *pCoreSubmesh);
271   CAL3D_WRAPPER_API struct CalCoreSubmesh *CalCoreMesh_GetCoreSubmesh(struct CalCoreMesh *self, int id);
272   CAL3D_WRAPPER_API int CalCoreMesh_GetCoreSubmeshCount(struct CalCoreMesh *self);
273 //  CAL3D_WRAPPER_API std::vector<CalCoreSubmesh *>& CalCoreMesh_GetVectorCoreSubmesh(struct CalCoreMesh *self);
274   CAL3D_WRAPPER_API void CalCoreMesh_Scale(struct CalCoreMesh *self,float factor);
275   CAL3D_WRAPPER_API int CalCoreMesh_AddAsMorphTarget(struct CalCoreMesh *self, struct CalCoreMesh *target);
276 
277 //****************************************************************************//
278 // CalCoreModel wrapper functions declaration                                 //
279 //****************************************************************************//
280 
281   CAL3D_WRAPPER_API int CalCoreModel_AddCoreAnimation(struct CalCoreModel *self, struct  CalCoreAnimation *pCoreAnimation);
282   CAL3D_WRAPPER_API int CalCoreModel_AddCoreMorphAnimation(struct CalCoreModel *self, struct  CalCoreMorphAnimation *pCoreAnimation);
283   CAL3D_WRAPPER_API int CalCoreModel_AddCoreMaterial(struct CalCoreModel *self, struct CalCoreMaterial *pCoreMaterial);
284   CAL3D_WRAPPER_API int CalCoreModel_AddCoreMesh(struct CalCoreModel *self, struct CalCoreMesh *pCoreMesh);
285   CAL3D_WRAPPER_API enum Boolean CalCoreModel_CreateCoreMaterialThread(struct CalCoreModel *self, int coreMaterialThreadId);
286   CAL3D_WRAPPER_API void CalCoreModel_Delete(struct CalCoreModel *self);
287   CAL3D_WRAPPER_API struct CalCoreAnimation *CalCoreModel_GetCoreAnimation(struct CalCoreModel *self, int coreAnimationId);
288   CAL3D_WRAPPER_API int CalCoreModel_GetCoreAnimationCount(struct CalCoreModel *self);
289   CAL3D_WRAPPER_API struct CalCoreMaterial *CalCoreModel_GetCoreMaterial(struct CalCoreModel *self, int coreMaterialId);
290   CAL3D_WRAPPER_API int CalCoreModel_GetCoreMaterialCount(struct CalCoreModel *self);
291   CAL3D_WRAPPER_API int CalCoreModel_GetCoreMaterialId(struct CalCoreModel *self, int coreMaterialThreadId, int coreMaterialSetId);
292   CAL3D_WRAPPER_API struct CalCoreMesh *CalCoreModel_GetCoreMesh(struct CalCoreModel *self, int coreMeshId);
293   CAL3D_WRAPPER_API int CalCoreModel_GetCoreMeshCount(struct CalCoreModel *self);
294   CAL3D_WRAPPER_API struct CalCoreSkeleton *CalCoreModel_GetCoreSkeleton(struct CalCoreModel *self);
295   CAL3D_WRAPPER_API CalUserData CalCoreModel_GetUserData(struct CalCoreModel *self);
296   CAL3D_WRAPPER_API int CalCoreModel_GetCoreMorphAnimationCount(struct CalCoreModel *self);
297   CAL3D_WRAPPER_API int CalCoreModel_LoadCoreAnimation(struct CalCoreModel *self, char *strFilename);
298   CAL3D_WRAPPER_API int CalCoreModel_LoadCoreMaterial(struct CalCoreModel *self, char *strFilename);
299   CAL3D_WRAPPER_API int CalCoreModel_LoadCoreMesh(struct CalCoreModel *self, char *strFilename);
300   CAL3D_WRAPPER_API enum Boolean CalCoreModel_LoadCoreSkeleton(struct CalCoreModel *self, char *strFilename);
301   CAL3D_WRAPPER_API struct CalCoreModel *CalCoreModel_New(const char* name);
302   CAL3D_WRAPPER_API enum Boolean CalCoreModel_SaveCoreAnimation(struct CalCoreModel *self, char *strFilename, int coreAnimtionId);
303   CAL3D_WRAPPER_API enum Boolean CalCoreModel_SaveCoreMaterial(struct CalCoreModel *self, char *strFilename, int coreMaterialId);
304   CAL3D_WRAPPER_API enum Boolean CalCoreModel_SaveCoreMesh(struct CalCoreModel *self, char *strFilename, int coreMeshId);
305   CAL3D_WRAPPER_API enum Boolean CalCoreModel_SaveCoreSkeleton(struct CalCoreModel *self, char *strFilename);
306   CAL3D_WRAPPER_API enum Boolean CalCoreModel_SetCoreMaterialId(struct CalCoreModel *self, int coreMaterialThreadId, int coreMaterialSetId, int coreMaterialId);
307   CAL3D_WRAPPER_API void CalCoreModel_SetCoreSkeleton(struct CalCoreModel *self, struct CalCoreSkeleton *pCoreSkeleton);
308   CAL3D_WRAPPER_API void CalCoreModel_SetUserData(struct CalCoreModel *self, CalUserData userData);
309 
310 //****************************************************************************//
311 // CalCoreSkeleton wrapper functions declaration                              //
312 //****************************************************************************//
313 
314   CAL3D_WRAPPER_API struct CalCoreSkeleton *CalCoreSkeleton_New();
315   CAL3D_WRAPPER_API void CalCoreSkeleton_Delete(struct CalCoreSkeleton* self);
316 
317   CAL3D_WRAPPER_API int CalCoreSkeleton_AddCoreBone(struct CalCoreSkeleton *self, struct CalCoreBone *pCoreBone);
318   CAL3D_WRAPPER_API void CalCoreSkeleton_CalculateState(struct CalCoreSkeleton *self);
319 //  CAL3D_WRAPPER_API void CalCoreSkeleton_Delete(struct CalCoreSkeleton *self);
320   CAL3D_WRAPPER_API struct CalCoreBone *CalCoreSkeleton_GetCoreBone(struct CalCoreSkeleton *self, int coreBoneId);
321   CAL3D_WRAPPER_API int CalCoreSkeleton_GetCoreBoneId(struct CalCoreSkeleton *self, char *strName);
322 //  CAL3D_WRAPPER_API std::list<int>& CalCoreSkeleton_GetListRootCoreBoneId(struct CalCoreSkeleton *self);
323 //  CAL3D_WRAPPER_API std::vector<CalCoreBone *>& CalCoreSkeleton_GetVectorCoreBone(struct CalCoreSkeleton *self);
324   CAL3D_WRAPPER_API void CalCoreSkeleton_Scale(struct CalCoreSkeleton *self,float factor);
325   CAL3D_WRAPPER_API void CalSkeleton_GetBoneBoundingBox(struct CalSkeleton *self, float *min, float *max);
326   CAL3D_WRAPPER_API void CalSkeleton_CalculateBoundingBoxes(struct CalSkeleton *self);
327 
328 //****************************************************************************//
329 // CalCoreSubmesh wrapper functions declaration                               //
330 //****************************************************************************//
331 
332   CAL3D_WRAPPER_API void CalCoreSubmesh_Delete(struct CalCoreSubmesh *self);
333   CAL3D_WRAPPER_API int CalCoreSubmesh_GetCoreMaterialThreadId(struct CalCoreSubmesh *self);
334   CAL3D_WRAPPER_API int CalCoreSubmesh_GetFaceCount(struct CalCoreSubmesh *self);
335   CAL3D_WRAPPER_API int CalCoreSubmesh_GetLodCount(struct CalCoreSubmesh *self);
336   CAL3D_WRAPPER_API int CalCoreSubmesh_GetSpringCount(struct CalCoreSubmesh *self);
337 //  CAL3D_WRAPPER_API std::vector<CalCoreSubmesh::Face>& CalCoreSubmesh_GetVectorFace(struct CalCoreSubmesh *self);
338 //  CAL3D_WRAPPER_API std::vector<CalCoreSubmesh::PhysicalProperty>& CalCoreSubmesh_GetVectorPhysicalProperty(struct CalCoreSubmesh *self);
339 //  CAL3D_WRAPPER_API std::vector<CalCoreSubmesh::Spring>& CalCoreSubmesh_GetVectorSpring(struct CalCoreSubmesh *self);
340 //  CAL3D_WRAPPER_API std::vector<std::vector<CalCoreSubmesh::TextureCoordinate> >& CalCoreSubmesh_GetVectorVectorTextureCoordinate(struct CalCoreSubmesh *self);
341 //  CAL3D_WRAPPER_API std::vector<CalCoreSubmesh::Vertex>& CalCoreSubmesh_GetVectorVertex(struct CalCoreSubmesh *self);
342   CAL3D_WRAPPER_API int CalCoreSubmesh_GetVertexCount(struct CalCoreSubmesh *self);
343   CAL3D_WRAPPER_API struct CalCoreSubmesh *CalCoreSubmesh_New();
344   CAL3D_WRAPPER_API enum Boolean CalCoreSubmesh_Reserve(struct CalCoreSubmesh *self, int vertexCount, int textureCoordinateCount, int faceCount, int springCount);
345   CAL3D_WRAPPER_API void CalCoreSubmesh_SetCoreMaterialThreadId(struct CalCoreSubmesh *self, int coreMaterialThreadId);
346 //  CAL3D_WRAPPER_API enum Boolean CalCoreSubmesh_SetFace(struct CalCoreSubmesh *self, int faceId, struct CalCoreSubmesh::Face *pFace);
347   CAL3D_WRAPPER_API void CalCoreSubmesh_SetLodCount(struct CalCoreSubmesh *self, int lodCount);
348 //  CAL3D_WRAPPER_API enum Boolean CalCoreSubmesh_SetPhysicalProperty(struct CalCoreSubmesh *self, int vertexId, struct CalCoreSubmesh::PhysicalProperty *pPhysicalProperty);
349 //  CAL3D_WRAPPER_API enum Boolean CalCoreSubmesh_SetSpring(struct CalCoreSubmesh *self, int springId, struct CalCoreSubmesh::Spring *pSpring);
350 //  CAL3D_WRAPPER_API enum Boolean CalCoreSubmesh_SetTextureCoordinate(struct CalCoreSubmesh *self, int vertexId, int textureCoordinateId, struct CalCoreSubmesh::TextureCoordinate *pTextureCoordinate);
351 //  CAL3D_WRAPPER_API enum Boolean CalCoreSubmesh_SetVertex(struct CalCoreSubmesh *self, int vertexId, struct CalCoreSubmesh::Vertex *pVertex);
352 CAL3D_WRAPPER_API enum Boolean  CalCoreSubmesh_IsTangentsEnabled(struct CalCoreSubmesh *self, int mapId);
353 CAL3D_WRAPPER_API enum Boolean  CalCoreSubmesh_EnableTangents(struct CalCoreSubmesh *self, int mapId, enum Boolean enabled);
354 
355 //****************************************************************************//
356 // CalError wrapper functions declaration                                     //
357 //****************************************************************************//
358 
359   CAL3D_WRAPPER_API enum CalErrorCode
360   {
361     ERROR_CODE_OK = 0,
362     ERROR_CODE_INTERNAL,
363     ERROR_CODE_INVALID_HANDLE,
364     ERROR_CODE_MEMORY_ALLOCATION_FAILED,
365     ERROR_CODE_FILE_NOT_FOUND,
366     ERROR_CODE_INVALID_FILE_FORMAT,
367     ERROR_CODE_FILE_PARSER_FAILED,
368     ERROR_CODE_INDEX_BUILD_FAILED,
369     ERROR_CODE_NO_PARSER_DOCUMENT,
370     ERROR_CODE_INVALID_ANIMATION_DURATION,
371     ERROR_CODE_BONE_NOT_FOUND,
372     ERROR_CODE_INVALID_ATTRIBUTE_VALUE,
373     ERROR_CODE_INVALID_KEYFRAME_COUNT,
374     ERROR_CODE_INVALID_ANIMATION_TYPE,
375     ERROR_CODE_FILE_CREATION_FAILED,
376     ERROR_CODE_FILE_WRITING_FAILED,
377     ERROR_CODE_INCOMPATIBLE_FILE_VERSION,
378     ERROR_CODE_NO_MESH_IN_MODEL,
379     ERROR_CODE_MAX_ERROR_CODE
380   };
381 
382   CAL3D_WRAPPER_API enum CalErrorCode CalError_GetLastErrorCode();
383   CAL3D_WRAPPER_API char *CalError_GetLastErrorDescription();
384   CAL3D_WRAPPER_API char *CalError_GetLastErrorFile();
385   CAL3D_WRAPPER_API int CalError_GetLastErrorLine();
386   CAL3D_WRAPPER_API char *CalError_GetLastErrorText();
387   CAL3D_WRAPPER_API void CalError_PrintLastError();
388 //  CAL3D_WRAPPER_API void CalError_SetLastError(enum CalErrorCode code, char *strFile, int line, char *strText);
389 
390 //****************************************************************************//
391 // CalLoader wrapper functions declaration                                    //
392 //****************************************************************************//
393 
394   CAL3D_WRAPPER_API struct CalLoader *CalLoader_New();
395   CAL3D_WRAPPER_API void CalLoader_Delete(struct CalLoader *self);
396   CAL3D_WRAPPER_API struct CalCoreAnimation *CalLoader_LoadCoreAnimation(struct CalLoader *self, char *strFilename);
397   CAL3D_WRAPPER_API struct CalCoreMaterial *CalLoader_LoadCoreMaterial(struct CalLoader *self, char *strFilename);
398   CAL3D_WRAPPER_API struct CalCoreMesh *CalLoader_LoadCoreMesh(struct CalLoader *self, char *strFilename);
399   CAL3D_WRAPPER_API struct CalCoreSkeleton *CalLoader_LoadCoreSkeleton(struct CalLoader *self, char *strFilename);
400 
401 //****************************************************************************//
402 // CalMesh wrapper functions declaration                                      //
403 //****************************************************************************//
404 
405   CAL3D_WRAPPER_API void CalMesh_Delete(struct CalMesh *self);
406   CAL3D_WRAPPER_API struct CalCoreMesh *CalMesh_GetCoreMesh(struct CalMesh *self);
407   CAL3D_WRAPPER_API struct CalSubmesh *CalMesh_GetSubmesh(struct CalMesh *self, int id);
408   CAL3D_WRAPPER_API int CalMesh_GetSubmeshCount(struct CalMesh *self);
409 //  CAL3D_WRAPPER_API std::vector<CalSubmesh *>& CalMesh_GetVectorSubmesh(struct CalMesh *self);
410   CAL3D_WRAPPER_API struct CalMesh *CalMesh_New(struct CalCoreMesh *pCoreMesh);
411   CAL3D_WRAPPER_API void CalMesh_SetLodLevel(struct CalMesh *self, float lodLevel);
412   CAL3D_WRAPPER_API void CalMesh_SetMaterialSet(struct CalMesh *self, int setId);
413   CAL3D_WRAPPER_API void CalMesh_SetModel(struct CalMesh *self, struct CalModel *pModel);
414 
415 //****************************************************************************//
416 // CalMixer wrapper functions declaration                                     //
417 //****************************************************************************//
418 
419   CAL3D_WRAPPER_API enum Boolean CalMixer_BlendCycle(struct CalMixer *self, int id, float weight, float delay);
420   CAL3D_WRAPPER_API enum Boolean CalMixer_ClearCycle(struct CalMixer *self, int id, float delay);
421   CAL3D_WRAPPER_API void CalMixer_Delete(struct CalMixer *self);
422   CAL3D_WRAPPER_API enum Boolean CalMixer_ExecuteAction(struct CalMixer *self, int id, float delayIn, float delayOut, enum Boolean autoLock);
423   CAL3D_WRAPPER_API struct CalMixer *CalMixer_New(struct CalModel *pModel);
424   CAL3D_WRAPPER_API void CalMixer_UpdateAnimation(struct CalMixer *self, float deltaTime);
425   CAL3D_WRAPPER_API void CalMixer_UpdateSkeleton(struct CalMixer *self);
426   CAL3D_WRAPPER_API void CalMixer_RemoveAction(struct CalMixer *self,int id);
427 
428 //****************************************************************************//
429 // CalMorphTargetMixer wrapper functions declaration                          //
430 //****************************************************************************//
431 
432   CAL3D_WRAPPER_API enum Boolean CalMorphTargetMixer_Blend(struct CalMorphTargetMixer *self, int id, float weight, float delay);
433   CAL3D_WRAPPER_API enum Boolean CalMorphTargetMixer_Clear(struct CalMorphTargetMixer *self, int id, float delay);
434   CAL3D_WRAPPER_API void CalMorphTargetMixer_Delete(struct CalMorphTargetMixer *self);
435   CAL3D_WRAPPER_API struct CalMorphTargetMixer *CalMorphTargetMixer_New(struct CalModel *pModel);
436   CAL3D_WRAPPER_API void CalMorphTargetMixer_Update(struct CalMorphTargetMixer *self, float deltaTime);
437   CAL3D_WRAPPER_API int CalMorphTargetMixer_GetMorphTargetCount(struct CalMorphTargetMixer *self);
438 
439 //****************************************************************************//
440 // CalModel wrapper functions declaration                                     //
441 //****************************************************************************//
442 
443   CAL3D_WRAPPER_API enum Boolean CalModel_AttachMesh(struct CalModel *self, int coreMeshId);
444   CAL3D_WRAPPER_API void CalModel_Delete(struct CalModel *self);
445   CAL3D_WRAPPER_API enum Boolean CalModel_DetachMesh(struct CalModel *self, int coreMeshId);
446   CAL3D_WRAPPER_API struct CalCoreModel *CalModel_GetCoreModel(struct CalModel *self);
447   CAL3D_WRAPPER_API struct CalMesh *CalModel_GetMesh(struct CalModel *self, int coreMeshId);
448   CAL3D_WRAPPER_API struct CalMixer *CalModel_GetMixer(struct CalModel *self);
449   CAL3D_WRAPPER_API struct CalMorphTargetMixer *CalModel_GetMorphTargetMixer(struct CalModel *self);
450   CAL3D_WRAPPER_API struct CalPhysique *CalModel_GetPhysique(struct CalModel *self);
451   CAL3D_WRAPPER_API struct CalRenderer *CalModel_GetRenderer(struct CalModel *self);
452   CAL3D_WRAPPER_API struct CalSkeleton *CalModel_GetSkeleton(struct CalModel *self);
453   CAL3D_WRAPPER_API struct CalSpringSystem *CalModel_GetSpringSystem(struct CalModel *self);
454   CAL3D_WRAPPER_API CalUserData CalModel_GetUserData(struct CalModel *self);
455 //  CAL3D_WRAPPER_API std::vector<CalMesh *>& CalModel_GetVectorMesh(struct CalModel *self);
456   CAL3D_WRAPPER_API struct CalModel *CalModel_New(struct CalCoreModel* pCoreModel);
457   CAL3D_WRAPPER_API void CalModel_SetLodLevel(struct CalModel *self, float lodLevel);
458   CAL3D_WRAPPER_API void CalModel_SetMaterialSet(struct CalModel *self, int setId);
459   CAL3D_WRAPPER_API void CalModel_SetUserData(struct CalModel *self, CalUserData userData);
460   CAL3D_WRAPPER_API void CalModel_Update(struct CalModel *self, float deltaTime);
461 
462 //****************************************************************************//
463 // CalPhysique wrapper functions declaration                                  //
464 //****************************************************************************//
465 
466   CAL3D_WRAPPER_API int CalPhysique_CalculateNormals(struct CalPhysique *self, struct CalSubmesh *pSubmesh, float *pNormalBuffer);
467   CAL3D_WRAPPER_API int CalPhysique_CalculateVertices(struct CalPhysique *self, struct CalSubmesh *pSubmesh, float *pVertexBuffer);
468   CAL3D_WRAPPER_API int CalPhysique_CalculateVerticesAndNormals(struct CalPhysique *self, struct CalSubmesh *pSubmesh, float *pVertexBuffer);
469   CAL3D_WRAPPER_API int CalPhysique_CalculateVerticesNormalsAndTexCoords(struct CalPhysique *self, struct CalSubmesh *pSubmesh, float *pVertexBuffer, int NumTexCoords);
470   CAL3D_WRAPPER_API int CalPhysique_CalculateTangentSpaces(struct CalPhysique *self, struct CalSubmesh *pSubmesh, int mapId, float *pTangentSpaceBuffer);
471   CAL3D_WRAPPER_API void CalPhysique_Delete(struct CalPhysique *self);
472   CAL3D_WRAPPER_API struct CalPhysique *CalPhysique_New(struct CalModel* pModel);
473   CAL3D_WRAPPER_API void CalPhysique_Update(struct CalPhysique *self);
474 
475 //****************************************************************************//
476 // CalPlatform wrapper functions declaration                                  //
477 //****************************************************************************//
478 
479 //****************************************************************************//
480 // CalQuaternion wrapper functions declaration                                //
481 //****************************************************************************//
482 
483   CAL3D_WRAPPER_API void CalQuaternion_Blend(struct CalQuaternion *self, float d, struct CalQuaternion *pQ);
484   CAL3D_WRAPPER_API void CalQuaternion_Clear(struct CalQuaternion *self);
485   CAL3D_WRAPPER_API void CalQuaternion_Conjugate(struct CalQuaternion *self);
486   CAL3D_WRAPPER_API void CalQuaternion_Delete(struct CalQuaternion *self);
487   CAL3D_WRAPPER_API void CalQuaternion_Equal(struct CalQuaternion *self, struct CalQuaternion *pQ);
488   CAL3D_WRAPPER_API float *CalQuaternion_Get(struct CalQuaternion *self);
489   CAL3D_WRAPPER_API void CalQuaternion_Multiply(struct CalQuaternion *self, struct CalQuaternion *pQ);
490   CAL3D_WRAPPER_API void CalQuaternion_MultiplyVector(struct CalQuaternion *self, struct CalVector *pV);
491   CAL3D_WRAPPER_API struct CalQuaternion *CalQuaternion_New();
492   CAL3D_WRAPPER_API void CalQuaternion_Op_Multiply(struct CalQuaternion *pResult, struct CalQuaternion *pQ, struct CalQuaternion *pR);
493   CAL3D_WRAPPER_API void CalQuaternion_Set(struct CalQuaternion *self, float qx, float qy, float qz, float qw);
494 
495 //****************************************************************************//
496 // CalRenderer wrapper functions declaration                                  //
497 //****************************************************************************//
498 
499   CAL3D_WRAPPER_API enum Boolean CalRenderer_BeginRendering(struct CalRenderer *self);
500   CAL3D_WRAPPER_API void CalRenderer_Delete(struct CalRenderer *self);
501   CAL3D_WRAPPER_API void CalRenderer_EndRendering(struct CalRenderer *self);
502   CAL3D_WRAPPER_API void CalRenderer_GetAmbientColor(struct CalRenderer *self, unsigned char *pColorBuffer);
503   CAL3D_WRAPPER_API void CalRenderer_GetDiffuseColor(struct CalRenderer *self, unsigned char *pColorBuffer);
504   CAL3D_WRAPPER_API int CalRenderer_GetFaceCount(struct CalRenderer *self);
505   CAL3D_WRAPPER_API int CalRenderer_GetFaces(struct CalRenderer *self, CalIndex *pFaceBuffer);
506   CAL3D_WRAPPER_API int CalRenderer_GetMapCount(struct CalRenderer *self);
507   CAL3D_WRAPPER_API CalUserData CalRenderer_GetMapUserData(struct CalRenderer *self, int mapId);
508   CAL3D_WRAPPER_API int CalRenderer_GetMeshCount(struct CalRenderer *self);
509   CAL3D_WRAPPER_API int CalRenderer_GetNormals(struct CalRenderer *self, float *pNormalBuffer);
510   CAL3D_WRAPPER_API float CalRenderer_GetShininess(struct CalRenderer *self);
511   CAL3D_WRAPPER_API void CalRenderer_GetSpecularColor(struct CalRenderer *self, unsigned char *pColorBuffer);
512   CAL3D_WRAPPER_API int CalRenderer_GetSubmeshCount(struct CalRenderer *self, int meshId);
513   CAL3D_WRAPPER_API int CalRenderer_GetTextureCoordinates(struct CalRenderer *self, int mapId, float *pTextureCoordinateBuffer);
514   CAL3D_WRAPPER_API int CalRenderer_GetVertexCount(struct CalRenderer *self);
515   CAL3D_WRAPPER_API int CalRenderer_GetVertices(struct CalRenderer *self, float *pVertexBuffer);
516   CAL3D_WRAPPER_API int CalRenderer_GetVerticesAndNormals(struct CalRenderer *self, float *pVertexBuffer);
517   CAL3D_WRAPPER_API int CalRenderer_GetVerticesNormalsAndTexCoords(struct CalRenderer *self, float *pVertexBuffer, int NumTexCoords);
518   CAL3D_WRAPPER_API int CalRenderer_GetTangentSpaces(struct CalRenderer *self, int mapId, float *pTangentSpaceBuffer);
519   CAL3D_WRAPPER_API enum Boolean  CalRenderer_IsTangentsEnabled(struct CalRenderer *self, int mapId);
520   CAL3D_WRAPPER_API struct CalRenderer *CalRenderer_New(struct CalModel* pModel);
521   CAL3D_WRAPPER_API enum Boolean CalRenderer_SelectMeshSubmesh(struct CalRenderer *self, int meshId, int submeshId);
522 
523 //****************************************************************************//
524 // CalSaver wrapper functions declaration                                     //
525 //****************************************************************************//
526 
527   CAL3D_WRAPPER_API void CalSaver_Delete(struct CalSaver *self);
528   CAL3D_WRAPPER_API struct CalSaver *CalSaver_New();
529   CAL3D_WRAPPER_API enum Boolean CalSaver_SaveCoreAnimation(struct CalSaver *self, char *strFilename, struct  CalCoreAnimation *pCoreAnimation);
530   CAL3D_WRAPPER_API enum Boolean CalSaver_SaveCoreMaterial(struct CalSaver *self, char *strFilename, struct CalCoreMaterial *pCoreMaterial);
531   CAL3D_WRAPPER_API enum Boolean CalSaver_SaveCoreMesh(struct CalSaver *self, char *strFilename, struct CalCoreMesh *pCoreMesh);
532   CAL3D_WRAPPER_API enum Boolean CalSaver_SaveCoreSkeleton(struct CalSaver *self, char *strFilename, struct CalCoreSkeleton *pCoreSkeleton);
533 
534 //****************************************************************************//
535 // CalSkeleton wrapper functions declaration                                  //
536 //****************************************************************************//
537 
538   CAL3D_WRAPPER_API void CalSkeleton_CalculateState(struct CalSkeleton *self);
539   CAL3D_WRAPPER_API void CalSkeleton_ClearState(struct CalSkeleton *self);
540   CAL3D_WRAPPER_API void CalSkeleton_Delete(struct CalSkeleton *self);
541   CAL3D_WRAPPER_API struct CalBone *CalSkeleton_GetBone(struct CalSkeleton *self, int boneId);
542   CAL3D_WRAPPER_API struct CalCoreSkeleton *CalSkeleton_GetCoreSkeleton(struct CalSkeleton *self);
543 //  CAL3D_WRAPPER_API std::vector<CalBone *>& CalSkeleton_GetVectorBone(struct CalSkeleton *self);
544   CAL3D_WRAPPER_API void CalSkeleton_LockState(struct CalSkeleton *self);
545   CAL3D_WRAPPER_API struct CalSkeleton *CalSkeleton_New(struct CalCoreSkeleton* pCoreSkeleton);
546 
547   // DEBUG-CODE
548   CAL3D_WRAPPER_API int CalSkeleton_GetBonePoints(struct CalSkeleton *self, float *pPoints);
549   CAL3D_WRAPPER_API int CalSkeleton_GetBonePointsStatic(struct CalSkeleton *self, float *pPoints);
550   CAL3D_WRAPPER_API int CalSkeleton_GetBoneLines(struct CalSkeleton *self, float *pLines);
551   CAL3D_WRAPPER_API int CalSkeleton_GetBoneLinesStatic(struct CalSkeleton *self, float *pLines);
552 
553 //****************************************************************************//
554 // CalSpringSystem wrapper functions declaration                              //
555 //****************************************************************************//
556 
557   CAL3D_WRAPPER_API void CalSpringSystem_CalculateForces(struct CalSpringSystem *self, struct CalSubmesh *pSubmesh, float deltaTime);
558   CAL3D_WRAPPER_API void CalSpringSystem_CalculateVertices(struct CalSpringSystem *self, struct CalSubmesh *pSubmesh, float deltaTime);
559   CAL3D_WRAPPER_API void CalSpringSystem_Delete(struct CalSpringSystem *self);
560   CAL3D_WRAPPER_API struct CalSpringSystem *CalSpringSystem_New(struct CalModel *pModel);
561   CAL3D_WRAPPER_API void CalSpringSystem_Update(struct CalSpringSystem *self, float deltaTime);
562 
563 //****************************************************************************//
564 // CalSubmesh wrapper functions declaration                                   //
565 //****************************************************************************//
566 
567   CAL3D_WRAPPER_API void CalSubmesh_Delete(struct CalSubmesh *self);
568   CAL3D_WRAPPER_API struct CalCoreSubmesh *CalSubmesh_GetCoreSubmesh(struct CalSubmesh *self);
569   CAL3D_WRAPPER_API int CalSubmesh_GetCoreMaterialId(struct CalSubmesh *self);
570   CAL3D_WRAPPER_API int CalSubmesh_GetFaceCount(struct CalSubmesh *self);
571   CAL3D_WRAPPER_API int CalSubmesh_GetFaces(struct CalSubmesh *self, CalIndex *pFaceBuffer);
572 
573 //  CAL3D_WRAPPER_API std::vector<CalVector>& CalSubmesh_GetVectorNormal(struct CalSubmesh *self);
574 //  CAL3D_WRAPPER_API std::vector<CalSubmesh::PhysicalProperty>& CalSubmesh_GetVectorPhysicalProperty(struct CalSubmesh *self);
575 //  CAL3D_WRAPPER_API std::vector<CalVector>& CalSubmesh_GetVectorVertex(struct CalSubmesh *self);
576   CAL3D_WRAPPER_API int CalSubmesh_GetVertexCount(struct CalSubmesh *self);
577   CAL3D_WRAPPER_API enum Boolean CalSubmesh_HasInternalData(struct CalSubmesh *self);
578   CAL3D_WRAPPER_API struct CalSubmesh *CalSubmesh_New(struct CalCoreSubmesh* coreSubmesh);
579   CAL3D_WRAPPER_API void CalSubmesh_SetCoreMaterialId(struct CalSubmesh *self, int coreMaterialId);
580   CAL3D_WRAPPER_API void CalSubmesh_SetLodLevel(struct CalSubmesh *self, float lodLevel);
581 
582 //****************************************************************************//
583 // CalVector wrapper functions declaration                                    //
584 //****************************************************************************//
585 
586   CAL3D_WRAPPER_API void CalVector_Add(struct CalVector *self, struct CalVector *pV);
587   CAL3D_WRAPPER_API void CalVector_Blend(struct CalVector *self, float d, struct CalVector *pV);
588   CAL3D_WRAPPER_API void CalVector_Clear(struct CalVector *self);
589   CAL3D_WRAPPER_API void CalVector_Delete(struct CalVector *self);
590   CAL3D_WRAPPER_API void CalVector_Equal(struct CalVector *self, struct CalVector *pV);
591   CAL3D_WRAPPER_API void CalVector_InverseScale(struct CalVector *self, float d);
592   CAL3D_WRAPPER_API float *CalVector_Get(struct CalVector *self);
593   CAL3D_WRAPPER_API float CalVector_Length(struct CalVector *self);
594   CAL3D_WRAPPER_API struct CalVector *CalVector_New();
595   CAL3D_WRAPPER_API float CalVector_Normalize(struct CalVector *self);
596   CAL3D_WRAPPER_API void CalVector_Op_Add(struct CalVector *pResult, struct CalVector *pV, struct CalVector *pU);
597   CAL3D_WRAPPER_API void CalVector_Op_Subtract(struct CalVector *pResult, struct CalVector *pV, struct CalVector *pU);
598   CAL3D_WRAPPER_API void CalVector_CalVector_Op_Scale(struct CalVector *pResult, struct CalVector *pV, float d);
599   CAL3D_WRAPPER_API void CalVector_CalVector_Op_InverseScale(struct CalVector *pResult, struct CalVector *pV, float d);
600   CAL3D_WRAPPER_API float CalVector_Op_Scalar(struct CalVector *pV, struct CalVector *pU);
601   CAL3D_WRAPPER_API void CalVector_Op_Cross(struct CalVector *pResult, struct CalVector *pV, struct CalVector *pU);
602   CAL3D_WRAPPER_API void CalVector_Scale(struct CalVector *self, float d);
603   CAL3D_WRAPPER_API void CalVector_Set(struct CalVector *self, float vx, float vy, float vz);
604   CAL3D_WRAPPER_API void CalVector_Subtract(struct CalVector *self, struct CalVector *pV);
605   CAL3D_WRAPPER_API void CalVector_Transform(struct CalVector *self, struct CalQuaternion *pQ);
606 
607 #ifdef __cplusplus
608 }
609 #endif
610 
611 #endif
612 
613 //****************************************************************************//
614