|
|
|
|
@ -39,13 +39,11 @@ void initMatrices(projection_type p);
|
|
|
|
|
void openglDebugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, |
|
|
|
|
GLsizei length, const GLchar* message, const void* userParam); |
|
|
|
|
// TODO: move hex logic to new file
|
|
|
|
|
bool initHexGridBuffers(std::vector<hex_info>* hexes); |
|
|
|
|
bool initHexGridBuffers(render_state* rs, std::vector<hex_info>* hexes); |
|
|
|
|
void fillTriangleBufferFromHex(GLfloat buf[], int idx, const hex_info &hex); |
|
|
|
|
void fillColorBuffer(GLfloat buf[], int len, std::vector<hex_info>* hexes); |
|
|
|
|
void fillHexLineBuffer(GLfloat buf[], int len, std::vector<hex_info>* hexes); |
|
|
|
|
|
|
|
|
|
static render_state* g_render_state; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// interface
|
|
|
|
|
|
|
|
|
|
@ -53,8 +51,6 @@ static render_state* g_render_state;
|
|
|
|
|
bool |
|
|
|
|
initRenderer(render_state* rs) |
|
|
|
|
{ |
|
|
|
|
g_render_state = rs; |
|
|
|
|
|
|
|
|
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG); |
|
|
|
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); |
|
|
|
|
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); |
|
|
|
|
@ -176,7 +172,7 @@ createScene(render_state* rs, std::vector<hex_info>* hexes, Entity* entities, ui
|
|
|
|
|
entities[i].ren_group->shader = rs->default_shader; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!initHexGridBuffers(hexes)) |
|
|
|
|
if (!initHexGridBuffers(rs, hexes)) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
// debug draw vertices
|
|
|
|
|
@ -214,9 +210,9 @@ renderFrame(render_state* rs, std::vector<hex_info> *hexes, Entity* entities, ui
|
|
|
|
|
glClearColor(g_clear_col.R, g_clear_col.G, g_clear_col.B, g_clear_col.A); |
|
|
|
|
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); |
|
|
|
|
|
|
|
|
|
glm::mat4 m_model = g_render_state->cam.model; |
|
|
|
|
glm::mat4 m_view = g_render_state->cam.view; |
|
|
|
|
glm::mat4 m_projection = g_render_state->cam.projection; |
|
|
|
|
glm::mat4 m_model = rs->cam.model; |
|
|
|
|
glm::mat4 m_view = rs->cam.view; |
|
|
|
|
glm::mat4 m_projection = rs->cam.projection; |
|
|
|
|
|
|
|
|
|
// filled hexes
|
|
|
|
|
|
|
|
|
|
@ -248,8 +244,8 @@ renderDebug(render_state* rs, std::vector<Point> &vertices)
|
|
|
|
|
buf[6] = vertices[2].x; buf[7] = vertices[2].y; buf[8] = 0; |
|
|
|
|
buf[9] = vertices[3].x; buf[10] = vertices[3].y; buf[11] = 0; |
|
|
|
|
|
|
|
|
|
rgDraw(rs->debug_render_group, g_render_state->cam.model, g_render_state->cam.view, |
|
|
|
|
g_render_state->cam.projection, rs->lights, rs->num_lights, true); |
|
|
|
|
rgDraw(rs->debug_render_group, rs->cam.model, rs->cam.view, |
|
|
|
|
rs->cam.projection, rs->lights, rs->num_lights, true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -268,7 +264,7 @@ openglDebugCallback(GLenum source, GLenum type, GLuint id, GLenum severity,
|
|
|
|
|
|
|
|
|
|
// TODO: move hex logic to new file
|
|
|
|
|
bool |
|
|
|
|
initHexGridBuffers(std::vector<hex_info>* hexes) |
|
|
|
|
initHexGridBuffers(render_state* rs, std::vector<hex_info>* hexes) |
|
|
|
|
{ |
|
|
|
|
// TODO: index duplicate vertices
|
|
|
|
|
// 6 triangles * 3 vertices per triangle * 3 floats per vertex = 54
|
|
|
|
|
@ -276,7 +272,6 @@ initHexGridBuffers(std::vector<hex_info>* hexes)
|
|
|
|
|
uint line_buf_len = hexes->size() * line_vertices_per_hex * 3; // 3 floats per vertex
|
|
|
|
|
uint vbuf_len = hexes->size() * 6 * 3 * 3; |
|
|
|
|
|
|
|
|
|
render_state* rs = g_render_state; |
|
|
|
|
rs->filled_hex_render_group = rgInitSingle(rs->default_shader, vbuf_len, true); |
|
|
|
|
|
|
|
|
|
if (rs->filled_hex_render_group == nullptr) |
|
|
|
|
|