diff --git a/examples/ExampleApps/BillboardExampleApp.cpp b/examples/ExampleApps/BillboardExampleApp.cpp index 068f812..dd7088f 100644 --- a/examples/ExampleApps/BillboardExampleApp.cpp +++ b/examples/ExampleApps/BillboardExampleApp.cpp @@ -31,10 +31,9 @@ namespace OpenVulkano class BillboardExampleAppImpl final : public BillboardExampleApp { public: - void Init() override { - auto engineConfig = OpenVulkano::EngineConfiguration::GetEngineConfiguration(); + auto engineConfig = EngineConfiguration::GetEngineConfiguration(); engineConfig->SetPreferFramebufferFormatSRGB(false); engineConfig->SetFpsCap(0); // monitor's refresh rate engineConfig->SetVSync(true); @@ -44,17 +43,17 @@ namespace OpenVulkano m_cam.Init(70, 16, 9, 0.1f, 100); m_scene.SetCamera(&m_cam); - m_quadBillboardShader.AddShaderProgram(OpenVulkano::ShaderProgramType::VERTEX, "Shader/billboardFromSinglePoint"); - m_quadBillboardShader.AddShaderProgram(OpenVulkano::ShaderProgramType::GEOMETRY, "Shader/billboardFromSinglePoint"); - m_quadBillboardShader.AddShaderProgram(OpenVulkano::ShaderProgramType::FRAGMENT, "Shader/basic"); - m_quadBillboardShader.AddVertexInputDescription(OpenVulkano::Vertex::GetVertexInputDescription()); + m_quadBillboardShader.AddShaderProgram(ShaderProgramType::VERTEX, "Shader/billboardFromSinglePoint"); + m_quadBillboardShader.AddShaderProgram(ShaderProgramType::GEOMETRY, "Shader/billboardFromSinglePoint"); + m_quadBillboardShader.AddShaderProgram(ShaderProgramType::FRAGMENT, "Shader/basic"); + m_quadBillboardShader.AddVertexInputDescription(Vertex::GetVertexInputDescription()); m_quadBillboardShader.AddDescriptorSetLayoutBinding(Texture::DESCRIPTOR_SET_LAYOUT_BINDING); m_quadBillboardShader.AddDescriptorSetLayoutBinding(UniformBuffer::DESCRIPTOR_SET_LAYOUT_BINDING, 4); m_quadBillboardShader.topology = Topology::POINT_LIST; - m_shader.AddShaderProgram(OpenVulkano::ShaderProgramType::VERTEX, "Shader/billboard"); - m_shader.AddShaderProgram(OpenVulkano::ShaderProgramType::FRAGMENT, "Shader/basic"); - m_shader.AddVertexInputDescription(OpenVulkano::Vertex::GetVertexInputDescription()); + m_shader.AddShaderProgram(ShaderProgramType::VERTEX, "Shader/billboard"); + m_shader.AddShaderProgram(ShaderProgramType::FRAGMENT, "Shader/basic"); + m_shader.AddVertexInputDescription(Vertex::GetVertexInputDescription()); m_shader.AddDescriptorSetLayoutBinding(Texture::DESCRIPTOR_SET_LAYOUT_BINDING); m_shader.AddDescriptorSetLayoutBinding(UniformBuffer::DESCRIPTOR_SET_LAYOUT_BINDING, 4); m_shader.cullMode = CullMode::NONE; @@ -85,13 +84,13 @@ namespace OpenVulkano geo->vertices[0].color = glm::vec4(1, 1, 1, 1); else geo->vertices[0].color = glm::vec4(1, 0, 0, 1); - m_nodesPool[i].SetMatrix(Math::Utils::translate(glm::mat4x4(1.f), Vector3f(-5 + std::rand() % 5, -5 + std::rand() % 5, std::rand() % 5))); + m_nodesPool[i].SetMatrix(translate(glm::mat4x4(1.f), Vector3f(-5 + std::rand() % 5, -5 + std::rand() % 5, std::rand() % 5))); m_drawablesPool[i].Init(&m_quadBillboardShader, geo, &m_texturedMat, &m_uniBuffer); } else { *geo = GeometryFactory::MakePyramid(1, 1, glm::vec4(0, 1, 0, 1)); - m_nodesPool[i].SetMatrix(Math::Utils::translate(glm::mat4x4(1.f), Vector3f(-5 + std::rand() % 5, -5 + std::rand() % 5, -std::rand() % 10))); + m_nodesPool[i].SetMatrix(translate(glm::mat4x4(1.f), Vector3f(-5 + std::rand() % 5, -5 + std::rand() % 5, -std::rand() % 10))); m_drawablesPool[i].Init(&m_shader, geo, &m_mat, &m_uniBuffer); } m_scene.GetRoot()->AddChild(&m_nodesPool[i]); @@ -105,8 +104,8 @@ namespace OpenVulkano m_camController.SetPosition({ 0, 0, 5 }); m_camController.SetBoostFactor(5); - std::shared_ptr m_perfInfo = - std::make_shared(); + std::shared_ptr m_perfInfo = + std::make_shared(); m_ui.AddElement(m_perfInfo); GetGraphicsAppManager()->GetRenderer()->SetActiveUi(&m_ui); } @@ -125,7 +124,7 @@ namespace OpenVulkano BillboardControlBlock m_bbContolBlock; PerspectiveCamera m_cam; UniformBuffer m_uniBuffer; - OpenVulkano::FreeCamCameraController m_camController; + FreeCamCameraController m_camController; Material m_mat; Material m_texturedMat; Shader m_shader; @@ -133,9 +132,9 @@ namespace OpenVulkano std::vector m_drawablesPool; std::vector m_nodesPool; Vector3f_SIMD m_position = { 0, 0, -10 }; - OpenVulkano::Scene::UI::SimpleUi m_ui; + UI::SimpleUi m_ui; std::vector m_geo; - std::shared_ptr m_perfInfo; + std::shared_ptr m_perfInfo; }; IGraphicsApp* BillboardExampleApp::Create() { return new BillboardExampleAppImpl(); } diff --git a/examples/ExampleApps/CubesExampleApp.cpp b/examples/ExampleApps/CubesExampleApp.cpp index 391f548..d77ad3e 100644 --- a/examples/ExampleApps/CubesExampleApp.cpp +++ b/examples/ExampleApps/CubesExampleApp.cpp @@ -36,7 +36,7 @@ namespace OpenVulkano { OpenVulkano::Scene::Scene scene; PerspectiveCamera cam; - OpenVulkano::FreeCamCameraController camController; + FreeCamCameraController camController; Material mat; Shader shader; std::vector drawablesPool; @@ -44,13 +44,13 @@ namespace OpenVulkano Vector3f_SIMD position = {0, 0, -10}; std::vector m_geos; - OpenVulkano::Scene::UI::SimpleUi m_ui; - std::shared_ptr m_perfInfo; + UI::SimpleUi m_ui; + std::shared_ptr m_perfInfo; public: void Init() override { - auto engineConfig = OpenVulkano::EngineConfiguration::GetEngineConfiguration(); + auto engineConfig = EngineConfiguration::GetEngineConfiguration(); //engineConfig->SetNumThreads(4); engineConfig->SetPreferFramebufferFormatSRGB(false); @@ -58,9 +58,9 @@ namespace OpenVulkano scene.Init(); cam.Init(70, 16, 9, 0.1f, 100); scene.SetCamera(&cam); - shader.AddShaderProgram(OpenVulkano::ShaderProgramType::VERTEX, "Shader/basic"); - shader.AddShaderProgram(OpenVulkano::ShaderProgramType::FRAGMENT, "Shader/basic"); - shader.AddVertexInputDescription(OpenVulkano::Vertex::GetVertexInputDescription()); + shader.AddShaderProgram(ShaderProgramType::VERTEX, "Shader/basic"); + shader.AddShaderProgram(ShaderProgramType::FRAGMENT, "Shader/basic"); + shader.AddVertexInputDescription(Vertex::GetVertexInputDescription()); drawablesPool.resize(GEOS); m_geos.reserve(GEOS); for (uint32_t i = 0; i < GEOS; i++) @@ -78,7 +78,7 @@ namespace OpenVulkano scene.GetRoot()->AddChild(&nodesPool[i]); if (i < DYNAMIC) nodesPool[i].SetUpdateFrequency(UpdateFrequency::Always); nodesPool[i].AddDrawable(&drawablesPool[std::rand() % GEOS]); - nodesPool[i].SetMatrix(Math::Utils::translate(glm::mat4x4(1), Vector3f((std::rand() % 10000) / 1000.0f - 5, (std::rand() % 10000) / 1000.0f - 5, (std::rand() % 10000) / 1000.0f - 5))); + nodesPool[i].SetMatrix(translate(glm::mat4x4(1), Vector3f((std::rand() % 10000) / 1000.0f - 5, (std::rand() % 10000) / 1000.0f - 5, (std::rand() % 10000) / 1000.0f - 5))); } GetGraphicsAppManager()->GetRenderer()->SetScene(&scene); @@ -87,7 +87,7 @@ namespace OpenVulkano camController.SetDefaultKeybindings(); camController.SetPosition({0, 0, 10}); - std::shared_ptr m_perfInfo = std::make_shared(); + std::shared_ptr m_perfInfo = std::make_shared(); m_ui.AddElement(m_perfInfo); GetGraphicsAppManager()->GetRenderer()->SetActiveUi(&m_ui); } @@ -96,7 +96,7 @@ namespace OpenVulkano { for (uint32_t i = 0; i < DYNAMIC; i++) { - nodesPool[i].SetMatrix(glm::translate(glm::mat4x4(1), glm::vec3((std::rand() % 10000) / 1000.0f - 5, (std::rand() % 10000) / 1000.0f - 5, (std::rand() % 10000) / 1000.0f - 5))); + nodesPool[i].SetMatrix(translate(glm::mat4x4(1), glm::vec3((std::rand() % 10000) / 1000.0f - 5, (std::rand() % 10000) / 1000.0f - 5, (std::rand() % 10000) / 1000.0f - 5))); } camController.Tick(); diff --git a/examples/ExampleApps/LabelDrawableExampleApp.cpp b/examples/ExampleApps/LabelDrawableExampleApp.cpp index a076eaf..ab899e6 100644 --- a/examples/ExampleApps/LabelDrawableExampleApp.cpp +++ b/examples/ExampleApps/LabelDrawableExampleApp.cpp @@ -7,14 +7,8 @@ #include "LabelDrawableExampleApp.hpp" #include "Scene/Scene.hpp" #include "Scene/Shader/Shader.hpp" -#include "Scene/Geometry.hpp" #include "Scene/TextDrawable.hpp" -#include "Scene/GeometryFactory.hpp" -#include "Scene/Material.hpp" -#include "Scene/Vertex.hpp" -#include "Scene/SimpleDrawable.hpp" #include "Scene/UI/PerformanceInfo.hpp" -#include "Scene/UniformBuffer.hpp" #include "Scene/Prefabs/LabelDrawable.hpp" #include "Input/InputManager.hpp" #include "Host/GraphicsAppManager.hpp" @@ -23,9 +17,7 @@ #include "Math/Math.hpp" #include "Base/EngineConfiguration.hpp" #include "Controller/FreeCamCameraController.hpp" -#include "Image/ImageLoaderPng.hpp" #include "Scene/SdfFontAtlasGenerator.hpp" -#include "Scene/IFontAtlasGenerator.hpp" #include #ifdef _WIN32 @@ -45,9 +37,7 @@ namespace OpenVulkano void Init() override { - auto engineConfig = OpenVulkano::EngineConfiguration::GetEngineConfiguration(); - engineConfig->SetNumThreads(1); - engineConfig->SetPreferFramebufferFormatSRGB(false); + EngineConfiguration::GetEngineConfiguration()->SetPreferFramebufferFormatSRGB(false); std::srand(1); // Fix seed for random numbers m_scene.Init(); @@ -74,10 +64,10 @@ namespace OpenVulkano } else { - labelSettings.hasRoundedCorners = (i % 2 == 0 ? 0 : 1); - labelSettings.hasArrow = (i % 2 == 0 ? 1 : 0); + labelSettings.hasRoundedCorners = i % 2 == 0 ? 0 : 1; + labelSettings.hasArrow = i % 2 == 0 ? 1 : 0; } - bool isBillboard = (i % 2 == 0 ? 1 : 0); + bool isBillboard = i % 2 == 0 ? 1 : 0; LabelDrawable& label = m_drawablesPool.emplace_back(textDrawable.GetAtlasData(), labelSettings, isBillboard); label.SetBillboardSettings(billboardSettings); label.AddText(texts[i]); @@ -100,8 +90,8 @@ namespace OpenVulkano m_camController.SetPosition({ 0, 0, 10 }); m_camController.SetBoostFactor(5); - std::shared_ptr m_perfInfo = - std::make_shared(); + std::shared_ptr m_perfInfo = + std::make_shared(); m_ui.AddElement(m_perfInfo); GetGraphicsAppManager()->GetRenderer()->SetActiveUi(&m_ui); } @@ -116,12 +106,12 @@ namespace OpenVulkano private: OpenVulkano::Scene::Scene m_scene; PerspectiveCamera m_cam; - OpenVulkano::FreeCamCameraController m_camController; + FreeCamCameraController m_camController; std::vector m_drawablesPool; std::vector m_nodesPool; Vector3f_SIMD m_position = { 0, 0, -10 }; - OpenVulkano::Scene::UI::SimpleUi m_ui; - std::shared_ptr m_perfInfo; + UI::SimpleUi m_ui; + std::shared_ptr m_perfInfo; }; IGraphicsApp* LabelDrawableExampleApp::Create() { return new LabelDrawableExampleAppImpl(); } diff --git a/examples/ExampleApps/MovingCubeApp.cpp b/examples/ExampleApps/MovingCubeApp.cpp index d33dcd8..2fa39e3 100644 --- a/examples/ExampleApps/MovingCubeApp.cpp +++ b/examples/ExampleApps/MovingCubeApp.cpp @@ -17,16 +17,12 @@ #include "Scene/SimpleAnimationController.hpp" #include "Scene/SequenceAnimationController.hpp" #include "Scene/MorphableCameraController.hpp" -#include "Scene/PlaneCameraController.hpp" #include "Scene/UI/PerformanceInfo.hpp" #include "Scene/SceneIntersectionTestController.hpp" -#include "Input/InputManager.hpp" #include "Host/GraphicsAppManager.hpp" -#include "Base/EngineConfiguration.hpp" #include "Base/Logger.hpp" #include "Controller/FreeCamCameraController.hpp" #include "Scene/Prefabs/LabelDrawable.hpp" -#include "Scene/SimpleDrawable.hpp" #include "Scene/Ray.hpp" #define USE_PLANE_CAM_CONTROL 0 diff --git a/examples/ExampleApps/TextExampleApp.cpp b/examples/ExampleApps/TextExampleApp.cpp index 26538d2..11be545 100644 --- a/examples/ExampleApps/TextExampleApp.cpp +++ b/examples/ExampleApps/TextExampleApp.cpp @@ -9,12 +9,8 @@ #include "Scene/Shader/Shader.hpp" #include "Scene/Geometry.hpp" #include "Scene/TextDrawable.hpp" -#include "Scene/GeometryFactory.hpp" -#include "Scene/Material.hpp" #include "Scene/Vertex.hpp" -#include "Scene/SimpleDrawable.hpp" #include "Scene/UI/PerformanceInfo.hpp" -#include "Scene/UniformBuffer.hpp" #include "Input/InputManager.hpp" #include "Host/GraphicsAppManager.hpp" #include "Host/GLFW/WindowGLFW.hpp" @@ -22,9 +18,7 @@ #include "Math/Math.hpp" #include "Base/EngineConfiguration.hpp" #include "Controller/FreeCamCameraController.hpp" -#include "Image/ImageLoaderPng.hpp" #include "Scene/SdfFontAtlasGenerator.hpp" -#include "Scene/IFontAtlasGenerator.hpp" #include "Scene/BitmapFontAtlasGenerator.hpp" #include @@ -45,11 +39,9 @@ namespace OpenVulkano class TextExampleAppImpl final : public TextExampleApp { public: - void Init() override { - auto engineConfig = OpenVulkano::EngineConfiguration::GetEngineConfiguration(); - engineConfig->SetPreferFramebufferFormatSRGB(false); + EngineConfiguration::GetEngineConfiguration()->SetPreferFramebufferFormatSRGB(false); std::srand(1); // Fix seed for random numbers m_scene.Init(); @@ -72,6 +64,7 @@ namespace OpenVulkano if constexpr (CREATE_BITMAP_ATLAS) { + // ReSharper disable once CppDFAUnreachableCode std::set s = BitmapFontAtlasGenerator::LoadAllGlyphs(fontPath); BitmapFontAtlasGenerator generator; generator.GenerateAtlas(fontPath, s); @@ -133,10 +126,10 @@ namespace OpenVulkano //TextDrawable* t = new TextDrawable(metadataInfo, &tex, texts[i].second); #endif // MSDFGEN_AVAILABLE t->GenerateText(texts[textIdx].first); - m_drawablesPool[i] = t; + m_drawablesPool[i].reset(t); m_nodesPool[i].Init(); m_nodesPool[i].SetMatrix(Math::Utils::translate(glm::mat4x4(1.f), Vector3f(xOffset, 2 - textIdx * 2, 0))); - m_nodesPool[i].AddDrawable(m_drawablesPool[i]); + m_nodesPool[i].AddDrawable(m_drawablesPool[i].get()); m_scene.GetRoot()->AddChild(&m_nodesPool[i]); } GetGraphicsAppManager()->GetRenderer()->SetScene(&m_scene); @@ -145,8 +138,8 @@ namespace OpenVulkano m_camController.SetPosition({ 10, 0, 15 }); m_camController.SetBoostFactor(5); - std::shared_ptr m_perfInfo = - std::make_shared(); + std::shared_ptr m_perfInfo = + std::make_shared(); m_ui.AddElement(m_perfInfo); GetGraphicsAppManager()->GetRenderer()->SetActiveUi(&m_ui); } @@ -158,26 +151,22 @@ namespace OpenVulkano void Close() override { - for (Drawable* d: m_drawablesPool) - { - d->Close(); - delete d; - } + m_drawablesPool.clear(); } private: OpenVulkano::Scene::Scene m_scene; PerspectiveCamera m_cam; - OpenVulkano::FreeCamCameraController m_camController; + FreeCamCameraController m_camController; #ifdef MSDFGEN_AVAILABLE SdfFontAtlasGenerator m_atlasGenerator; MsdfFontAtlasGenerator m_msdfAtlasGenerator; #endif - std::vector m_drawablesPool; + std::vector> m_drawablesPool; std::vector m_nodesPool; Vector3f_SIMD m_position = { 0, 0, -10 }; - OpenVulkano::Scene::UI::SimpleUi m_ui; - std::shared_ptr m_perfInfo; + UI::SimpleUi m_ui; + std::shared_ptr m_perfInfo; }; IGraphicsApp* TextExampleApp::Create() { return new TextExampleAppImpl(); } diff --git a/examples/ExampleApps/TexturedCubeExampleApp.cpp b/examples/ExampleApps/TexturedCubeExampleApp.cpp index af3ba7d..396b49f 100644 --- a/examples/ExampleApps/TexturedCubeExampleApp.cpp +++ b/examples/ExampleApps/TexturedCubeExampleApp.cpp @@ -16,7 +16,6 @@ #include "Input/InputManager.hpp" #include "Host/GraphicsAppManager.hpp" #include "Math/Math.hpp" -#include "Base/EngineConfiguration.hpp" #include "Controller/FreeCamCameraController.hpp" #include "Base/FrameMetadata.hpp" @@ -30,14 +29,14 @@ namespace OpenVulkano { OpenVulkano::Scene::Scene scene; PerspectiveCamera cam; - OpenVulkano::FreeCamCameraController camController; + FreeCamCameraController camController; Material mat; Shader shader; SimpleDrawable drawable; Node node; - OpenVulkano::Scene::UI::SimpleUi m_ui; - std::shared_ptr m_perfInfo; + UI::SimpleUi m_ui; + std::shared_ptr m_perfInfo; public: void Init() override @@ -45,9 +44,9 @@ namespace OpenVulkano scene.Init(); cam.Init(70, 16, 9, 0.1f, 100); scene.SetCamera(&cam); - shader.AddShaderProgram(OpenVulkano::ShaderProgramType::VERTEX, "Shader/basic"); - shader.AddShaderProgram(OpenVulkano::ShaderProgramType::FRAGMENT, "Shader/basicTexture"); - shader.AddVertexInputDescription(OpenVulkano::Vertex::GetVertexInputDescription()); + shader.AddShaderProgram(ShaderProgramType::VERTEX, "Shader/basic"); + shader.AddShaderProgram(ShaderProgramType::FRAGMENT, "Shader/basicTexture"); + shader.AddVertexInputDescription(Vertex::GetVertexInputDescription()); shader.AddDescriptorSetLayoutBinding(Texture::DESCRIPTOR_SET_LAYOUT_BINDING); static Geometry geo = GeometryFactory::MakeCube(); mat.texture = &Texture::PLACEHOLDER; @@ -63,7 +62,7 @@ namespace OpenVulkano //camController.SetDefaultKeybindings(); camController.SetPosition({0, 0, 2}); - m_perfInfo = std::make_shared(); + m_perfInfo = std::make_shared(); m_ui.AddElement(m_perfInfo); GetGraphicsAppManager()->GetRenderer()->SetActiveUi(&m_ui); } @@ -73,9 +72,9 @@ namespace OpenVulkano { t += CURRENT_FRAME.frameTime * 0.25; - Math::Matrix4f rotation = Math::Utils::rotate(t, Math::Vector3f_SIMD{1.0f, 0.0f, 0.0f}); - rotation *= Math::Utils::rotate(t, Math::Vector3f_SIMD{0.0f, 1.0f, 0.0f}); - rotation *= Math::Utils::rotate(t, Math::Vector3f_SIMD{0.0f, 0.0f, 1.0f}); + Matrix4f rotation = Math::Utils::rotate(t, Vector3f_SIMD{1.0f, 0.0f, 0.0f}); + rotation *= Math::Utils::rotate(t, Vector3f_SIMD{0.0f, 1.0f, 0.0f}); + rotation *= Math::Utils::rotate(t, Vector3f_SIMD{0.0f, 0.0f, 1.0f}); node.SetMatrix(rotation); camController.Tick(); diff --git a/examples/main.cpp b/examples/main.cpp index f10b998..51a3807 100644 --- a/examples/main.cpp +++ b/examples/main.cpp @@ -29,27 +29,12 @@ int main(int argc, char** argv) int selectedExample = 0; ftxui::MenuOption option; auto screen = ftxui::ScreenInteractive::TerminalOutput(); - screen.ForceHandleCtrlC(true); - //screen.ForceHandleCtrlZ(true); - option.on_enter = screen.ExitLoopClosure(); auto menu = ftxui::Menu(&examples, &selectedExample, option); - bool shouldExit = false; - menu |= ftxui::CatchEvent( - [&](ftxui::Event event) - { - if (event == ftxui::Event::CtrlC || event == ftxui::Event::CtrlZ) - { - screen.ExitLoopClosure()(); - shouldExit = true; - } - return false; - }); + bool shouldExit = true; + option.on_enter = [&] { shouldExit = false; screen.ExitLoopClosure(); }; screen.Loop(menu); - if (shouldExit) - { - return 0; - } + if (shouldExit) return 0; if (selectedExample >= examples.size()) {