rendering at full window dimensions now
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Sat, 24 Oct 2020 03:40:37 +0000 (22:40 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Sat, 24 Oct 2020 03:40:37 +0000 (22:40 -0500)
src/sim.cpp

index 19de0be9f5ab96452ea792a8fabeffb6c20fcbe7..8ceaa8c99c936a4e88f959080603018149f01e3d 100644 (file)
@@ -33,10 +33,14 @@ glfw_key_handler(GLFWwindow* window, i32 key, i32 scancode, i32 action, i32 mods
                glfwSetWindowShouldClose(window, 1);
 }
 
+internal i32 window_width;
+internal i32 window_height;
+
 internal void
 glfw_resize_handler(GLFWwindow* window, i32 width, i32 height)
 {
-       glViewport(0, 0, width, height);
+    window_width = width;
+    window_height = height;
 }
 
 internal void
@@ -230,8 +234,10 @@ update(SimState* state, f64 dt)
     }
 }
 
+// NOTE CLEANUP(Brendan): Bunch of graphics state that should go elsewhere.
 internal GLuint body_buffer;
 internal GLuint circle_mesh;
+internal GLuint body_program;
 
 internal void
 draw(SimState* state)
@@ -241,6 +247,14 @@ draw(SimState* state)
     glBufferSubData(GL_ARRAY_BUFFER, 0, state->bodies.count * sizeof(Body), state->bodies.data);
     glBindBuffer(GL_ARRAY_BUFFER, -1);
     
+    glUseProgram(body_program);
+    
+    mat4 ortho_mat;
+    mat4_ortho(&ortho_mat, 0, window_width, 0, window_height, 0.0f, 100.0f);
+    GLuint ortho_mat_loc = glGetUniformLocation(body_program, "u_proj");
+    glUniformMatrix4fv(ortho_mat_loc, 1, false, (f32 *) ortho_mat);
+    glViewport(0, 0, window_width, window_height);
+    
     // NOTE(Brendan): Clear the screen.
     glClearColor(0.1, 0.1, 0.1, 1.0);
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
@@ -287,25 +301,19 @@ main(i32 argc, char* argv[])
     
     circle_mesh = create_circle_mesh();
     
-    GLuint v_shader = load_shader(GL_VERTEX_SHADER, "res/shaders/planet_vert.glsl");
-    GLuint f_shader = load_shader(GL_FRAGMENT_SHADER, "res/shaders/planet_frag.glsl");
-    GLuint program  = create_program(v_shader, f_shader);
-    glUseProgram(program);
+    body_program  = create_program(load_shader(GL_VERTEX_SHADER, "res/shaders/planet_vert.glsl"),
+                                   load_shader(GL_FRAGMENT_SHADER, "res/shaders/planet_frag.glsl"));
+    glUseProgram(body_program);
     
-    mat4 ortho_mat;
-    mat4_ortho(&ortho_mat, 0, 800, 0, 800, 0.0f, 100.0f);
-    
-    GLuint ortho_mat_loc = glGetUniformLocation(program, "u_proj");
-    glUniformMatrix4fv(ortho_mat_loc, 1, false, (f32 *) ortho_mat);
-    
-    GLuint planet_colors_loc = glGetUniformLocation(program, "u_planet_colors");
-    persist GLfloat planet_colors[16] = {
-        1.0f, 0.0f, 0.0f, 1.0f,
-        0.0f, 1.0f, 0.0f, 1.0f,
-        0.0f, 0.0f, 1.0f, 1.0f,
-        1.0f, 1.0f, 1.0f, 1.0f,
+    GLuint planet_colors_loc = glGetUniformLocation(body_program, "u_planet_colors");
+    persist GLfloat planet_colors[4][4] =
+    {
+        { 1.0f, 0.0f, 0.0f, 1.0f },
+        { 0.0f, 1.0f, 0.0f, 1.0f },
+        { 0.0f, 0.0f, 1.0f, 1.0f },
+        { 1.0f, 1.0f, 1.0f, 1.0f },
     };
-    glUniform4fv(planet_colors_loc, 4, planet_colors);
+    glUniform4fv(planet_colors_loc, 4, (GLfloat *) planet_colors);
     
     auto state = alloc<SimState>();
     sim_state_init(state);