2
0
Эх сурвалжийг харах

Tuck updating uniforms under simple_renderer_set_shader()

rexim 2 жил өмнө
parent
commit
8ea55694c3

+ 3 - 8
src/main.c

@@ -73,12 +73,11 @@ void render_editor(SDL_Window *window, Free_Glyph_Atlas *atlas, Simple_Renderer
 
     simple_renderer_use(sr);
 
+    sr->resolution = vec2f(w, h);
+    sr->time = (float) SDL_GetTicks() / 1000.0f;
+
     // Render text
     simple_renderer_set_shader(sr, SHADER_FOR_EPICNESS);
-    glUniform2f(sr->uniforms[UNIFORM_SLOT_RESOLUTION], (float) w, (float) h);
-    glUniform1f(sr->uniforms[UNIFORM_SLOT_TIME], (float) SDL_GetTicks() / 1000.0f);
-    glUniform2f(sr->uniforms[UNIFORM_SLOT_CAMERA_POS], sr->camera_pos.x, sr->camera_pos.y);
-    glUniform1f(sr->uniforms[UNIFORM_SLOT_CAMERA_SCALE], sr->camera_scale);
     {
         for (size_t row = 0; row < editor->lines.count; ++row) {
             Line line = editor->lines.items[row];
@@ -114,10 +113,6 @@ void render_editor(SDL_Window *window, Free_Glyph_Atlas *atlas, Simple_Renderer
 
     // Render cursor
     simple_renderer_set_shader(sr, SHADER_FOR_COLOR);
-    glUniform2f(sr->uniforms[UNIFORM_SLOT_RESOLUTION], (float) w, (float) h);
-    glUniform1f(sr->uniforms[UNIFORM_SLOT_TIME], (float) SDL_GetTicks() / 1000.0f);
-    glUniform2f(sr->uniforms[UNIFORM_SLOT_CAMERA_POS], sr->camera_pos.x, sr->camera_pos.y);
-    glUniform1f(sr->uniforms[UNIFORM_SLOT_CAMERA_SCALE], sr->camera_scale);
     {
         float CURSOR_WIDTH = 5.0f;
         Uint32 CURSOR_BLINK_THRESHOLD = 500;

+ 4 - 0
src/simple_renderer.c

@@ -210,6 +210,10 @@ void simple_renderer_set_shader(Simple_Renderer *sr, Simple_Shader shader)
     sr->current_shader = shader;
     glUseProgram(sr->programs[sr->current_shader]);
     get_uniform_location(sr->programs[sr->current_shader], sr->uniforms);
+    glUniform2f(sr->uniforms[UNIFORM_SLOT_RESOLUTION], sr->resolution.x, sr->resolution.y);
+    glUniform1f(sr->uniforms[UNIFORM_SLOT_TIME], sr->time);
+    glUniform2f(sr->uniforms[UNIFORM_SLOT_CAMERA_POS], sr->camera_pos.x, sr->camera_pos.y);
+    glUniform1f(sr->uniforms[UNIFORM_SLOT_CAMERA_SCALE], sr->camera_scale);
 }
 
 void simple_renderer_flush(Simple_Renderer *sr)

+ 3 - 1
src/simple_renderer.h

@@ -48,11 +48,13 @@ typedef struct {
     Simple_Vertex verticies[SIMPLE_VERTICIES_CAP];
     size_t verticies_count;
 
+    Vec2f resolution;
+    float time;
+
     Vec2f camera_pos;
     float camera_scale;
     float camera_scale_vel;
     Vec2f camera_vel;
-
 } Simple_Renderer;
 
 void simple_renderer_init(Simple_Renderer *sr,