Browse Source

fix default rendering, and add debug shader

render_group_fix
cinnaboot 5 years ago
parent
commit
21e92f8b92
  1. 4
      examples/render_groups/main.cpp
  2. 1
      include/entity.h
  3. 4
      src/asset.cpp
  4. 56
      src/default_shaders.cpp
  5. 2
      src/entity.cpp
  6. 22
      src/render_object.cpp
  7. 4
      src/renderer.cpp
  8. 3
      src/shader_program.cpp

4
examples/render_groups/main.cpp

@ -203,9 +203,13 @@ main()
render_group* rg = rgAlloc(rs->render_groups, 64, sw);
entity* e =
rgAppend(rg, rs->assets, rs->arena, "../data/blender/spaceship.gltf");
//rgAppend(rg, rs->assets, rs->arena, "../data/blender/icosphere.gltf");
uint scale = 200;
entScale(*e, glm::vec3(scale, scale, scale));
assert(e != nullptr);
renDoRenderLoop(rs, 60);
//renRenderFrame(rs);
renShutdown(rs);
return 0;

1
include/entity.h

@ -11,7 +11,6 @@
struct entity
{
glm::mat4 world_transform;
//mesh_group meshes;
uint64_t model_id; // NOTE: filepath hash
render_objects* render_objs;
};

4
src/asset.cpp

@ -216,6 +216,8 @@ assetLoadFromFile(model_assets* assets,
std::string err;
std::string warn;
LOG(Info) << "Loading model: " << filename << "\n";
if (!gltf_ctx.LoadASCIIFromFile(&t_mdl, &err, &warn, filename)) {
LOG(Error) << "Error loading file: " << filename
<< " , msg: " << err << "\n";
@ -227,7 +229,7 @@ assetLoadFromFile(model_assets* assets,
model* mdl = initModel(assets, arena, t_mdl, filename);
// TODO: also need to get each node xform
// TODO: also need to dump textures/materials
dumpNodes(t_mdl);
//dumpNodes(t_mdl);
uint mesh_idx = 0;

56
src/default_shaders.cpp

@ -1,3 +1,7 @@
// NOTE: default shader
const char* DEFAULT_VERTEX_SHADER = R"VS(
#version 330 core
@ -71,6 +75,57 @@ void main()
}
)FS";
// NOTE: debug shader
const char* DEBUG_VERTEX_SHADER = R"DVS(
#version 330 core
layout (location = 0) in vec3 vertexPosition_modelspace;
layout (location = 1) in vec3 normal;
layout (location = 2) in vec3 texCoord;
out vec3 fragVertex;
out vec3 fragNormal;
uniform mat4 world_transform;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
uniform mat3 normal_matrix;
void main()
{
fragNormal = vec4(world_transform * vec4(normal, 1)).xyz;
fragVertex = vertexPosition_modelspace;
gl_Position = projection * view *
world_transform * model * vec4(vertexPosition_modelspace, 1);
}
)DVS";
const char* DEBUG_FRAGMENT_SHADER = R"DFS(
#version 330 core
in vec3 fragVertex;
in vec3 fragNormal;
out vec4 color;
uniform mat4 model;
uniform mat3 normal_matrix;
void main()
{
color = vec4(0.5 * normalize(fragNormal) + 0.5, 1.0);
//color = vec4(1.0, 0.8, 0.8, 1.0);
}
)DFS";
// NOTE: simple shader
const char* SIMPLE_VERTEX_SHADER = R"SVS(
#version 330 core
@ -103,3 +158,4 @@ void main()
color = vec4(frag_color.rgb, 1);
}
)SFS";

2
src/entity.cpp

@ -37,6 +37,8 @@ bool
entInitModel(entity* e, model* mdl)
{
e->render_objs = roInitModel(mdl);
e->world_transform = glm::mat4(1);
e->model_id = mdl->filepath_hash;
if (e->render_objs == nullptr) {
entFree(e);

22
src/render_object.cpp

@ -90,6 +90,7 @@ roDraw(render_objects* r_objs,
light_group* lights)
{
assert(r_objs->mesh_type == DEFAULT_MESHES);
// FIXME: might as well move this function now that we only have one path
drawDefault(r_objs, world_transform, cam, sw, lights);
}
@ -159,10 +160,16 @@ loadMeshIntoGL(default_render_object* ro_out, mesh* mesh_in)
GL_ELEMENT_ARRAY_BUFFER)
// FIXME: re-implement diffuse texture, but with index into an array
// on render_state
//&& initGLTexture(mesh_in->diffuse_texture, ro_out->tex_id))
#if 0
&& initGLTexture(mesh_in->diffuse_texture, ro_out->tex_id))
#endif
)
{
// FIXME: node xform
ro_out->node_xform = glm::mat4(1);
#if 0
ro_out->node_xform = *mesh_in->xform;
#endif
ro_out->index_buffer_count = mesh_in->num_indices;
return true;
}
@ -203,7 +210,10 @@ drawDefault(render_objects* r_objs,
default_render_object* objects = r_objs->objects;
glUseProgram(shader->program_id);
updateMatrices(shader, cam, world_transform, objects->node_xform);
// FIXME: re-enable lights
#if 0
if (lights->needs_update) lightsUpdate(lights, shader);
#endif
for (uint i = 0; i < r_objs->count; i++) {
enableGLFloatBuffer(objects[i].vertex_buffer_id, 0);
@ -211,14 +221,24 @@ drawDefault(render_objects* r_objs,
// TODO: could pass in a stride parameter here to enableGLFloatBuffer()
// could then use a 2d buffer for uv coords
enableGLFloatBuffer(objects[i].uv_buffer_id, 2);
// FIXME: re-enable textures
#if 0
glBindTexture(GL_TEXTURE_2D, objects[i].tex_id);
glUniform1i(shader->sampler_id, 0);
#endif
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, objects[i].index_buffer_id);
// FIXME: tinygltf uses unsigned short as index type
#if 0
glDrawElements(GL_TRIANGLES,
objects[i].index_buffer_count,
GL_UNSIGNED_INT,
0);
#endif
glDrawElements(GL_TRIANGLES,
objects[i].index_buffer_count,
GL_UNSIGNED_SHORT,
0);
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);

4
src/renderer.cpp

@ -323,7 +323,11 @@ bool
initShaders(render_state* rs)
{
rs->default_shader =
// FIXME: debug shader
#if 0
shaderInitDefault(DEFAULT_VERTEX_SHADER, DEFAULT_FRAGMENT_SHADER);
#endif
shaderInitDefault(DEBUG_VERTEX_SHADER, DEBUG_FRAGMENT_SHADER);
rs->simple_shader =
shaderInitSimple(SIMPLE_VERTEX_SHADER, SIMPLE_FRAGMENT_SHADER);

3
src/shader_program.cpp

@ -37,8 +37,11 @@ shaderInitDefault(const char* vertex_code, const char* frag_code)
glGetUniformLocation(sp->program_id, "projection");
sp->normal_matrix_id =
glGetUniformLocation(sp->program_id, "normal_matrix");
// FIXME: re-enable textures
#if 0
sp->num_lights_id = glGetUniformLocation(sp->program_id, "num_lights");
sp->sampler_id = glGetUniformLocation(sp->program_id, "sampler");
#endif
cleanUpShader(sp->program_id, vs_id, fs_id);

Loading…
Cancel
Save