Browse Source

remove color_buffer from render_group

master
cinnaboot 8 years ago
parent
commit
e85ca24423
  1. 4
      data/default.fs
  2. 9
      data/default.vs
  3. 40
      src/render_group.cpp
  4. 1
      src/render_group.h
  5. 6
      src/renderer.cpp
  6. 7
      src/scene_loader.cpp

4
data/default.fs

@ -1,8 +1,8 @@
#version 330 core #version 330 core
in vec3 fragColor; //in vec3 fragColor; // NOTE: removing this line fails to link program... somehow?
in vec3 fragNormal;
in vec3 fragVertex; in vec3 fragVertex;
in vec3 fragNormal;
in vec2 fragUV; in vec2 fragUV;
out vec4 color; out vec4 color;

9
data/default.vs

@ -1,13 +1,11 @@
#version 330 core #version 330 core
layout (location = 0) in vec3 vertexPosition_modelspace; layout (location = 0) in vec3 vertexPosition_modelspace;
layout (location = 1) in vec3 vertexColor; layout (location = 1) in vec3 normal;
layout (location = 2) in vec3 normal; layout (location = 2) in vec3 texCoord;
layout (location = 3) in vec3 texCoord;
out vec3 fragColor;
out vec3 fragNormal;
out vec3 fragVertex; out vec3 fragVertex;
out vec3 fragNormal;
out vec2 fragUV; out vec2 fragUV;
uniform mat4 model; uniform mat4 model;
@ -16,7 +14,6 @@ uniform mat4 projection;
void main() void main()
{ {
fragColor = vertexColor;
fragNormal = normal; fragNormal = normal;
fragVertex = vertexPosition_modelspace; fragVertex = vertexPosition_modelspace;
fragUV = texCoord.st; fragUV = texCoord.st;

40
src/render_group.cpp

@ -199,24 +199,11 @@ rgDraw(render_group* rg, glm::mat4 model_matrix,
ro->vertex_buffer.buffer); ro->vertex_buffer.buffer);
} }
// 2nd attribute buffer : colors // 2rd attribute buffer: normals
if (ro->color_buffer.buffer)
{
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, ro->color_buffer.buffer_id);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, (void*) 0);
if (update_color_data) {
glBufferSubData(GL_ARRAY_BUFFER, 0, ro->color_buffer.buffer_len * sizeof(GLfloat),
ro->color_buffer.buffer);
}
}
// 3rd attribute buffer: normals
if (rg->use_normals) { if (rg->use_normals) {
glEnableVertexAttribArray(2); glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, ro->normal_buffer.buffer_id); glBindBuffer(GL_ARRAY_BUFFER, ro->normal_buffer.buffer_id);
glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 0, (void*) 0); glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, (void*) 0);
glm::mat3 normal_matrix = glm::transpose(glm::inverse(glm::mat3(model_matrix))); glm::mat3 normal_matrix = glm::transpose(glm::inverse(glm::mat3(model_matrix)));
glUniformMatrix3fv(rg->shader.normal_matrix_id, 1, GL_FALSE, &normal_matrix[0][0]); glUniformMatrix3fv(rg->shader.normal_matrix_id, 1, GL_FALSE, &normal_matrix[0][0]);
@ -236,11 +223,11 @@ rgDraw(render_group* rg, glm::mat4 model_matrix,
} }
} }
// 4th attribute buffer: UV coordinates // 3rd attribute buffer: UV coordinates
if (ro->use_texture) { if (ro->use_texture) {
glEnableVertexAttribArray(3); glEnableVertexAttribArray(2);
glBindBuffer(GL_ARRAY_BUFFER, ro->uv_buffer.buffer_id); glBindBuffer(GL_ARRAY_BUFFER, ro->uv_buffer.buffer_id);
glVertexAttribPointer(3, 3, GL_FLOAT, GL_FALSE, 0, (void*) 0); glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 0, (void*) 0);
glBindTexture(GL_TEXTURE_2D, ro->tex_id); glBindTexture(GL_TEXTURE_2D, ro->tex_id);
glUniform1i(rg->shader.sampler_id, 0); glUniform1i(rg->shader.sampler_id, 0);
@ -260,12 +247,10 @@ rgDraw(render_group* rg, glm::mat4 model_matrix,
// cleanup // cleanup
glDisableVertexAttribArray(0); glDisableVertexAttribArray(0);
if (ro->color_buffer.buffer)
glDisableVertexAttribArray(1);
if (rg->use_normals) if (rg->use_normals)
glDisableVertexAttribArray(2); glDisableVertexAttribArray(1);
if (ro->use_texture) if (ro->use_texture)
glDisableVertexAttribArray(3); glDisableVertexAttribArray(2);
glUseProgram(0); glUseProgram(0);
} }
@ -301,8 +286,6 @@ allocateRenderObject(uint buffer_len, uint index_len)
ro->vertex_buffer.buffer_len = buffer_len; ro->vertex_buffer.buffer_len = buffer_len;
ro->normal_buffer.buffer = UTIL_ALLOC(buffer_len, GLfloat); ro->normal_buffer.buffer = UTIL_ALLOC(buffer_len, GLfloat);
ro->normal_buffer.buffer_len = buffer_len; ro->normal_buffer.buffer_len = buffer_len;
ro->color_buffer.buffer = UTIL_ALLOC(buffer_len, GLfloat);
ro->color_buffer.buffer_len = buffer_len;
ro->uv_buffer.buffer = UTIL_ALLOC(buffer_len, GLfloat); ro->uv_buffer.buffer = UTIL_ALLOC(buffer_len, GLfloat);
ro->uv_buffer.buffer_len = buffer_len; ro->uv_buffer.buffer_len = buffer_len;
@ -313,7 +296,6 @@ allocateRenderObject(uint buffer_len, uint index_len)
if (ro->vertex_buffer.buffer == nullptr || if (ro->vertex_buffer.buffer == nullptr ||
ro->normal_buffer.buffer == nullptr || ro->normal_buffer.buffer == nullptr ||
ro->color_buffer.buffer == nullptr ||
((index_len > 0) && (ro->vertex_buffer.buffer == nullptr))) ((index_len > 0) && (ro->vertex_buffer.buffer == nullptr)))
{ {
freeRenderObject(ro); freeRenderObject(ro);
@ -334,7 +316,6 @@ freeRenderObject(render_object* ro)
glDeleteTextures(1, &ro->tex_id); glDeleteTextures(1, &ro->tex_id);
utilSafeFree(ro->vertex_buffer.buffer); utilSafeFree(ro->vertex_buffer.buffer);
utilSafeFree(ro->normal_buffer.buffer); utilSafeFree(ro->normal_buffer.buffer);
utilSafeFree(ro->color_buffer.buffer);
utilSafeFree(ro->uv_buffer.buffer); utilSafeFree(ro->uv_buffer.buffer);
utilSafeFree(ro->index_buffer.buffer); utilSafeFree(ro->index_buffer.buffer);
utilSafeFree(ro); utilSafeFree(ro);
@ -345,12 +326,11 @@ convertMeshInfo(meMeshInfo* mesh, render_object* ro, bool use_normals, bool use_
{ {
uint vertex_buf_len = mesh->num_vertices * 3; uint vertex_buf_len = mesh->num_vertices * 3;
GLfloat* vertex_buf = ro->vertex_buffer.buffer; GLfloat* vertex_buf = ro->vertex_buffer.buffer;
GLfloat* color_buf = ro->color_buffer.buffer;
GLfloat* normal_buf = ro->normal_buffer.buffer; GLfloat* normal_buf = ro->normal_buffer.buffer;
GLfloat* uv_buf = ro->uv_buffer.buffer; GLfloat* uv_buf = ro->uv_buffer.buffer;
uint* index_buf = ro->index_buffer.buffer; uint* index_buf = ro->index_buffer.buffer;
if (!vertex_buf || !color_buf || !normal_buf || !index_buf) if (!vertex_buf || !normal_buf || !index_buf)
return false; return false;
// dump vertices, colors, normals, and texture coords into render_group buffers // dump vertices, colors, normals, and texture coords into render_group buffers
@ -384,7 +364,6 @@ convertMeshInfo(meMeshInfo* mesh, render_object* ro, bool use_normals, bool use_
} }
} }
color_buf[i] = mesh->diffuse_color[vertex_prop_index];
vertex_prop_index++; vertex_prop_index++;
if (vertex_prop_index == 3) { if (vertex_prop_index == 3) {
@ -398,7 +377,6 @@ convertMeshInfo(meMeshInfo* mesh, render_object* ro, bool use_normals, bool use_
index_buf[i] = mesh->indices[i]; index_buf[i] = mesh->indices[i];
rgBufferData(&ro->vertex_buffer, GL_DYNAMIC_DRAW, GL_ARRAY_BUFFER); rgBufferData(&ro->vertex_buffer, GL_DYNAMIC_DRAW, GL_ARRAY_BUFFER);
rgBufferData(&ro->color_buffer, GL_STATIC_DRAW, GL_ARRAY_BUFFER);
if (use_normals) if (use_normals)
rgBufferData(&ro->normal_buffer, GL_STATIC_DRAW, GL_ARRAY_BUFFER); rgBufferData(&ro->normal_buffer, GL_STATIC_DRAW, GL_ARRAY_BUFFER);
if (use_texture) if (use_texture)

1
src/render_group.h

@ -45,7 +45,6 @@ struct render_object
gl_buffer vertex_buffer; gl_buffer vertex_buffer;
gl_buffer normal_buffer; gl_buffer normal_buffer;
gl_buffer color_buffer;
gl_buffer uv_buffer; gl_buffer uv_buffer;
gl_index_buffer index_buffer; gl_index_buffer index_buffer;
}; };

6
src/renderer.cpp

@ -157,21 +157,15 @@ renCreateScene(render_state* rs, Entity* entities, uint32 entity_count)
return false; return false;
gl_buffer& debug_vertex_buf = rs->debug_render_group->render_objects[0]->vertex_buffer; gl_buffer& debug_vertex_buf = rs->debug_render_group->render_objects[0]->vertex_buffer;
gl_buffer& debug_color_buf = rs->debug_render_group->render_objects[0]->color_buffer;
gl_buffer& debug_normal_buf = rs->debug_render_group->render_objects[0]->normal_buffer; gl_buffer& debug_normal_buf = rs->debug_render_group->render_objects[0]->normal_buffer;
for (uint i = 0; i < debug_buf_len; i += 3) { for (uint i = 0; i < debug_buf_len; i += 3) {
debug_color_buf.buffer[i] = 1.f;
debug_color_buf.buffer[i + 1] = 0.f;
debug_color_buf.buffer[i + 2] = 0.f;
debug_normal_buf.buffer[i] = 0.f; debug_normal_buf.buffer[i] = 0.f;
debug_normal_buf.buffer[i + 1] = 0.f; debug_normal_buf.buffer[i + 1] = 0.f;
debug_normal_buf.buffer[i + 2] = 1.f; debug_normal_buf.buffer[i + 2] = 1.f;
} }
rgBufferData(&debug_vertex_buf, GL_DYNAMIC_DRAW, GL_ARRAY_BUFFER); rgBufferData(&debug_vertex_buf, GL_DYNAMIC_DRAW, GL_ARRAY_BUFFER);
rgBufferData(&debug_color_buf, GL_STATIC_DRAW, GL_ARRAY_BUFFER);
rgBufferData(&debug_normal_buf, GL_STATIC_DRAW, GL_ARRAY_BUFFER); rgBufferData(&debug_normal_buf, GL_STATIC_DRAW, GL_ARRAY_BUFFER);
return true; return true;

7
src/scene_loader.cpp

@ -176,7 +176,6 @@ slCreateHexRenderGroups(hexgrid& hg, render_state* rs)
rgBufferData(&ro->vertex_buffer, GL_DYNAMIC_DRAW, GL_ARRAY_BUFFER); rgBufferData(&ro->vertex_buffer, GL_DYNAMIC_DRAW, GL_ARRAY_BUFFER);
rgBufferData(&ro->normal_buffer, GL_STATIC_DRAW, GL_ARRAY_BUFFER); rgBufferData(&ro->normal_buffer, GL_STATIC_DRAW, GL_ARRAY_BUFFER);
rgBufferData(&ro->color_buffer, GL_DYNAMIC_DRAW, GL_ARRAY_BUFFER);
rgBufferData(&ro->uv_buffer, GL_DYNAMIC_DRAW, GL_ARRAY_BUFFER); rgBufferData(&ro->uv_buffer, GL_DYNAMIC_DRAW, GL_ARRAY_BUFFER);
ro = rg_lines->render_objects[0]; ro = rg_lines->render_objects[0];
@ -185,7 +184,6 @@ slCreateHexRenderGroups(hexgrid& hg, render_state* rs)
rgBufferData(&ro->vertex_buffer, GL_DYNAMIC_DRAW, GL_ARRAY_BUFFER); rgBufferData(&ro->vertex_buffer, GL_DYNAMIC_DRAW, GL_ARRAY_BUFFER);
rgBufferData(&ro->normal_buffer, GL_STATIC_DRAW, GL_ARRAY_BUFFER); rgBufferData(&ro->normal_buffer, GL_STATIC_DRAW, GL_ARRAY_BUFFER);
rgBufferData(&ro->color_buffer, GL_DYNAMIC_DRAW, GL_ARRAY_BUFFER);
rgBufferData(&ro->uv_buffer, GL_DYNAMIC_DRAW, GL_ARRAY_BUFFER); rgBufferData(&ro->uv_buffer, GL_DYNAMIC_DRAW, GL_ARRAY_BUFFER);
return true; return true;
@ -350,16 +348,11 @@ populateLineGLBuffers(hexgrid& hg, render_group* rg_lines)
{ {
render_object* ro = rg_lines->render_objects[0]; render_object* ro = rg_lines->render_objects[0];
gl_buffer& vbuf = ro->vertex_buffer; gl_buffer& vbuf = ro->vertex_buffer;
gl_buffer& cbuf = ro->color_buffer;
gl_buffer& normal_buf = ro->normal_buffer; gl_buffer& normal_buf = ro->normal_buffer;
gl_buffer& uv_buf = ro->uv_buffer; gl_buffer& uv_buf = ro->uv_buffer;
assert((hg.hex_array->size() * 6 * 2 * 3) == vbuf.buffer_len); assert((hg.hex_array->size() * 6 * 2 * 3) == vbuf.buffer_len);
// fill line color buffer with black
for (uint i = 0; i < cbuf.buffer_len; i++)
cbuf.buffer[i] = 0.f;
// cheat at vertex normals since all hexes lay flat on z-axis // cheat at vertex normals since all hexes lay flat on z-axis
for (uint i = 0; i < normal_buf.buffer_len; i += 3) { for (uint i = 0; i < normal_buf.buffer_len; i += 3) {
normal_buf.buffer[i] = 0.f; normal_buf.buffer[i] = 0.f;

Loading…
Cancel
Save