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
}
}
+// 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)
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);
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);