From f0d3603b105b18cedd65f462b871ecdfda6529ce Mon Sep 17 00:00:00 2001 From: Joseph Walton-Rivers <joseph@walton-rivers.uk> Date: Sat, 22 Oct 2022 18:45:44 +0100 Subject: [PATCH] allow triggering of debug mode --- demo/data/redbook/debug_frag.glsl | 2 +- demo/demo/models/viewer.cpp | 6 +++++- demo/include/models/viewer.hpp | 1 + fggl/gfx/ogl/renderer.cpp | 4 ++-- fggl/gfx/ogl4/models.cpp | 4 ++-- fggl/gfx/ogl4/module.cpp | 5 +++++ include/fggl/data/model.hpp | 4 ++-- include/fggl/gfx/interfaces.hpp | 2 +- include/fggl/gfx/ogl/renderer.hpp | 2 +- include/fggl/gfx/ogl4/models.hpp | 8 +++----- 10 files changed, 23 insertions(+), 15 deletions(-) diff --git a/demo/data/redbook/debug_frag.glsl b/demo/data/redbook/debug_frag.glsl index 04ed267..aa8e88c 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 048b8e5..c1860d2 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 7e29623..242cd35 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 d1d024c..c13ef6c 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 99a2384..cfe500d 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 5c5289d..e18cce7 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 b042590..d11a03a 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 52150c2..4e1953d 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 c0d8d06..39cb5ba 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 bf58fdd..66ffbe2 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; -- GitLab