summaryrefslogtreecommitdiff
path: root/3dlib/treeki3d.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--3dlib/treeki3d.h144
1 files changed, 144 insertions, 0 deletions
diff --git a/3dlib/treeki3d.h b/3dlib/treeki3d.h
new file mode 100644
index 0000000..93a9c3e
--- /dev/null
+++ b/3dlib/treeki3d.h
@@ -0,0 +1,144 @@
+/* Treeki's 3D Library for Wii */
+
+#ifndef TREEKI3D_H
+#define TREEKI3D_H
+
+/*******************************************************************************
+* IMPORTS/ENGINE HOOKS
+*******************************************************************************/
+
+#define GEKKO
+
+#include <common.h>
+#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_headerv2 {
+ u32 magic; // always TMDL
+ u32 version; // currently 2
+ u32 shape_count;
+};
+
+struct tmdl_header {
+ u32 magic; // always TMDL
+ u32 version; // currently 3
+ u32 shape_count;
+ u32 material_count;
+};
+
+// todo: remove this
+extern int tmdl_header_sizes[];
+// [[Followed by an array of u32s for each shape offset, then material structs]]
+
+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_materialv2 {
+ u32 texture_id;
+ GXColor mat_colour;
+};
+
+struct tmdl_material {
+ char texture_name[28];
+ GXColor mat_colour;
+ GXTexObj texobj; // handled when binding. size: 8 bytes
+};
+
+/*******************************************************************************
+* 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; // here for v2 support
+
+ void setupMaterialGXv2(tmdl_materialv2 *material);
+ 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 60
+
+extern u32 HasBeenInited;
+extern RenderInfo *RenderQueue;
+extern int RenderQueuePos;
+
+extern CameraInfo Camera;
+
+bool Init(bool test);
+void DrawQueue();
+
+namespace util {
+ //void RotateToFace(const Vec &O, const Vec &P, const Vec &U, Mtx out);
+};
+
+};
+
+#endif