Browse Source

add debug shader for vertex normals

main
cinnaboot 5 years ago
parent
commit
af4e37581e
  1. 65
      src/main.cpp
  2. 13
      src/shader.cpp

65
src/main.cpp

@ -1,4 +1,5 @@
#include <cassert>
#include <cstring> #include <cstring>
#include <iostream> #include <iostream>
@ -230,6 +231,42 @@ initGraphics(SDLHandles* handles)
return handles->window != nullptr; 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 bool
loadScene(RenderState* rs) loadScene(RenderState* rs)
{ {
@ -242,10 +279,10 @@ loadScene(RenderState* rs)
glm::vec3( 10, -10, 0), glm::vec3( 10, -10, 0),
}; };
// TODO: load debug shader from libTangerine for textured_cube shader_program* s_default = getShaderByName("default", rs->gl_ctx);
shader_program* s = getShaderByName("default", rs->gl_ctx); shader_program* s_debug = getShaderByName("debug", rs->gl_ctx);
if (!s) if (!s_default || !s_debug)
return false; return false;
// TODO: full lighting model // TODO: full lighting model
@ -254,7 +291,7 @@ loadScene(RenderState* rs)
GLmesh* texmesh = getFreeGLMesh(rs); GLmesh* texmesh = getFreeGLMesh(rs);
if (texmesh) { if (texmesh) {
*texmesh = loadGLMesh(s, tex_cube->meshes[0], *texmesh = loadGLMesh(s_debug, tex_cube->meshes[0],
GL_TRIANGLES, glm::vec3(0, 0, 0)); GL_TRIANGLES, glm::vec3(0, 0, 0));
*texmesh->model_xform = glm::mat4(1.f); *texmesh->model_xform = glm::mat4(1.f);
@ -271,7 +308,7 @@ loadScene(RenderState* rs)
if (!gmesh) if (!gmesh)
return false; 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) if (gmesh->vao_id == 0)
return false; return false;
@ -343,25 +380,13 @@ main()
gl_buffer& ubo = rs->gl_ctx->uniform_buffers[rs->gl_ctx->num_ubos++]; gl_buffer& ubo = rs->gl_ctx->uniform_buffers[rs->gl_ctx->num_ubos++];
initTransforms(arena, rs->xforms, &ubo, rs->gl_ctx); initTransforms(arena, rs->xforms, &ubo, rs->gl_ctx);
if (!addShaderProgram(arena, if (!addShaders(rs)) {
rs->gl_ctx,
"../data/shader.vert",
"../data/shader.frag",
"default"))
{
LOG(Error) << "error loading shaders\n"; LOG(Error) << "error loading shaders\n";
return 1; return 1;
} }
if (!addShaderProgram(arena, shader_program* s_debug = getShaderByName("debug", rs->gl_ctx);
rs->gl_ctx, dumpShader(s_debug->prog_id);
"../data/colored_vertices.vert",
"../data/colored_vertices.frag",
"colored_vertices"))
{
LOG(Error) << "error loading shaders\n";
return 1;
}
if (!loadScene(rs)) { if (!loadScene(rs)) {
LOG(Error) << "error loading scene\n"; LOG(Error) << "error loading scene\n";

13
src/shader.cpp

@ -82,7 +82,9 @@ addShaderProgram(memory_arena* arena,
// NOTE: need to set context maximums after at least one shader has // NOTE: need to set context maximums after at least one shader has
// been linked // been linked
initCTXSizes(gl_ctx); initCTXSizes(gl_ctx);
#if 0
dumpShader(s->prog_id); dumpShader(s->prog_id);
#endif
s->model_xform_id = glGetUniformLocation(s->prog_id, "model_xform"); s->model_xform_id = glGetUniformLocation(s->prog_id, "model_xform");
glDetachShader(s->prog_id, vs_id); glDetachShader(s->prog_id, vs_id);
glDetachShader(s->prog_id, fs_id); glDetachShader(s->prog_id, fs_id);
@ -376,6 +378,17 @@ loadGLMesh(shader_program* s,
glVertexAttribPointer(POSITION, 3, GL_FLOAT, GL_FALSE, 0, 0); glVertexAttribPointer(POSITION, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(POSITION); 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); glGenBuffers(1, &gm.idx_buf_id);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, gm.idx_buf_id); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, gm.idx_buf_id);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, glBufferData(GL_ELEMENT_ARRAY_BUFFER,

Loading…
Cancel
Save