Browse Source

test a loadGLMesh() with GLBufferToAttribMapping struct

main
cinnaboot 5 years ago
parent
commit
66600f1366
  1. 39
      src/main.cpp
  2. 38
      src/shader.cpp
  3. 8
      src/shader.h

39
src/main.cpp

@ -259,37 +259,44 @@ loadScene(RenderState* rs)
shader_program* s_default = getShaderByName("default", rs->gl_ctx);
shader_program* s_debug = getShaderByName("debug", rs->gl_ctx);
if (!s_default || !s_debug)
return false;
if (!s_default || !s_debug) return false;
// TODO: full lighting model
model* tex_cube = getModel(rs, "../data/textured_cube.gltf");
assert(tex_cube != nullptr && tex_cube->num_meshes > 0);
GLmesh* texmesh = getFreeGLMesh(rs);
if (!texmesh) return false;
if (texmesh) {
*texmesh = loadGLMesh(s_debug, tex_cube->meshes[0],
GL_TRIANGLES, glm::vec3(0, 0, 0));
*texmesh->model_xform = glm::mat4(1.f);
if (texmesh->vao_id == 0) return false;
if (texmesh->vao_id == 0)
return false;
// ========
// NOTE: testing new loadGLMesh interface
texmesh = getFreeGLMesh(rs);
if (!texmesh) return false;
} else {
return false;
}
GLVertexAttrib* pos_attrib = getVertexAttribByName(s_debug, "position");
GLVertexAttrib* normal_attrib = getVertexAttribByName(s_debug, "normal");
if (!pos_attrib || !normal_attrib) return false;
GLBufferToAttribMapping attrib_mappings[2] = {
{ "position", nullptr, pos_attrib },
{ "normal", nullptr, normal_attrib }
};
*texmesh = loadGLMesh(s_debug, tex_cube->meshes[0],
GL_TRIANGLES, glm::vec3(10, 0, 0),
2, attrib_mappings);
if (texmesh->vao_id == 0) return false;
//
// ========
for (u32 i = 0; i < NUM_CUBES; i++) {
GLmesh* gmesh = getFreeGLMesh(rs);
if (!gmesh)
return false;
if (!gmesh) return false;
*gmesh = loadGLMesh(s_default, cube, GL_TRIANGLES, cube_locs[i]);
if (gmesh->vao_id == 0)
return false;
if (gmesh->vao_id == 0) return false;
}
return true;

38
src/shader.cpp

@ -16,7 +16,6 @@
#include "util.h"
// NOTE: forward declarations
const std::string dumpTextFile(const char* filepath);
@ -77,7 +76,7 @@ addShaderProgram(memory_arena* arena,
s->name = arenaCopyCStr(arena, name);
s->hash = hash;
// TODO: replace std::string w/ utilAllocCStr() ?
// TODO: replace std::string w/ utilAllocateCStr() ?
std::string vert = dumpTextFile(vs);
std::string frag = dumpTextFile(fs);
GLuint vs_id, fs_id;
@ -227,6 +226,38 @@ loadGLMesh(shader_program* s,
return gm;
}
GLVertexAttrib*
getVertexAttribByName(shader_program* shader, const char* name)
{
for (u32 i = 0; i < shader->num_vertex_attribs; i++) {
if (strncmp(shader->vertex_attribs[i].name, name, 256) == 0)
return &shader->vertex_attribs[i];
}
printf("%s, attribute: %s, not found on shader: %s\n",
__FUNCTION__, name, shader->name);
return nullptr;
}
GLmesh
loadGLMesh(shader_program* s,
const mesh& m,
GLenum draw_mode,
const glm::vec3& pos,
u32 num_mappings,
GLBufferToAttribMapping mappings[])
{
GLmesh glm = {0};
#if 0
// TODO: store gl_buffers on gl_ctx
// TODO: loop over mapping array to get buffer attrib info
WRONG! gl_ctx->num_vertex_buffers = num_mappings;
gl_ctx->vertex_buffers = ...
for (u32 i = 0; i < num_mappings; i++) {
}
#endif
return glm;
}
// NOTE: internal
@ -438,10 +469,9 @@ bool
parseAttributes(memory_arena* arena, shader_program* s, GLContext* gl_ctx)
{
printf("\n---------------------------------\n");
printf("%s(), FIXME: dumping attrib info for programe: %s\n",
printf("%s(), FIXME: dumping attrib info for program: %s\n",
__FUNCTION__, s->name);
GLint num_attribs;
glGetProgramiv(s->prog_id, GL_ACTIVE_ATTRIBUTES, &num_attribs);
printf("active attributes: %d\n", num_attribs);

8
src/shader.h

@ -203,6 +203,14 @@ 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(shader_program* s,
const mesh& m,
GLenum draw_mode,
const glm::vec3& pos,
u32 num_mappings,
GLBufferToAttribMapping mappings[]);
void initTransforms(memory_arena* arena,
transforms* xforms,
gl_buffer* xform_ubo,

Loading…
Cancel
Save