#include #include "tmd.h" //------------------------------------ // Globals //------------------------------------ static u_long *TMD_MEM_START; static u_long *TMD_MEM_CURRENT; OBJECT *TMD_MEM_OBJECT; static u_long *VERTEX_START; static u_long *NORMAL_START; static u_long *PRIMITIVE_START; static u_long VERTEX_QUANTITY; static u_long NORMAL_QUANTITY; static u_long PRIMITIVE_QUANTITY; VERTEX *VERTEX_LUT; COLOUR *COLOUR_LUT; TEXTURE *TEXTURE_LUT; //------------------------------------ // Function definitions //------------------------------------ void PrepareTMD(u_long address, VERTEX *vertex, COLOUR *colour, TEXTURE *texture) { VERTEX_LUT = vertex; COLOUR_LUT = colour; TEXTURE_LUT = texture; if (address != 0) TMD_MEM_START = TMD_MEM_CURRENT = (u_long *)address; else TMD_MEM_START = TMD_MEM_CURRENT; VERTEX_QUANTITY = NORMAL_QUANTITY = PRIMITIVE_QUANTITY = 0; SetTmdHeader((HEADER *)TMD_MEM_CURRENT); TMD_MEM_CURRENT = (u_long *)((HEADER *)TMD_MEM_CURRENT + 1); TMD_MEM_OBJECT = (OBJECT *)TMD_MEM_CURRENT; TMD_MEM_CURRENT = (u_long *)((OBJECT *)TMD_MEM_CURRENT + 1); PRIMITIVE_START = TMD_MEM_CURRENT; } u_long *FinishTMD(void) { u_long i; VERTEX *temp; VERTEX_QUANTITY++; VERTEX_START = TMD_MEM_CURRENT; temp = (VERTEX *)VERTEX_START; NORMAL_START = (u_long *)((VERTEX *)VERTEX_START + VERTEX_QUANTITY); SetObjectData(TMD_MEM_OBJECT); for (i=0; ivx = (VERTEX_LUT + i)->vx; temp->vy = (VERTEX_LUT + i)->vy; temp->vz = (VERTEX_LUT + i)->vz; temp++; } // Skip normals TMD_MEM_CURRENT = (u_long *)((NORMAL *)NORMAL_START + NORMAL_QUANTITY); return TMD_MEM_START; } void SetNS_GP_TRI(u_short v0, u_short v1, u_short v2, u_long c0, u_long c1, u_long c2) { NS_GP_TRI_FACE *newPoly = (NS_GP_TRI_FACE *)TMD_MEM_CURRENT; SetPrimitiveHeader(newPoly, NS_GP_TRI, 1, 5, 6); newPoly->vert0 = v0; newPoly->vert1 = v1; newPoly->vert2 = v2; SetColour0(); SetColour1(); SetColour2(); if (v0>VERTEX_QUANTITY) VERTEX_QUANTITY = v0; if (v1>VERTEX_QUANTITY) VERTEX_QUANTITY = v1; if (v2>VERTEX_QUANTITY) VERTEX_QUANTITY = v2; PRIMITIVE_QUANTITY++; TMD_MEM_CURRENT = (u_long *)(newPoly + 1); }