From ef284a15a1ab8ca48087175d24df0dc06d0b3415 Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Wed, 8 Jul 2026 12:36:40 -0500 Subject: [PATCH] pre-cache shader matrices --- src/dusk/scene/scene.c | 45 ++++++++++++++++++++++++------------------ src/dusk/scene/scene.h | 4 ++++ 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/dusk/scene/scene.c b/src/dusk/scene/scene.c index f078a8f7..72c4e9d9 100644 --- a/src/dusk/scene/scene.c +++ b/src/dusk/scene/scene.c @@ -58,6 +58,23 @@ errorret_t sceneUpdate(void) { } errorret_t sceneRender(void) { + // Setup screen matrices for 3D rendering. + glm_mat4_identity(SCENE.screenIdentity); + + glm_ortho( + 0.0f, (float_t)(SCREEN.width / SCREEN.scaleUi), + (float_t)(SCREEN.height / SCREEN.scaleUi), 0.0f, + 0.1f, 100.0f, + SCENE.screenProj + ); + + glm_lookat( + (vec3){ 0.0f, 0.0f, 1.0f }, + (vec3){ 0.0f, 0.0f, 0.0f }, + (vec3){ 0.0f, 1.0f, 0.0f }, + SCENE.screenView + ); + // Scene rendering if( SCENE.current != SCENE_TYPE_NULL && @@ -67,26 +84,16 @@ errorret_t sceneRender(void) { } // UI Rendering - mat4 proj, view, ident; - glm_mat4_identity(ident); errorChain(shaderBind(&SHADER_UNLIT)); - errorChain(shaderSetMatrix(&SHADER_UNLIT, SHADER_UNLIT_MODEL, ident)); - - glm_ortho( - 0.0f, (float_t)(SCREEN.width / SCREEN.scaleUi), - (float_t)(SCREEN.height / SCREEN.scaleUi), 0.0f, - 0.1f, 100.0f, - proj - ); - errorChain(shaderSetMatrix(&SHADER_UNLIT, SHADER_UNLIT_PROJECTION, proj)); - - glm_lookat( - (vec3){ 0.0f, 0.0f, 1.0f }, - (vec3){ 0.0f, 0.0f, 0.0f }, - (vec3){ 0.0f, 1.0f, 0.0f }, - view - ); - errorChain(shaderSetMatrix(&SHADER_UNLIT, SHADER_UNLIT_VIEW, view)); + errorChain(shaderSetMatrix( + &SHADER_UNLIT, SHADER_UNLIT_MODEL, SCENE.screenIdentity + )); + errorChain(shaderSetMatrix( + &SHADER_UNLIT, SHADER_UNLIT_PROJECTION, SCENE.screenProj + )); + errorChain(shaderSetMatrix( + &SHADER_UNLIT, SHADER_UNLIT_VIEW, SCENE.screenView + )); errorChain(displaySetState((displaystate_t){ .flags = DISPLAY_STATE_FLAG_BLEND diff --git a/src/dusk/scene/scene.h b/src/dusk/scene/scene.h index b3cd8168..db138699 100644 --- a/src/dusk/scene/scene.h +++ b/src/dusk/scene/scene.h @@ -6,12 +6,16 @@ */ #pragma once +#include "dusk.h" #include "scenetype.h" typedef struct { scenetype_t current; scenetype_t next; scenedata_t data; + mat4 screenProj; + mat4 screenView; + mat4 screenIdentity; } scene_t; extern scene_t SCENE;