6#ifndef TINY3D_T3DMODEL_H
7#define TINY3D_T3DMODEL_H
16#define T3D_ALPHA_MODE_DEFAULT 0
17#define T3D_ALPHA_MODE_OPAQUE 1
18#define T3D_ALPHA_MODE_CUTOUT 2
19#define T3D_ALPHA_MODE_TRANSP 3
21#define T3D_FOG_MODE_DEFAULT 0
22#define T3D_FOG_MODE_DISABLED 1
23#define T3D_FOG_MODE_ACTIVE 2
35 uint32_t texReference;
47 uint64_t colorCombiner;
48 uint64_t otherModeValue;
49 uint64_t otherModeMask;
55 uint8_t setColorFlags;
69 uint16_t vertLoadCount;
70 uint16_t vertDestOffset;
75 uint8_t numStripIndices[4];
88 rspq_block_t *userBlock;
130 uint8_t attributeIdx;
138 uint32_t keyframeCount;
139 uint16_t channelsQuat;
140 uint16_t channelsScalar;
154 uint16_t totalVertCount;
155 uint16_t totalIndexCount;
157 uint32_t chunkIdxVertices;
158 uint32_t chunkIdxIndices;
159 uint32_t chunkIdxMaterials;
160 char* stringTablePtr;
163 rspq_block_t *userBlock;
186enum T3DModelChunkType {
187 T3D_CHUNK_TYPE_VERTICES =
'V',
188 T3D_CHUNK_TYPE_INDICES =
'I',
189 T3D_CHUNK_TYPE_MATERIAL =
'M',
190 T3D_CHUNK_TYPE_OBJECT =
'O',
191 T3D_CHUNK_TYPE_SKELETON =
'S',
192 T3D_CHUNK_TYPE_ANIM =
'A',
193 T3D_CHUNK_TYPE_BVH =
'B'
206typedef void (*T3DModelTileCb)(
void* userData, rdpq_texparms_t *tileParams, rdpq_tile_t tile);
207typedef bool (*T3DModelFilterCb)(
void* userData,
const T3DObject *obj);
208typedef void (*T3DModelDynTextureCb)(
209 void* userData,
const T3DMaterial *material, rdpq_texparms_t *tileParams, rdpq_tile_t tile
215 T3DModelTileCb tileCb;
216 T3DModelFilterCb filterCb;
217 T3DModelDynTextureCb dynTextureCb;
218 const T3DMat4FP *matrices;
226 uint32_t lastTextureHashA;
227 uint32_t lastTextureHashB;
229 uint32_t lastRenderFlags;
231 color_t lastPrimColor;
232 color_t lastEnvColor;
233 color_t lastBlendColor;
234 uint8_t lastVertFXFunc;
235 uint16_t lastUvGenParams[2];
236 uint64_t lastOtherMode;
237 uint32_t lastBlendMode;
248 .lastVertFXFunc = T3D_VERTEX_FX_NONE,
249 .lastOtherMode = 0xFF,
250 .lastBlendMode = 0xFFFFFFFF
320 uint32_t offset = model->chunkOffsets[model->chunkIdxVertices].offset & 0x00FFFFFF;
321 return (T3DVertPacked*)((
char*)model + offset);
348 for(uint32_t i = 0; i < model->chunkCount; i++) {
349 if(model->chunkOffsets[i].type == T3D_CHUNK_TYPE_SKELETON) {
350 uint32_t offset = model->chunkOffsets[i].offset & 0x00FFFFFF;
364 for(uint32_t i = 0; i < model->chunkCount; i++) {
365 if(model->chunkOffsets[i].type == T3D_CHUNK_TYPE_ANIM)count++;
404 uint32_t offset = model->chunkOffsets[index].offset & 0x00FFFFFF;
405 return (
T3DObject*)((
char*)model + offset);
443 ._chunkType = chunkType,
468 for(uint32_t i = 0; i < model->chunkCount; i++) {
469 if(model->chunkOffsets[i].type == T3D_CHUNK_TYPE_BVH) {
470 uint32_t offset = model->chunkOffsets[i].offset & 0x00FFFFFF;
471 return (
T3DBvh*)((
char*)model + offset);
Definition t3dmodel.h:127
Definition t3dmodel.h:105
Definition t3dmodel.h:135
Definition t3dmodel.h:112
Definition t3dmodel.h:121
Definition t3dmodel.h:213
Definition t3dmodel.h:171
Definition t3dmodel.h:225
Definition t3dmodel.h:150
void t3d_model_free(T3DModel *model)
Definition t3dmodel.c:452
static T3DModelIter t3d_model_iter_create(const T3DModel *model, enum T3DModelChunkType chunkType)
Definition t3dmodel.h:438
T3DChunkAnim * t3d_model_get_animation(const T3DModel *model, const char *name)
Definition t3dmodel.c:482
void t3d_model_bvh_query_frustum(const T3DBvh *bvh, const T3DFrustum *frustum)
Definition t3dmodel.c:564
static T3DVertPacked * t3d_model_get_vertices(const T3DModel *model)
Definition t3dmodel.h:319
static const T3DChunkSkeleton * t3d_model_get_skeleton(const T3DModel *model)
Definition t3dmodel.h:347
void t3d_model_make_object_vert_placeholder(const T3DModel *model, T3DObject *object, uint8_t segmentId)
Definition t3dmodel.c:295
T3DObject * t3d_model_get_object(const T3DModel *model, const char *name)
Definition t3dmodel.c:493
T3DMaterial * t3d_model_get_material(const T3DModel *model, const char *name)
Definition t3dmodel.c:514
bool t3d_model_iter_next(T3DModelIter *iter)
Definition t3dmodel.c:525
T3DModel * t3d_model_load(const char *path)
Definition t3dmodel.c:185
static T3DObject * t3d_model_get_object_by_index(const T3DModel *model, uint32_t index)
Definition t3dmodel.h:403
static T3DModelState t3d_model_state_create()
Definition t3dmodel.h:245
void t3d_model_draw_object(const T3DObject *object, const T3DMat4FP *boneMatrices)
Definition t3dmodel.c:305
void t3d_model_get_animations(const T3DModel *model, T3DChunkAnim **anims)
Definition t3dmodel.c:504
void t3d_model_draw_custom(const T3DModel *model, T3DModelDrawConf conf)
Definition t3dmodel.c:274
void t3d_model_draw_material(T3DMaterial *mat, T3DModelState *state)
Definition t3dmodel.c:364
static void t3d_model_draw(const T3DModel *model)
Definition t3dmodel.h:274
static const T3DBvh * t3d_model_bvh_get(const T3DModel *model)
Definition t3dmodel.h:467
static uint32_t t3d_model_get_animation_count(const T3DModel *model)
Definition t3dmodel.h:362
Definition t3dmodel.h:145