diff --git a/src/main.cpp b/src/main.cpp index f05aa87..d68c683 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,4 +1,5 @@ +#include #include #include @@ -230,6 +231,42 @@ initGraphics(SDLHandles* handles) return handles->window != nullptr; } +bool +addShaders(RenderState* rs) +{ + if (!addShaderProgram(rs->arena, + rs->gl_ctx, + "../data/shader.vert", + "../data/shader.frag", + "default")) + { + LOG(Error) << "error loading default shader\n"; + return false; + } + + if (!addShaderProgram(rs->arena, + rs->gl_ctx, + "../data/colored_vertices.vert", + "../data/colored_vertices.frag", + "colored_vertices")) + { + LOG(Error) << "error loading colored_vertices shader\n"; + return false; + } + + if (!addShaderProgram(rs->arena, + rs->gl_ctx, + "../data/debug.vert", + "../data/debug.frag", + "debug")) + { + LOG(Error) << "error loading debug shader\n"; + return false; + } + + return true; +} + bool loadScene(RenderState* rs) { @@ -242,10 +279,10 @@ loadScene(RenderState* rs) glm::vec3( 10, -10, 0), }; - // TODO: load debug shader from libTangerine for textured_cube - shader_program* s = getShaderByName("default", rs->gl_ctx); + shader_program* s_default = getShaderByName("default", rs->gl_ctx); + shader_program* s_debug = getShaderByName("debug", rs->gl_ctx); - if (!s) + if (!s_default || !s_debug) return false; // TODO: full lighting model @@ -254,7 +291,7 @@ loadScene(RenderState* rs) GLmesh* texmesh = getFreeGLMesh(rs); if (texmesh) { - *texmesh = loadGLMesh(s, tex_cube->meshes[0], + *texmesh = loadGLMesh(s_debug, tex_cube->meshes[0], GL_TRIANGLES, glm::vec3(0, 0, 0)); *texmesh->model_xform = glm::mat4(1.f); @@ -271,7 +308,7 @@ loadScene(RenderState* rs) if (!gmesh) return false; - *gmesh = loadGLMesh(s, cube, GL_TRIANGLES, cube_locs[i]); + *gmesh = loadGLMesh(s_default, cube, GL_TRIANGLES, cube_locs[i]); if (gmesh->vao_id == 0) return false; @@ -343,25 +380,13 @@ main() gl_buffer& ubo = rs->gl_ctx->uniform_buffers[rs->gl_ctx->num_ubos++]; initTransforms(arena, rs->xforms, &ubo, rs->gl_ctx); - if (!addShaderProgram(arena, - rs->gl_ctx, - "../data/shader.vert", - "../data/shader.frag", - "default")) - { + if (!addShaders(rs)) { LOG(Error) << "error loading shaders\n"; return 1; } - if (!addShaderProgram(arena, - rs->gl_ctx, - "../data/colored_vertices.vert", - "../data/colored_vertices.frag", - "colored_vertices")) - { - LOG(Error) << "error loading shaders\n"; - return 1; - } + shader_program* s_debug = getShaderByName("debug", rs->gl_ctx); + dumpShader(s_debug->prog_id); if (!loadScene(rs)) { LOG(Error) << "error loading scene\n"; diff --git a/src/shader.cpp b/src/shader.cpp index 72579fa..3ed061b 100644 --- a/src/shader.cpp +++ b/src/shader.cpp @@ -82,7 +82,9 @@ addShaderProgram(memory_arena* arena, // NOTE: need to set context maximums after at least one shader has // been linked initCTXSizes(gl_ctx); +#if 0 dumpShader(s->prog_id); +#endif s->model_xform_id = glGetUniformLocation(s->prog_id, "model_xform"); glDetachShader(s->prog_id, vs_id); glDetachShader(s->prog_id, fs_id); @@ -376,6 +378,17 @@ loadGLMesh(shader_program* s, 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,