diff --git a/demo/data/redbook/debug_frag.glsl b/demo/data/redbook/debug_frag.glsl index 04ed2671bf53eabd838c15dcc40ec17cbe3017eb..aa8e88c17f1a73144a27cc57fb2bdaec3c956a0c 100644 --- a/demo/data/redbook/debug_frag.glsl +++ b/demo/data/redbook/debug_frag.glsl @@ -12,5 +12,5 @@ out vec4 FragColour; void main() { vec3 normalScale = 0.5 + (Normal / 2); - FragColour = vec4(normalScale, 1); + FragColour = Colour * vec4(normalScale, 1); } \ No newline at end of file diff --git a/demo/demo/models/viewer.cpp b/demo/demo/models/viewer.cpp index 048b8e563d608e0820679304a846277545f38305..c1860d29abb326a26538452c4b71d84b1c5a369e 100644 --- a/demo/demo/models/viewer.cpp +++ b/demo/demo/models/viewer.cpp @@ -121,12 +121,16 @@ namespace demo { void Viewer::update(float dt) { Game::update(dt); process_camera(world(), input()); + + if ( input().keyboard.pressed(glfwGetKeyScancode(GLFW_KEY_F2)) ) { + m_debug = !m_debug; + } } void Viewer::render(fggl::gfx::Graphics &gfx) { Game::render(gfx); - gfx.drawScene(world()); + gfx.drawScene(world(), m_debug); } } diff --git a/demo/include/models/viewer.hpp b/demo/include/models/viewer.hpp index 7e29623eb02c4e523580495759ab7c0cb36876e0..242cd35499163e7a6d4e8e5eeb34a6f064cc0cf1 100644 --- a/demo/include/models/viewer.hpp +++ b/demo/include/models/viewer.hpp @@ -36,6 +36,7 @@ namespace demo { private: fggl::entity::EntityID m_model; + bool m_debug = false; }; } diff --git a/fggl/gfx/ogl/renderer.cpp b/fggl/gfx/ogl/renderer.cpp index d1d024c42021ff316a537fcae6fe05fe73569811..c13ef6c05f0c0ef1a4ef4a7c15fd6b8a0aa02679 100644 --- a/fggl/gfx/ogl/renderer.cpp +++ b/fggl/gfx/ogl/renderer.cpp @@ -204,9 +204,9 @@ namespace fggl::gfx { m_canvasRenderer->render(*m_canvasPipeline, paint); } - void OpenGL4Backend::drawScene(entity::EntityManager &world) { + void OpenGL4Backend::drawScene(entity::EntityManager &world, bool debugMode) { if (m_modelRenderer) { - m_modelRenderer->render(world); + m_modelRenderer->render(world, debugMode); } if (m_debugRenderer) { diff --git a/fggl/gfx/ogl4/models.cpp b/fggl/gfx/ogl4/models.cpp index 99a2384c6e13bb9d144c6551df7231b98aa98659..cfe500de1398a2a899369369595149616e7f00be 100644 --- a/fggl/gfx/ogl4/models.cpp +++ b/fggl/gfx/ogl4/models.cpp @@ -410,7 +410,7 @@ namespace fggl::gfx::ogl4 { } } - void StaticModelRenderer::renderModelsForward(const entity::EntityManager &world) { + void StaticModelRenderer::renderModelsForward(const entity::EntityManager &world, bool debugMode) { // fetch cameras we will need to render with auto cameras = world.find<gfx::Camera>(); @@ -430,7 +430,7 @@ namespace fggl::gfx::ogl4 { forward_pass<ogl4::StaticMultiMesh>(cameraEnt, world); // enable rendering normals - if ( m_renderNormals ) { + if ( debugMode ) { auto normalShader = m_shaders->get("normals"); forward_pass_normals<StaticMesh>(cameraEnt, world, normalShader); forward_pass_normals<StaticMultiMesh>(cameraEnt, world, normalShader); diff --git a/fggl/gfx/ogl4/module.cpp b/fggl/gfx/ogl4/module.cpp index 5c5289dea52994bfd12b8545ecc9ebc63f782d31..e18cce7727de1e38f75b445afa1d703e518e399e 100644 --- a/fggl/gfx/ogl4/module.cpp +++ b/fggl/gfx/ogl4/module.cpp @@ -18,6 +18,7 @@ #include "fggl/gfx/ogl4/module.hpp" #include "fggl/gfx/phong.hpp" +#include "fggl/mesh/components.hpp" #include "fggl/data/procedural.hpp" #include "fggl/assets/loader.hpp" @@ -154,6 +155,10 @@ namespace fggl::gfx { // register as responsible for creating rendering components auto *entityFactory = services.get<entity::EntityFactory>(); entityFactory->bind(data::StaticMesh::guid, attach_mesh); + + entityFactory->bind(mesh::StaticMesh3D::guid, attach_mesh); + entityFactory->bind(mesh::StaticMultiMesh3D::guid, attach_mesh); + entityFactory->bind(gfx::PhongMaterial::guid, attach_material); entityFactory->bind(gfx::Light::guid, attach_light); diff --git a/include/fggl/data/model.hpp b/include/fggl/data/model.hpp index b042590ef43be92c07c3a75198934735b872a94a..d11a03aa76145dc6153887ec9dad3edb935ea089 100644 --- a/include/fggl/data/model.hpp +++ b/include/fggl/data/model.hpp @@ -29,8 +29,8 @@ namespace fggl::data { struct Vertex { math::vec3 posititon; - math::vec3 normal; - math::vec3 colour; + math::vec3 normal = ILLEGAL_NORMAL; + math::vec3 colour = DEFAULT_COLOUR; math::vec2 texPos; inline static Vertex from_pos(math::vec3 pos) { diff --git a/include/fggl/gfx/interfaces.hpp b/include/fggl/gfx/interfaces.hpp index 52150c2bd771bc442e8cc989feacafaa161340b0..4e1953d7c051239d6a7b5090e2c7aebc6f7d6320 100644 --- a/include/fggl/gfx/interfaces.hpp +++ b/include/fggl/gfx/interfaces.hpp @@ -43,7 +43,7 @@ namespace fggl::gfx { virtual Bounds canvasBounds() = 0; virtual void draw2D(const Paint &paint) = 0; - virtual void drawScene(entity::EntityManager &) = 0; + virtual void drawScene(entity::EntityManager &, bool debugMode = false) = 0; }; } // namespace fggl::gfx diff --git a/include/fggl/gfx/ogl/renderer.hpp b/include/fggl/gfx/ogl/renderer.hpp index c0d8d06a1ed44c610adf64c32f5f431d9f824fd1..39cb5ba84e31d3ffcbf78ce05e7d7e4ce43e6c52 100644 --- a/include/fggl/gfx/ogl/renderer.hpp +++ b/include/fggl/gfx/ogl/renderer.hpp @@ -93,7 +93,7 @@ namespace fggl::gfx { * * @param world the world to render */ - void drawScene(entity::EntityManager &world) override; + void drawScene(entity::EntityManager &world, bool debugMode=false) override; /** * Get the 2D canvas bounds. diff --git a/include/fggl/gfx/ogl4/models.hpp b/include/fggl/gfx/ogl4/models.hpp index bf58fdd84ccdb662fb797d5218a1230347a2819c..66ffbe2c9cabe7cbe56ad2a27ea18a62022e4bad 100644 --- a/include/fggl/gfx/ogl4/models.hpp +++ b/include/fggl/gfx/ogl4/models.hpp @@ -85,15 +85,13 @@ namespace fggl::gfx::ogl4 { StaticModel* uploadMesh(assets::AssetGUID guid, const data::Mesh& mesh, bool allowCache=true); StaticModelGPU* uploadMesh2(const assets::AssetGUID& meshName, const data::Mesh& mesh); - void render(entity::EntityManager &world) { + void render(entity::EntityManager &world, bool debugMode = false) { #ifdef FGGL_ALLOW_DEFERRED_UPLOAD resolveModels(world); #endif - renderModelsForward(world); + renderModelsForward(world, debugMode); } - bool m_renderNormals = true; - private: #ifdef FGGL_ALLOW_DEFERRED_UPLOAD @@ -106,7 +104,7 @@ namespace fggl::gfx::ogl4 { /** * Render all visible objects according to their render tokens. */ - void renderModelsForward(const entity::EntityManager &world); + void renderModelsForward(const entity::EntityManager &world, bool debugMode); assets::AssetManager *m_assets; gfx::ShaderCache *m_shaders;