17#define T3D_VERTEX_CACHE_SIZE 70
19extern uint32_t T3D_RSP_ID;
23 T3D_CMD_TRI_DRAW = 0x0,
24 T3D_CMD_SCREEN_SIZE = 0x1,
25 T3D_CMD_MATRIX_STACK = 0x2,
26 T3D_CMD_SET_WORD = 0x3,
27 T3D_CMD_VERT_LOAD = 0x4,
28 T3D_CMD_LIGHT_SET = 0x5,
29 T3D_CMD_DRAWFLAGS = 0x6,
30 T3D_CMD_PROJ_SET = 0x7,
32 T3D_CMD_FOG_STATE = 0x9,
33 T3D_CMD_TRI_SYNC = 0xA,
34 T3D_CMD_TRI_STRIP = 0xB,
35 T3D_CMD_TRI_SEQ = 0xC,
53static_assert(sizeof(T3DVertPacked) == 0x20, "T3DVertPacked has wrong size");
56 T3D_FLAG_DEPTH = 1 << 0,
57 T3D_FLAG_TEXTURED = 1 << 1,
58 T3D_FLAG_SHADED = 1 << 2,
59 T3D_FLAG_CULL_FRONT = 1 << 3,
60 T3D_FLAG_CULL_BACK = 1 << 4,
61 T3D_FLAG_NO_LIGHT = 1 << 16,
72 T3D_SEGMENT_SKELETON = 7,
77 T3D_VERTEX_FX_NONE = 0,
78 T3D_VERTEX_FX_SPHERICAL_UV = 1,
79 T3D_VERTEX_FX_CELSHADE_COLOR = 2,
80 T3D_VERTEX_FX_CELSHADE_ALPHA = 3,
81 T3D_VERTEX_FX_OUTLINE = 4,
82 T3D_VERTEX_FX_UV_OFFSET = 5,
88 T3D_LIGHTING_MODE_MUL = 0,
89 T3D_LIGHTING_MODE_ADD = 1,
99 T3DMat4FP _matCameraFP [[deprecated(
"Use t3d_viewport_set_view_matrix()")]];
100 T3DMat4FP _matProjFP [[deprecated(
"Use t3d_viewport_set_projection_matrix()")]];
107 bool _isCamProjDirty;
116 uint16_t _bufferCount;
135 uint32_t trisPreCull;
136 uint32_t trisPostCull;
183 ._isCamProjDirty =
true,
185 .size = {(int32_t)display_get_width(), (int32_t)display_get_height()},
187 .useRejection =
false,
205 vp._bufferCount = count;
207 vp._matFP = (T3DMat4FP*)malloc_uncached(
sizeof(T3DMat4FP) * 2 * count);
220 if(viewport->_matFP) {
221 free_uncached(viewport->_matFP);
222 viewport->_matFP = NULL;
223 viewport->_bufferCount = 0;
224 viewport->_bufferIdx = 0;
254 viewport->offset[0] = x;
255 viewport->offset[1] = y;
256 viewport->size[0] = width;
257 viewport->size[1] = height;
308 viewport->_normScaleW = 2.0f / (far + near);
356void t3d_tri_draw(uint32_t v0, uint32_t v1, uint32_t v2);
420 rspq_write(T3D_RSP_ID, T3D_CMD_TRI_SYNC, 0);
473void t3d_vert_load(
const T3DVertPacked *vertices, uint32_t offset, uint32_t count);
511void t3d_light_set_point(
int index,
const uint8_t *color,
const T3DVec3 *pos,
float size,
bool ignoreNormals);
550 rspq_write(T3D_RSP_ID, T3D_CMD_FOG_STATE, isEnabled ? 0x0B : 0x0C);
664 return (
void*)(uint32_t)(segmentId << (8*3 + 2));
677 return (
void*)(PhysicalAddr(ptr) | (segmentId << (8*3 + 2)));
714 return (idx & 1) ? vert[idx/2].posB : vert[idx/2].posA;
723 return (idx & 1) ? vert[idx/2].stB : vert[idx/2].stA;
732 return (idx & 1) ? &vert[idx/2].rgbaB : &vert[idx/2].rgbaA;
741 return (idx & 1) ? (uint8_t*)&vert[idx/2].rgbaB : (uint8_t*)&vert[idx/2].rgbaA;
750 return (idx & 1) ? &vert[idx/2].normB : &vert[idx/2].normA;
763inline void t3d_viewport_set_ortho(
T3DViewport &viewport,
float left,
float right,
float bottom,
float top,
float near,
float far) {
t3d_viewport_set_ortho(&viewport, left, right, bottom, top, near, far); }
769inline void t3d_light_set_point(
int index,
const uint8_t *color,
const T3DVec3 &pos,
float size,
bool ignoreNormals =
false) {
t3d_light_set_point(index, color, &pos, size, ignoreNormals); }
773inline void t3d_light_set_point(
int index,
const color_t &color,
const T3DVec3 &pos,
float size,
bool ignoreNormals =
false) {
t3d_light_set_point(index, (
const uint8_t*)&color, &pos, size, ignoreNormals); }
static void t3d_viewport_destroy(T3DViewport *viewport)
Definition t3d.h:219
void t3d_state_set_vertex_fx(enum T3DVertexFX func, int16_t arg0, int16_t arg1)
Definition t3d.c:329
void t3d_destroy(void)
Destroys the tiny3d library.
Definition t3d.c:77
void t3d_vert_load(const T3DVertPacked *vertices, uint32_t offset, uint32_t count)
Definition t3d.c:149
void t3d_viewport_attach(T3DViewport *viewport)
Definition t3d.c:498
static uint32_t * t3d_vertbuffer_get_color(T3DVertPacked vert[], int idx)
Definition t3d.h:731
void t3d_indexbuffer_convert(int16_t indices[], int count)
Definition t3d.c:661
void t3d_light_set_count(int count)
Definition t3d.c:186
static uint16_t * t3d_vertbuffer_get_norm(T3DVertPacked vert[], int idx)
Definition t3d.h:749
void t3d_viewport_calc_viewspace_pos(T3DViewport *viewport, T3DVec3 *out, const T3DVec3 *pos)
Definition t3d.c:631
void t3d_tri_draw_strip_and_sync(int16_t *indexBuff, int count)
Definition t3d.c:465
void t3d_state_set_alpha_to_tile(bool enable)
Definition t3d.c:322
void t3d_state_set_lighting_mode(enum T3DLightingMode mode)
Definition t3d.c:376
void t3d_light_set_ambient(const uint8_t *color)
Definition t3d.c:200
static int16_t * t3d_vertbuffer_get_uv(T3DVertPacked vert[], int idx)
Definition t3d.h:722
static void * t3d_segment_address(uint8_t segmentId, void *ptr)
Definition t3d.h:676
void t3d_viewport_set_view_matrix(T3DViewport *viewport, const T3DMat4 *mat)
Definition t3d.c:615
static T3DViewport t3d_viewport_create_buffered(uint16_t count)
Definition t3d.h:203
static uint8_t * t3d_vertbuffer_get_rgba(T3DVertPacked vert[], int idx)
Definition t3d.h:740
uint16_t t3d_vert_pack_normal(const T3DVec3 *normal)
Definition t3d.c:277
void t3d_matrix_pop(int count)
Definition t3d.c:135
void t3d_viewport_set_perspective(T3DViewport *viewport, float fov, float aspectRatio, float near, float far)
Definition t3d.c:590
void t3d_viewport_set_ortho(T3DViewport *viewport, float left, float right, float bottom, float top, float near, float far)
Definition t3d.c:601
void t3d_segment_set(uint8_t segmentId, void *address)
Definition t3d.c:394
void t3d_tri_draw(uint32_t v0, uint32_t v1, uint32_t v2)
Draws a single triangle, referencing loaded vertices.
Definition t3d.c:402
void t3d_tri_draw_strip(int16_t *indexBuff, int count)
Definition t3d.c:460
void t3d_init(T3DInitParams params)
Initializes the tiny3d library.
Definition t3d.c:45
void t3d_matrix_push(const T3DMat4FP *mat)
Definition t3d.c:131
static void t3d_viewport_set_w_normalize(T3DViewport *viewport, float near, float far)
Definition t3d.h:307
void t3d_screen_clear_color(color_t color)
Clears the entire screen with a given color.
Definition t3d.c:91
void t3d_state_set_depth_offset(int16_t offset)
Definition t3d.c:318
void t3d_state_set_drawflags(enum T3DDrawFlags drawFlags)
Definition t3d.c:294
void t3d_matrix_push_pos(int count)
Definition t3d.c:140
static void t3d_tri_sync()
Definition t3d.h:419
void t3d_frame_start(void)
Starts a new frame, this will setup some default states.
Definition t3d.c:170
void t3d_screen_clear_depth()
Clears the entire depth buffer with a fixed value (0xFFFC)
Definition t3d.c:95
void t3d_fog_set_range(float near, float far)
Definition t3d.c:470
void t3d_light_set_exposure(float exposure)
Definition t3d.c:194
void t3d_viewport_look_at(T3DViewport *viewport, const T3DVec3 *eye, const T3DVec3 *target, const T3DVec3 *up)
Definition t3d.c:607
void t3d_state_set_vertex_fx_scale(uint16_t scale)
Definition t3d.c:371
void t3d_viewport_set_projection(T3DViewport *viewport, float fov, float near, float far)
Definition t3d.c:596
static void t3d_viewport_set_area(T3DViewport *viewport, int32_t x, int32_t y, int32_t width, int32_t height)
Definition t3d.h:253
void t3d_quad_draw_unindexed(uint32_t baseIndex, uint32_t quadCount)
Definition t3d.c:441
void t3d_matrix_set_proj(const T3DMat4FP *mat)
Definition t3d.c:145
static void * t3d_segment_placeholder(uint8_t segmentId)
Definition t3d.h:663
void t3d_light_set_directional(int index, const uint8_t *color, const T3DVec3 *dir)
Definition t3d.c:209
void t3d_matrix_set(const T3DMat4FP *mat, bool doMultiply)
Definition t3d.c:127
static T3DViewport t3d_viewport_create()
Definition t3d.h:181
static int16_t * t3d_vertbuffer_get_pos(T3DVertPacked vert[], int idx)
Definition t3d.h:713
static void t3d_fog_set_enabled(bool isEnabled)
Definition t3d.h:546
void t3d_light_set_point(int index, const uint8_t *color, const T3DVec3 *pos, float size, bool ignoreNormals)
Definition t3d.c:237
void t3d_viewport_set_projection_matrix(T3DViewport *viewport, const T3DMat4 *mat)
Definition t3d.c:623
void t3d_metrics_fetch(T3DMetrics *data)
Definition t3d.c:119
T3DViewport * t3d_viewport_get()
Definition t3d.c:586
void t3d_tri_draw_unindexed(uint32_t baseIndex, uint32_t triCount)
Definition t3d.c:437
__attribute__((deprecated)) void t3d_debug_print_init()
Initializes the debug print system, make sure to have 'font.ia4.png' in your FS.