diff --git a/examples/render_groups/main.cpp b/examples/render_groups/main.cpp index 9284d00..cd2e233 100644 --- a/examples/render_groups/main.cpp +++ b/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; diff --git a/include/entity.h b/include/entity.h index 4c6cf9d..aadf54e 100644 --- a/include/entity.h +++ b/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; }; diff --git a/src/asset.cpp b/src/asset.cpp index 4538317..0b69511 100644 --- a/src/asset.cpp +++ b/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; diff --git a/src/default_shaders.cpp b/src/default_shaders.cpp index afeecea..baacc64 100644 --- a/src/default_shaders.cpp +++ b/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"; + diff --git a/src/entity.cpp b/src/entity.cpp index 1aaa41b..08072ef 100644 --- a/src/entity.cpp +++ b/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); diff --git a/src/render_object.cpp b/src/render_object.cpp index 53a12d2..cb8ed81 100644 --- a/src/render_object.cpp +++ b/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); diff --git a/src/renderer.cpp b/src/renderer.cpp index 725147c..b9db112 100644 --- a/src/renderer.cpp +++ b/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); diff --git a/src/shader_program.cpp b/src/shader_program.cpp index 1ddbfe9..f2d94cb 100644 --- a/src/shader_program.cpp +++ b/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);