/* Treeki's 3D Library for Wii */ #ifndef TREEKI3D_H #define TREEKI3D_H /******************************************************************************* * IMPORTS/ENGINE HOOKS *******************************************************************************/ #define GEKKO #include #include "rvl/mtx.h" #include "rvl/GXEnum.h" #include "rvl/GXStruct.h" #include "rvl/GXTransform.h" #include "rvl/GXGeometry.h" #include "rvl/GXDispList.h" #include "rvl/GXLighting.h" #include "rvl/GXTev.h" #include "rvl/GXTexture.h" #include "rvl/GXCull.h" #include "rvl/GXPixel.h" #include "rvl/GXBump.h" #include "rvl/OSCache.h" #include "rvl/tpl.h" #include "rvl/vifuncs.h" #include "rvl/arc.h" GXRenderModeObj *Hook_GetGXRenderModeObj(); namespace T3D { /******************************************************************************* * RESOURCE STRUCTS *******************************************************************************/ struct tmdl_header { u32 magic; // always TMDL u32 version; // currently 2 u32 shape_count; }; // [[Followed by an array of u32s for each shape offset]] struct tmdl_shape { u32 dl_offset; // must be aligned to 0x20 u32 dl_size; // must be aligned to 0x20 u32 mat_offset; u32 pos_arr_offset; // must be aligned to 0x20 u32 pos_arr_size; // must be aligned to 0x20 u32 nrm_arr_offset; // must be aligned to 0x20 u32 nrm_arr_size; // must be aligned to 0x20 u32 uv_arr_offset; // must be aligned to 0x20 u32 uv_arr_size; // must be aligned to 0x20 }; struct tmdl_material { u32 texture_id; // once the model is bound, points to tpl GXColor mat_colour; }; /******************************************************************************* * INTERNAL STRUCTS *******************************************************************************/ class Model; // don't you just love circular references struct RenderInfo { Model *model; Mtx matrix; }; struct CameraInfo { GXProjectionType projection; Mtx44 projection_matrix; Mtx view_matrix; }; /******************************************************************************* * PUBLIC CLASSES *******************************************************************************/ class Model { private: tmdl_header *model_res; TPLPalette *texture_res; void setupMaterialGX(tmdl_material *material); void drawShape(RenderInfo *info, int shape_id); public: bool bind(void *data, const char *mdlname); void addToDrawList(Mtx matrix); void draw(RenderInfo *info); }; /******************************************************************************* * CONVENIENT STUFF *******************************************************************************/ extern const GXColor Black, White; /******************************************************************************* * GLOBAL T3D VARIABLES/FUNCTIONS *******************************************************************************/ #define OBJ_COUNT 10 extern u32 HasBeenInited; extern RenderInfo *RenderQueue; extern int RenderQueuePos; extern CameraInfo Camera; bool Init(bool test); void DrawQueue(); }; #endif