From 6cfd760034e6394ee4118acd20a7db9f86c25b42 Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Sun, 5 Jan 2025 23:44:01 +0100 Subject: [PATCH] Move billboard state into LabelDrawableSettings --- examples/ExampleApps/LabelDrawableExampleApp.cpp | 11 +++++------ openVulkanoCpp/Scene/Prefabs/LabelDrawable.cpp | 6 +++--- openVulkanoCpp/Scene/Prefabs/LabelDrawable.hpp | 11 +++++------ 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/examples/ExampleApps/LabelDrawableExampleApp.cpp b/examples/ExampleApps/LabelDrawableExampleApp.cpp index 89373c8..cfe0566 100644 --- a/examples/ExampleApps/LabelDrawableExampleApp.cpp +++ b/examples/ExampleApps/LabelDrawableExampleApp.cpp @@ -63,11 +63,11 @@ namespace OpenVulkano } else { - labelSettings.hasRoundedCorners = i % 2 == 0 ? 0 : 1; - labelSettings.hasArrow = i % 2 == 0 ? 1 : 0; + labelSettings.hasRoundedCorners = i & 1; + labelSettings.hasArrow = i % 2 == 0; } - bool isBillboard = i % 2 == 0 ? 1 : 0; - LabelDrawable& label = m_drawablesPool.emplace_back(textDrawable.GetAtlasData(), labelSettings, isBillboard); + labelSettings.isBillboard = i % 2 == 0; + LabelDrawable& label = m_drawablesPool.emplace_back(textDrawable.GetAtlasData(), labelSettings); label.AddText(texts[i]); if (i == 2) { @@ -88,8 +88,7 @@ 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); } diff --git a/openVulkanoCpp/Scene/Prefabs/LabelDrawable.cpp b/openVulkanoCpp/Scene/Prefabs/LabelDrawable.cpp index a631f17..1e26cc8 100644 --- a/openVulkanoCpp/Scene/Prefabs/LabelDrawable.cpp +++ b/openVulkanoCpp/Scene/Prefabs/LabelDrawable.cpp @@ -68,8 +68,8 @@ namespace OpenVulkano::Scene } } - LabelDrawable::LabelDrawable(const std::shared_ptr& atlasData, const LabelDrawableSettings& settings, const bool isBillboard) - : Drawable(DrawEncoder::GetDrawEncoder(), DrawPhase::MAIN), m_atlasData(atlasData), m_isBillboard(isBillboard) + LabelDrawable::LabelDrawable(const std::shared_ptr& atlasData, const LabelDrawableSettings& settings) + : Drawable(DrawEncoder::GetDrawEncoder(), DrawPhase::MAIN), m_atlasData(atlasData) { if (atlasData->glyphs.empty() || !atlasData->texture.size) { @@ -99,7 +99,7 @@ namespace OpenVulkano::Scene textDrawable.GetConfig().backgroundColor.a = 0; // do not render glyph's background double lineHeight = m_atlasData->meta.lineHeight; textDrawable.GenerateText(text, m_position); - textDrawable.SetShader(GetTextShader(m_atlasData->meta.atlasType, m_isBillboard)); + textDrawable.SetShader(GetTextShader(m_atlasData->meta.atlasType, IsBillboard())); m_bbox.Grow(textDrawable.GetBoundingBox()); // update position for next text entry m_position.y = m_bbox.GetMin().y - lineHeight; diff --git a/openVulkanoCpp/Scene/Prefabs/LabelDrawable.hpp b/openVulkanoCpp/Scene/Prefabs/LabelDrawable.hpp index ac2b23a..1e4b68a 100644 --- a/openVulkanoCpp/Scene/Prefabs/LabelDrawable.hpp +++ b/openVulkanoCpp/Scene/Prefabs/LabelDrawable.hpp @@ -23,8 +23,9 @@ namespace OpenVulkano::Scene float cornerRadius = 0.05f; float arrowLength = 0.5f; float arrowWidth = 0.2f; - int32_t hasRoundedCorners = false; - int32_t hasArrow = false; + bool hasRoundedCorners = false; + bool hasArrow = false; + bool isBillboard = false; }; struct LabelUniformData @@ -43,8 +44,7 @@ namespace OpenVulkano::Scene class LabelDrawable final : public Drawable { public: - LabelDrawable(const std::shared_ptr& atlasData, - const LabelDrawableSettings& settings = LabelDrawableSettings(), bool isBillboard = false); + LabelDrawable(const std::shared_ptr& atlasData, const LabelDrawableSettings& settings = LabelDrawableSettings()); void AddText(const std::string& text, const TextConfig& config = TextConfig()); void SetLabelSettings(const LabelDrawableSettings& settings); void SetPosition(const Math::Vector3f& pos) { m_position = pos; } @@ -52,7 +52,7 @@ namespace OpenVulkano::Scene [[nodiscard]] LabelDrawableSettings& GetSettings() { return m_settings; } [[nodiscard]] UniformBuffer* GetLabelBuffer() { return &m_labelBuffer; } [[nodiscard]] Math::Vector3f& GetPosition() { return m_position; } - [[nodiscard]] bool IsBillboard() const { return m_isBillboard; } + [[nodiscard]] bool IsBillboard() const { return m_settings.isBillboard; } [[nodiscard]] const Math::AABB& GetBoundingBox() const { return m_bbox; } std::optional Intersect(const Ray& ray) const override; @@ -66,6 +66,5 @@ namespace OpenVulkano::Scene std::shared_ptr m_atlasData; Math::Vector3f m_position = { 0, 0, 0 }; Math::AABB m_bbox; - bool m_isBillboard; }; }