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_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 "???";
}

49
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);

9
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;

21
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);

Loading…
Cancel
Save