From 364e4de9957074818023ec482042ef8361e78b0b Mon Sep 17 00:00:00 2001 From: cinnaboot Date: Mon, 27 Dec 2021 16:14:07 -0500 Subject: [PATCH] remove old code path for static shader attributes --- src/main.cpp | 57 +++++++++++---------------------------------- src/shader.cpp | 63 +------------------------------------------------- src/shader.h | 27 ---------------------- 3 files changed, 14 insertions(+), 133 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index d5f1924..04cbe73 100644 --- a/src/main.cpp +++ b/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); } diff --git a/src/shader.cpp b/src/shader.cpp index 06c18af..7e7e8f7 100644 --- a/src/shader.cpp +++ b/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) { diff --git a/src/shader.h b/src/shader.h index a32d516..34678c7 100644 --- a/src/shader.h +++ b/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,