From ba0c18bac71f109a933688dd304254e464cfaf52 Mon Sep 17 00:00:00 2001 From: cinnaboot Date: Thu, 2 Dec 2021 20:48:23 -0500 Subject: [PATCH] remove gl_mesh_array and light_array structures --- src/GLDebug.h | 9 ++++++--- src/main.cpp | 49 ++++++++++++++++++++----------------------------- src/shader.cpp | 9 +++++---- src/shader.h | 21 ++++----------------- 4 files changed, 35 insertions(+), 53 deletions(-) diff --git a/src/GLDebug.h b/src/GLDebug.h index b0056a2..254cd37 100644 --- a/src/GLDebug.h +++ b/src/GLDebug.h @@ -28,8 +28,10 @@ glEnumToString(GLenum e) case GL_FLOAT_VEC4: return "GL_FLOAT_VEC4"; case GL_DEBUG_TYPE_ERROR: return "GL_DEBUG_TYPE_ERROR"; - case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: return "GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR"; - case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: return "GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR"; + case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: + return "GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR"; + case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: + return "GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR"; case GL_DEBUG_TYPE_PORTABILITY: return "GL_DEBUG_TYPE_PORTABILITY"; case GL_DEBUG_TYPE_PERFORMANCE: return "GL_DEBUG_TYPE_PERFORMANCE"; case GL_DEBUG_TYPE_MARKER: return "GL_DEBUG_TYPE_MARKER"; @@ -40,7 +42,8 @@ glEnumToString(GLenum e) case GL_DEBUG_SEVERITY_HIGH: return "GL_DEBUG_SEVERITY_HIGH"; case GL_DEBUG_SEVERITY_MEDIUM: return "GL_DEBUG_SEVERITY_MEDIUM"; case GL_DEBUG_SEVERITY_LOW: return "GL_DEBUG_SEVERITY_LOW"; - case GL_DEBUG_SEVERITY_NOTIFICATION: return "GL_DEBUG_SEVERITY_NOTIFICATION"; + case GL_DEBUG_SEVERITY_NOTIFICATION: + return "GL_DEBUG_SEVERITY_NOTIFICATION"; default: return "???"; } diff --git a/src/main.cpp b/src/main.cpp index efb58bd..34a86cc 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -22,15 +22,21 @@ struct SDLHandles struct RenderState { memory_arena* arena; + // FIXME: revert back to num_/max_(models|textures) model_assets* assets; texture_assets* textures; transforms* xforms; // NOTE: would be part of camera in libTangerine SDLHandles* handles; - GLContext* gl_ctx; - gl_mesh_array* gl_mesh_arr; - light_array lights; + + u32 num_gl_meshes; + u32 max_gl_meshes; + GLmesh* gl_meshes; + + u32 num_lights; + u32 max_lights; + PointLight* lights; }; mesh @@ -101,33 +107,16 @@ getModel(RenderState* rs, const char* filepath) return mdl; } -gl_mesh* -getFreeGLMesh(gl_mesh_array* gma) +GLmesh* +getFreeGLMesh(RenderState* rs) { - if (gma->count < gma->max) { - gl_mesh* glm = &gma->gl_meshes[gma->count]; - gma->count++; - - return glm; - } + if (rs->num_gl_meshes < rs->max_gl_meshes) + return &rs->gl_meshes[rs->num_gl_meshes++]; - std::cout << "Error, gl_mesh_array is full\n"; + printf("%s(), Error, rs->gl_meshes is full\n", __FUNCTION__); return nullptr; } -gl_mesh_array* -initGLMeshArray(memory_arena* arena, u32 count) -{ - gl_mesh_array* gma = - (gl_mesh_array*) arenaAllocateBlock(arena, sizeof(gl_mesh_array)); - gma->max = count; - gma->count = 0; - gma->gl_meshes = - (gl_mesh*) arenaAllocateBlock(arena, count * sizeof(gl_mesh)); - - return gma; -} - #define DEFAULT_SHADER_COUNT 64 #define DEFAULT_UBO_COUNT 32 GLContext* @@ -163,7 +152,9 @@ initRenderState(memory_arena* arena) (transforms*) arenaAllocateBlock(arena, sizeof(transforms)); rs->handles = (SDLHandles*) arenaAllocateBlock(arena, sizeof(SDLHandles)); - rs->gl_mesh_arr = initGLMeshArray(arena, 256); + rs->max_gl_meshes = 256; + rs->gl_meshes = (GLmesh*) arenaAllocateBlock( + arena, rs->max_gl_meshes * sizeof(GLmesh)); } return rs; @@ -245,7 +236,7 @@ loadScene(RenderState* rs) return false; for (u32 i = 0; i < NUM_CUBES; i++) { - gl_mesh* gmesh = getFreeGLMesh(rs->gl_mesh_arr); + GLmesh* gmesh = getFreeGLMesh(rs); if (!gmesh) return false; @@ -282,8 +273,8 @@ loop(RenderState* rs) glClearColor(0.2, 0.2, 0.2, 1); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - for (u32 i = 0; i < rs->gl_mesh_arr->count; i++) { - gl_mesh& glm = rs->gl_mesh_arr->gl_meshes[i]; + for (u32 i = 0; i < rs->num_gl_meshes; i++) { + GLmesh& glm = rs->gl_meshes[i]; *glm.model_xform = glm::rotate( *glm.model_xform, (float) M_PI / 60, glm::vec3(0, 1, 0)); renderVAO(&glm); diff --git a/src/shader.cpp b/src/shader.cpp index b2e88d3..707b0a0 100644 --- a/src/shader.cpp +++ b/src/shader.cpp @@ -109,7 +109,7 @@ addShaderProgram(memory_arena* arena, } void -renderVAO(gl_mesh* glmesh) +renderVAO(GLmesh* glmesh) { glUseProgram(glmesh->shader->prog_id); glBindVertexArray(glmesh->vao_id); @@ -171,6 +171,7 @@ parseUniform(memory_arena* arena, shader_program* s, u32 uniform_idx) unif.idx = uniform_idx; unif.data_size = getGLTypeSize(unif.data_type); + assert(unif.data_size > 0); unif.name_len += 1; // NOTE: gl param dosen't account for null terminator unif.name = (char*) arenaAllocateBlock(arena, (unif.name_len) * sizeof(char)); @@ -344,16 +345,16 @@ initCTXSizes(GLContext* gl_ctx) } } -gl_mesh +GLmesh loadGLMesh(shader_program* s, const mesh& m, GLenum draw_mode, const glm::vec3& pos) { - gl_mesh gm = {0}; + GLmesh gm = {0}; gm.num_indices = m.num_indices; gm.draw_mode = draw_mode; - // NOTE: okay to store shader_program pointer on gl_mesh here because we + // NOTE: okay to store shader_program pointer on GLmesh here because we // won't ever delete the shader gm.shader = s; diff --git a/src/shader.h b/src/shader.h index ce3bcd4..9af7b91 100644 --- a/src/shader.h +++ b/src/shader.h @@ -94,7 +94,7 @@ struct transforms glm::mat4 normal_xform; }; -struct gl_mesh +struct GLmesh { u32 num_indices; GLuint vao_id; @@ -112,26 +112,13 @@ struct gl_mesh GLuint idx_buf_id; }; -struct gl_mesh_array -{ - u32 count; - u32 max; - gl_mesh* gl_meshes; -}; - -struct point_light +struct PointLight { glm::vec3 position; glm::vec3 color; u32 intensity; }; -struct light_array -{ - u32 count; - point_light* lights; -}; - struct node; struct entity; struct animation; @@ -152,8 +139,8 @@ bool addShaderProgram(memory_arena* arena, const char* vs, const char* fs, const char* name); -void renderVAO(gl_mesh* glmesh); -gl_mesh loadGLMesh(shader_program* s, +void renderVAO(GLmesh* glmesh); +GLmesh loadGLMesh(shader_program* s, const mesh& m, GLenum draw_mode, const glm::vec3& pos);