From b1c29c40fdc618ab250292f85d8132474fb8843e Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Fri, 24 Oct 2025 14:56:42 -0700 Subject: Fix Pong demo, add notes and TODOs --- include/gfx/llr/llr.h | 6 ++++++ include/gfx/llr/material.h | 1 + src/core/shader_program.h | 2 -- src/llr/llr.c | 12 +++++++++++- src/llr/mesh_impl.h | 2 +- 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/include/gfx/llr/llr.h b/include/gfx/llr/llr.h index 098374d..f84b3fb 100644 --- a/include/gfx/llr/llr.h +++ b/include/gfx/llr/llr.h @@ -14,6 +14,9 @@ typedef struct Skeleton Skeleton; typedef struct LLR LLR; +// ----------------------------------------------------------------------------- +// Low-level rendering. + /// Set the shader to be used for subsequent draw calls. /// The shader is not yet activated at this point. void gfx_llr_set_shader(LLR*, ShaderProgram*); @@ -44,6 +47,9 @@ void gfx_llr_set_material(LLR*, const Material*); /// Set the camera. void gfx_llr_set_camera(LLR*, const Camera*); +/// Set the projection matrix. +void gfx_llr_set_projection_matrix(LLR* renderer, const mat4* projection); + /// Set the aspect ratio. void gfx_llr_set_aspect(LLR*, float aspect); diff --git a/include/gfx/llr/material.h b/include/gfx/llr/material.h index bca664e..9ebf9b3 100644 --- a/include/gfx/llr/material.h +++ b/include/gfx/llr/material.h @@ -7,6 +7,7 @@ typedef struct Material Material; /// Describes a material. /// +/// TODO: It doesn't hold the shader program anymore...It's in the Mesh. /// A material holds a shader program and a set of shader-specific uniform /// variables. Two materials can share the same shader, but shader parameters /// generally give two materials a different appearance. diff --git a/src/core/shader_program.h b/src/core/shader_program.h index 1443663..521118d 100644 --- a/src/core/shader_program.h +++ b/src/core/shader_program.h @@ -5,8 +5,6 @@ #include "gl_util.h" -#include - #include typedef struct Texture Texture; diff --git a/src/llr/llr.c b/src/llr/llr.c index fe02c0d..25cdf9f 100644 --- a/src/llr/llr.c +++ b/src/llr/llr.c @@ -204,7 +204,10 @@ static void configure_state(LLR* renderer) { if (renderer->material_changed || renderer->shader_changed) { renderer->material_changed = false; - gfx_material_activate(renderer->shader, renderer->material); + // Geometry may be rendered without a material. + if (renderer->material) { + gfx_material_activate(renderer->shader, renderer->material); + } } if (renderer->shader_changed) { @@ -330,6 +333,13 @@ void gfx_llr_set_camera(LLR* renderer, const Camera* camera) { renderer->camera_changed = true; } +void gfx_llr_set_projection_matrix(LLR* renderer, const mat4* projection) { + assert(renderer); + + renderer->projection = *projection; + renderer->camera_changed = true; +} + void gfx_llr_set_aspect(LLR* renderer, float aspect) { assert(renderer); diff --git a/src/llr/mesh_impl.h b/src/llr/mesh_impl.h index 96e60df..a997d5b 100644 --- a/src/llr/mesh_impl.h +++ b/src/llr/mesh_impl.h @@ -5,5 +5,5 @@ typedef struct Mesh { const Geometry* geometry; const Material* material; - ShaderProgram* shader; + ShaderProgram* shader; // TODO: Move this back to Material? } Mesh; -- cgit v1.2.3