Browse Source

remove old code path for static shader attributes

main
cinnaboot 5 years ago
parent
commit
364e4de995
  1. 57
      src/main.cpp
  2. 63
      src/shader.cpp
  3. 27
      src/shader.h

57
src/main.cpp

@ -53,35 +53,6 @@ struct RenderState
PointLight* lights;
};
mesh
initCubeMesh()
{
mesh m = {0};
m.num_vertices = 8;
m.vertices = (glm::vec3*) std::calloc(m.num_vertices, sizeof(glm::vec3));
m.vertices[0] = { -1, 1, -1 };
m.vertices[1] = { -1, -1, -1 };
m.vertices[2] = { 1, -1, -1 };
m.vertices[3] = { 1, 1, -1 };
m.vertices[4] = { -1, 1, 1 };
m.vertices[5] = { -1, -1, 1 };
m.vertices[6] = { 1, -1, 1 };
m.vertices[7] = { 1, 1, 1 };
m.num_indices = 36; // 6 sides, 2 tris per side, 3 verts per tri
m.indices = (u16*) std::calloc(m.num_indices, sizeof(u16));
u16 indices[36] = {
0, 1, 2, 0, 2, 3,
3, 2, 6, 3, 6, 7,
7, 6, 5, 7, 5, 4,
4, 5, 0, 4, 1, 0,
0, 3, 4, 0, 3, 7,
1, 2, 5, 2, 6, 5
};
std::memcpy(m.indices, indices, m.num_indices * sizeof(u16));
return m;
}
// NOTE: equivalent to rgAppend() in libTangerine
model*
@ -248,7 +219,6 @@ addShaders(RenderState* rs)
bool
loadScene(RenderState* rs)
{
mesh cube = initCubeMesh();
const u32 NUM_CUBES = 4;
glm::vec3 cube_locs[NUM_CUBES] = {
glm::vec3(-10, 10, 0),
@ -266,12 +236,6 @@ loadScene(RenderState* rs)
assert(tex_cube != nullptr && tex_cube->num_meshes > 0);
const mesh& texmesh = tex_cube->meshes[0];
// ========
// NOTE: testing new loadGLMesh interface
GLmesh* gl_texmesh = getFreeGLMesh(rs);
#if 1
if (!gl_texmesh) return false;
GLVertexAttrib* pos_attrib = getVertexAttribByName(s_debug, "position");
GLVertexAttrib* normal_attrib = getVertexAttribByName(s_debug, "normal");
if (!pos_attrib || !normal_attrib) return false;
@ -280,25 +244,28 @@ loadScene(RenderState* rs)
{ "position", nullptr, pos_attrib, texmesh.vertices },
{ "normal", nullptr, normal_attrib, texmesh.normals }
};
// NOTE: load meshes
GLmesh* gl_texmesh = getFreeGLMesh(rs);
if (!gl_texmesh) return false;
*gl_texmesh = loadGLMesh(texmesh, GL_TRIANGLES, glm::vec3(-5, -5, 0), 2,
attrib_mappings);
if (gl_texmesh->vao_id == 0) return false;
//
// ========
gl_texmesh = getFreeGLMesh(rs);
#endif
if (!gl_texmesh) return false;
*gl_texmesh = loadGLMesh(s_debug, texmesh,
GL_TRIANGLES, glm::vec3(5, 5, 0));
*gl_texmesh = loadGLMesh(texmesh, GL_TRIANGLES, glm::vec3(5, 5, 0), 2,
attrib_mappings);
if (gl_texmesh->vao_id == 0) return false;
for (u32 i = 0; i < NUM_CUBES; i++) {
GLmesh* gmesh = getFreeGLMesh(rs);
if (!gmesh) return false;
*gmesh = loadGLMesh(s_default, cube, GL_TRIANGLES, cube_locs[i]);
*gmesh = loadGLMesh(texmesh, GL_TRIANGLES, cube_locs[i], 2,
attrib_mappings);
if (gmesh->vao_id == 0) return false;
}
@ -335,7 +302,9 @@ loop(RenderState* rs)
GLmesh& glm = rs->gl_meshes[i];
*glm.model_xform = glm::rotate(
*glm.model_xform, (float) M_PI / 60, glm::vec3(0, 1, 0));
shader_program* s = (glm.shader) ? glm.shader : s_debug;
// FIXME: need a shader to gl_mesh mapping
//shader_program* s = (glm.shader) ? glm.shader : s_debug;
shader_program* s = s_debug;
renderVAO(&glm, s);
}

63
src/shader.cpp

