aboutsummaryrefslogtreecommitdiff
path: root/src/llr/llr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/llr/llr.c')
-rw-r--r--src/llr/llr.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/llr/llr.c b/src/llr/llr.c
index e5242e7..664c9a4 100644
--- a/src/llr/llr.c
+++ b/src/llr/llr.c
@@ -201,11 +201,20 @@ static void configure_state(LLR* renderer) {
201 } 201 }
202 } 202 }
203 203
204 if (renderer->material_changed || renderer->shader_changed) {
205 renderer->material_changed = false;
206
207 gfx_material_activate(renderer->shader, renderer->material);
208 }
209
204 if (renderer->shader_changed) { 210 if (renderer->shader_changed) {
205 renderer->shader_changed = false; 211 renderer->shader_changed = false;
206 gfx_activate_shader_program(renderer->shader); 212 gfx_activate_shader_program(renderer->shader);
207 } 213 }
208 214
215 // TODO: At present, this results in many redundant calls to
216 // glGetUniformLocation() and glUniformXyz(). Look at the trace.
217 //
209 // Must be called after activating the program. 218 // Must be called after activating the program.
210 gfx_apply_uniforms(renderer->shader); 219 gfx_apply_uniforms(renderer->shader);
211} 220}
@@ -296,6 +305,14 @@ void gfx_llr_clear_skeleton(LLR* renderer) {
296 renderer->skeleton_changed = true; 305 renderer->skeleton_changed = true;
297} 306}
298 307
308void gfx_llr_set_material(LLR* renderer, const Material* material) {
309 assert(renderer);
310 assert(material);
311
312 renderer->material = material;
313 renderer->material_changed = true;
314}
315
299void gfx_llr_set_camera(LLR* renderer, const Camera* camera) { 316void gfx_llr_set_camera(LLR* renderer, const Camera* camera) {
300 assert(renderer); 317 assert(renderer);
301 318
@@ -331,7 +348,7 @@ void gfx_llr_render_mesh(LLR* renderer, const Mesh* mesh) {
331 assert(mesh->geometry); 348 assert(mesh->geometry);
332 assert(mesh->material); 349 assert(mesh->material);
333 350
334 gfx_material_activate(renderer->shader, mesh->material); 351 gfx_llr_set_material(renderer, mesh->material);
335 gfx_llr_render_geometry(renderer, mesh->geometry); 352 gfx_llr_render_geometry(renderer, mesh->geometry);
336} 353}
337 354