From f32dbfabeb2c0e7e63bd0845857cc560f2c4b2c0 Mon Sep 17 00:00:00 2001 From: Cyberarm Date: Sun, 22 Mar 2020 17:46:50 -0500 Subject: [PATCH] Set shader lights once per frame instead of per entity --- lib/renderer/opengl_renderer.rb | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/lib/renderer/opengl_renderer.rb b/lib/renderer/opengl_renderer.rb index 473d42d..3f34401 100644 --- a/lib/renderer/opengl_renderer.rb +++ b/lib/renderer/opengl_renderer.rb @@ -16,6 +16,17 @@ class IMICFPS glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) Shader.use("default") do |shader| + lights.each_with_index do |light, i| + shader.uniform_float("lights[#{i}.end", -1.0); + shader.uniform_float("lights[#{i}.type", light.type); + shader.uniform_vec3("lights[#{i}].position", light.position) + shader.uniform_vec3("lights[#{i}].ambient", light.ambient) + shader.uniform_vec3("lights[#{i}].diffuse", light.diffuse) + shader.uniform_vec3("lights[#{i}].specular", light.specular) + end + + shader.uniform_float("totalLights", lights.size) + entities.each do |entity| next unless entity.visible && entity.renderable @@ -25,18 +36,6 @@ class IMICFPS shader.uniform_boolean("hasTexture", entity.model.has_texture?) shader.uniform_vec3("cameraPosition", camera.position) - # TODO: Upload and use lights - lights.each_with_index do |light, i| - shader.uniform_float("lights[#{i}.end", -1.0); - shader.uniform_float("lights[#{i}.type", light.type); - shader.uniform_vec3("lights[#{i}].position", light.position) - shader.uniform_vec3("lights[#{i}].ambient", light.ambient) - shader.uniform_vec3("lights[#{i}].diffuse", light.diffuse) - shader.uniform_vec3("lights[#{i}].specular", light.specular) - end - - shader.uniform_float("totalLights", lights.size) - gl_error? draw_model(entity.model, shader) entity.draw