Browse Source

remove gl_mesh_array and light_array structures

main
cinnaboot 5 years ago
parent
commit
ba0c18bac7
  1. 9
      src/GLDebug.h
  2. 49
      src/main.cpp
  3. 9
      src/shader.cpp
  4. 21
      src/shader.h

9
src/GLDebug.h

@ -28,8 +28,10 @@ glEnumToString(GLenum e)
case GL_FLOAT_VEC4: return "GL_FLOAT_VEC4"; case GL_FLOAT_VEC4: return "GL_FLOAT_VEC4";
case GL_DEBUG_TYPE_ERROR: return "GL_DEBUG_TYPE_ERROR"; 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_DEPRECATED_BEHAVIOR:
case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: return "GL_DEBUG_TYPE_UNDEFINED_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_PORTABILITY: return "GL_DEBUG_TYPE_PORTABILITY";
case GL_DEBUG_TYPE_PERFORMANCE: return "GL_DEBUG_TYPE_PERFORMANCE"; case GL_DEBUG_TYPE_PERFORMANCE: return "GL_DEBUG_TYPE_PERFORMANCE";
case GL_DEBUG_TYPE_MARKER: return "GL_DEBUG_TYPE_MARKER"; 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_HIGH: return "GL_DEBUG_SEVERITY_HIGH";
case GL_DEBUG_SEVERITY_MEDIUM: return "GL_DEBUG_SEVERITY_MEDIUM"; case GL_DEBUG_SEVERITY_MEDIUM: return "GL_DEBUG_SEVERITY_MEDIUM";
case GL_DEBUG_SEVERITY_LOW: return "GL_DEBUG_SEVERITY_LOW"; 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 "???"; default: return "???";
} }

49
src/main.cpp

@ -22,15 +22,21 @@ struct SDLHandles
struct RenderState struct RenderState
{ {
memory_arena* arena; memory_arena* arena;
// FIXME: revert back to num_/max_(models|textures)
model_assets* assets; model_assets* assets;
texture_assets* textures; texture_assets* textures;
transforms* xforms; // NOTE: would be part of camera in libTangerine transforms* xforms; // NOTE: would be part of camera in libTangerine
SDLHandles* handles; SDLHandles* handles;
GLContext* gl_ctx; 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 mesh
@ -101,33 +107,16 @@ getModel(RenderState* rs, const char* filepath)
return mdl; return mdl;
} }
gl_mesh* GLmesh*
getFreeGLMesh(gl_mesh_array* gma) getFreeGLMesh(RenderState* rs)
{ {
if (gma->count < gma->max) { if (rs->num_gl_meshes < rs->max_gl_meshes)
gl_mesh* glm = &gma->gl_meshes[gma->count]; return &rs->gl_meshes[rs->num_gl_meshes++];
gma->count++;
return glm;
}
std::cout << "Error, gl_mesh_array is full\n"; printf("%s(), Error, rs->gl_meshes is full\n", __FUNCTION__);
return nullptr; 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_SHADER_COUNT 64
#define DEFAULT_UBO_COUNT 32 #define DEFAULT_UBO_COUNT 32
GLContext* GLContext*
@ -163,7 +152,9 @@ initRenderState(memory_arena* arena)
(transforms*) arenaAllocateBlock(arena, sizeof(transforms)); (transforms*) arenaAllocateBlock(arena, sizeof(transforms));
rs->handles = rs->handles =
(SDLHandles*) arenaAllocateBlock(arena, sizeof(SDLHandles)); (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; return rs;
@ -245,7 +236,7 @@ loadScene(RenderState* rs)
return false; return false;
for (u32 i = 0; i < NUM_CUBES; i++) { for (u32 i = 0; i < NUM_CUBES; i++) {
gl_mesh* gmesh = getFreeGLMesh(rs->gl_mesh_arr); GLmesh* gmesh = getFreeGLMesh(rs);
if (!gmesh) if (!gmesh)
return false; return false;
@ -282,8 +273,8 @@ loop(RenderState* rs)
glClearColor(0.2, 0.2, 0.2, 1); glClearColor(0.2, 0.2, 0.2, 1);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
for (u32 i = 0; i < rs->gl_mesh_arr->count; i++) { for (u32 i = 0; i < rs->num_gl_meshes; i++) {
gl_mesh& glm = rs->gl_mesh_arr->gl_meshes[i]; GLmesh& glm = rs->gl_meshes[i];
*glm.model_xform = glm::rotate( *glm.model_xform = glm::rotate(
*glm.model_xform, (float) M_PI / 60, glm::vec3(0, 1, 0)); *glm.model_xform, (float) M_PI / 60, glm::vec3(0, 1, 0));
renderVAO(&glm); renderVAO(&glm);

9
src/shader.cpp

@ -109,7 +109,7 @@ addShaderProgram(memory_arena* arena,
} }
void void
renderVAO(gl_mesh* glmesh) renderVAO(GLmesh* glmesh)
{ {
glUseProgram(glmesh->shader->prog_id); glUseProgram(glmesh->shader->prog_id);
glBindVertexArray(glmesh->vao_id); glBindVertexArray(glmesh->vao_id);
@ -171,6 +171,7 @@ parseUniform(memory_arena* arena, shader_program* s, u32 uniform_idx)
unif.idx = uniform_idx; unif.idx = uniform_idx;
unif.data_size = getGLTypeSize(unif.data_type); 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_len += 1; // NOTE: gl param dosen't account for null terminator
unif.name = unif.name =
(char*) arenaAllocateBlock(arena, (unif.name_len) * sizeof(char)); (char*) arenaAllocateBlock(arena, (unif.name_len) * sizeof(char));
@ -344,16 +345,16 @@ initCTXSizes(GLContext* gl_ctx)
} }
} }
gl_mesh GLmesh
loadGLMesh(shader_program* s, loadGLMesh(shader_program* s,
const mesh& m, const mesh& m,
GLenum draw_mode, GLenum draw_mode,
const glm::vec3& pos) const glm::vec3& pos)
{ {
gl_mesh gm = {0}; GLmesh gm = {0};
gm.num_indices = m.num_indices; gm.num_indices = m.num_indices;
gm.draw_mode = draw_mode; 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 // won't ever delete the shader
gm.shader = s; gm.shader = s;

21
src/shader.h

@ -94,7 +94,7 @@ struct transforms
glm::mat4 normal_xform; glm::mat4 normal_xform;
}; };
struct gl_mesh struct GLmesh
{ {
u32 num_indices; u32 num_indices;
GLuint vao_id; GLuint vao_id;
@ -112,26 +112,13 @@ struct gl_mesh
GLuint idx_buf_id; GLuint idx_buf_id;
}; };
struct gl_mesh_array struct PointLight
{
u32 count;
u32 max;
gl_mesh* gl_meshes;
};
struct point_light
{ {
glm::vec3 position; glm::vec3 position;
glm::vec3 color; glm::vec3 color;
u32 intensity; u32 intensity;
}; };
struct light_array
{
u32 count;
point_light* lights;
};
struct node; struct node;
struct entity; struct entity;
struct animation; struct animation;
@ -152,8 +139,8 @@ bool addShaderProgram(memory_arena* arena,
const char* vs, const char* vs,
const char* fs, const char* fs,
const char* name); const char* name);
void renderVAO(gl_mesh* glmesh); void renderVAO(GLmesh* glmesh);
gl_mesh loadGLMesh(shader_program* s, GLmesh loadGLMesh(shader_program* s,
const mesh& m, const mesh& m,
GLenum draw_mode, GLenum draw_mode,
const glm::vec3& pos); const glm::vec3& pos);

Loading…
Cancel
Save