@ -137,13 +137,7 @@ renderVAO(GLmesh* glmesh, shader_program* shader)
glBindVertexArray(glmesh->vao_id);
glUniformMatrix4fv(shader->model_xform_id, 1, GL_FALSE,
(float*) glmesh->model_xform);
// FIXME: remove conditional when removing glmesh IDs
if (glmesh->element_buf)
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glmesh->element_buf->id);
else
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glmesh->idx_buf_id);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glmesh->element_buf->id);
glDrawElements(
glmesh->draw_mode, glmesh->num_indices, GL_UNSIGNED_SHORT, 0);
glBindVertexArray(0);
@ -178,61 +172,6 @@ initTransforms(memory_arena* arena,
glBindBuffer(xform_ubo->target, 0);
}
GLmesh
loadGLMesh(shader_program* s,
const mesh& m,
GLenum draw_mode,
const glm::vec3& pos)
{
GLmesh gm = {0};
gm.num_indices = m.num_indices;
gm.draw_mode = draw_mode;
// NOTE: okay to store shader_program pointer on GLmesh here because we
// won't ever delete the shader
gm.shader = s;
glUseProgram(s->prog_id);
glGenVertexArrays(1, &gm.vao_id);
glBindVertexArray(gm.vao_id);
gm.model_xform = (glm::mat4*) std::calloc(1, sizeof(glm::mat4));
*gm.model_xform = glm::translate(glm::mat4(1), pos);
glUniformMatrix4fv(
s->model_xform_id, 1, GL_FALSE, (float*) gm.model_xform);
glGenBuffers(1, &gm.vert_buf_id);
glBindBuffer(GL_ARRAY_BUFFER, gm.vert_buf_id);
glBufferData(GL_ARRAY_BUFFER,
m.num_vertices * 3 * sizeof(GLfloat),
m.vertices,
GL_STATIC_DRAW);
glVertexAttribPointer(POSITION, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(POSITION);
if (m.normals != nullptr) {
glGenBuffers(1, &gm.norm_buf_id);
glBindBuffer(GL_ARRAY_BUFFER, gm.norm_buf_id);
glBufferData(GL_ARRAY_BUFFER,
m.num_vertices * 3 * sizeof(GLfloat),
m.normals,
GL_STATIC_DRAW);
glVertexAttribPointer(NORMAL, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(NORMAL);
}
glGenBuffers(1, &gm.idx_buf_id);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, gm.idx_buf_id);
glBufferData(GL_ELEMENT_ARRAY_BUFFER,
m.num_indices * sizeof(u16),
m.indices,
GL_STATIC_DRAW);
glBindVertexArray(0);
glUseProgram(0);
return gm;
}
GLVertexAttrib*
getVertexAttribByName(shader_program* shader, const char* name)
{

27
src/shader.h

@ -105,25 +105,11 @@ struct GLmesh
GLenum draw_mode; // NOTE: GL_LINES, GL_TRIANGLES
GLenum usage; // NOTE: GL_STATIC_DRAW, GL_DYNAMIC_DRAW
// FIXME: should probably map meshes/entities to shaders in a more abstract
// way. libTangerine maps each shader with a group of entities in a
// 'render_group' object, but that limits the use of groups to a single
// shader program
shader_program* shader;
glm::mat4* model_xform;
// FIXME: WIP
u32 num_vertex_attrib_buffers;
gl_buffer* vertex_attrib_buffers;
gl_buffer* element_buf;
// WIP
// FIXME: replace IDs here with gl_buffer struct array?
GLuint vert_buf_id;
GLuint norm_buf_id;
GLuint uv_buf_id;
GLuint clr_buf_id;
GLuint idx_buf_id;
};
// TODO: node/tree structure for entities
@ -173,14 +159,6 @@ struct transforms
glm::mat4 normal_xform;
};
// FIXME: won't need this enum when dynamic shader parsing is working
enum glsl_layout
{
POSITION,
NORMAL,
UV
};
const float DEFAULT_FOV = 60.f;
const float NEAR_CLIP_PLANE = 5.f;
@ -202,11 +180,6 @@ shader_program* getShaderByID(GLContext* gl_ctx, GLuint prog_id);
shader_program* getShaderByHash(GLContext* gl_ctx, u64 hash);
shader_program* getFreeShader(GLContext* gl_ctx);
void renderVAO(GLmesh* glmesh, shader_program* shader);
GLmesh loadGLMesh(shader_program* s,
const mesh& m,
GLenum draw_mode,
const glm::vec3& pos);
// NOTE: testing new loadGLMesh interface
GLVertexAttrib* getVertexAttribByName(shader_program* shader, const char* name);
GLmesh loadGLMesh(const mesh& m,
GLenum draw_mode,

Loading…
Cancel
Save