mat4_ortho(&ortho_mat, 0, 800, 0, 800, 0.0f, 100.0f);
GLuint ortho_mat_loc = glGetUniformLocation(program, "u_proj");
+ logprint(LOG_LEVEL_INFO, "Projection loc: %d", ortho_mat_loc);
glUniformMatrix4fv(ortho_mat_loc, 1, false, (f32 *) ortho_mat);
+ GLuint planet_colors_loc = glGetUniformLocation(program, "u_planet_colors");
+ logprint(LOG_LEVEL_INFO, "Planet color loc: %d", planet_colors_loc);
+ 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,
+ };
+ glUniform4fv(planet_colors_loc, 4, planet_colors);
+
auto state = alloc<SimState>();
// NOTE(Brendan): Need to initialize the array since it does not get constructed because I refuse to use the 'new' keyword. alloc<T> uses malloc under the hood and cannot initialize the result.
state->bodies.init();
tmp_body.pos = V2f{ randf(0, 800), randf(0, 800) };
tmp_body.vel = V2f{ randf(-50.0f, 50.0f), randf(-50.0f, 50.0f) };
tmp_body.mass = randf(5.0f, 25.0f);
+ tmp_body.color_idx = rand() % 4;
+ logprint(LOG_LEVEL_INFO, "Body color idx: %d", tmp_body.color_idx);
state->bodies.push(tmp_body);
}
glBufferData(GL_ARRAY_BUFFER, sizeof(Body) * state->bodies.count, state->bodies.data, GL_STREAM_DRAW);
glEnableVertexAttribArray(1);
glEnableVertexAttribArray(2);
+ glEnableVertexAttribArray(3);
glVertexAttribDivisor(1, 1);
glVertexAttribDivisor(2, 1);
+ glVertexAttribDivisor(3, 1);
glVertexAttribPointer(1, 2, GL_FLOAT, false, sizeof(Body), (void *) offsetof(Body, pos.x));
glVertexAttribPointer(2, 1, GL_FLOAT, false, sizeof(Body), (void *) offsetof(Body, mass));
+ glVertexAttribPointer(3, 1, GL_BYTE, false, sizeof(Body), (void *) offsetof(Body, color_idx));
glBindBuffer(GL_ARRAY_BUFFER, -1);
}