From d96ced96c0209e62c2f9501c1887f4d1bb397982 Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Sat, 4 Jan 2025 01:15:25 +0100 Subject: [PATCH] Deduplicate shader creation function for text drawable --- openVulkanoCpp/Scene/TextDrawable.cpp | 66 ++++++--------------------- openVulkanoCpp/Scene/TextDrawable.hpp | 10 ++-- 2 files changed, 19 insertions(+), 57 deletions(-) diff --git a/openVulkanoCpp/Scene/TextDrawable.cpp b/openVulkanoCpp/Scene/TextDrawable.cpp index 476e064..c886987 100644 --- a/openVulkanoCpp/Scene/TextDrawable.cpp +++ b/openVulkanoCpp/Scene/TextDrawable.cpp @@ -20,65 +20,27 @@ namespace OpenVulkano::Scene { - Shader& TextDrawable::GetSdfDefaultShader() + namespace { - static bool once = true; - static Shader sdfDefaultShader; - if (once) + Shader MakeDefaultShader(const std::string& vertexShader, const std::string& fragmentShader) { - sdfDefaultShader.AddShaderProgram(ShaderProgramType::VERTEX, "Shader/sdfText"); - sdfDefaultShader.AddShaderProgram(ShaderProgramType::FRAGMENT, "Shader/sdfText"); - sdfDefaultShader.AddVertexInputDescription(Vertex::GetVertexInputDescription()); - sdfDefaultShader.AddDescriptorSetLayoutBinding(Texture::DESCRIPTOR_SET_LAYOUT_BINDING); + Shader shader; + shader.AddShaderProgram(ShaderProgramType::VERTEX, "Shader/" + vertexShader); + shader.AddShaderProgram(ShaderProgramType::FRAGMENT, "Shader/" + fragmentShader); + shader.AddVertexInputDescription(Vertex::GetVertexInputDescription()); + shader.AddDescriptorSetLayoutBinding(Texture::DESCRIPTOR_SET_LAYOUT_BINDING); DescriptorSetLayoutBinding desc = UniformBuffer::DESCRIPTOR_SET_LAYOUT_BINDING; desc.stageFlags = ShaderProgramType::FRAGMENT; - sdfDefaultShader.AddDescriptorSetLayoutBinding(desc); - sdfDefaultShader.alphaBlend = true; - sdfDefaultShader.cullMode = CullMode::NONE; - once = false; + shader.AddDescriptorSetLayoutBinding(desc); + shader.alphaBlend = true; + shader.cullMode = CullMode::NONE; + return shader; } - return sdfDefaultShader; } - Shader& TextDrawable::GetMsdfDefaultShader() - { - static bool once = true; - static Shader msdfDefaultShader; - if (once) - { - msdfDefaultShader.AddShaderProgram(ShaderProgramType::VERTEX, "Shader/sdfText"); - msdfDefaultShader.AddShaderProgram(ShaderProgramType::FRAGMENT, "Shader/msdfText"); - msdfDefaultShader.AddVertexInputDescription(Vertex::GetVertexInputDescription()); - msdfDefaultShader.AddDescriptorSetLayoutBinding(Texture::DESCRIPTOR_SET_LAYOUT_BINDING); - DescriptorSetLayoutBinding desc = UniformBuffer::DESCRIPTOR_SET_LAYOUT_BINDING; - desc.stageFlags = ShaderProgramType::FRAGMENT; - msdfDefaultShader.AddDescriptorSetLayoutBinding(desc); - msdfDefaultShader.alphaBlend = true; - msdfDefaultShader.cullMode = CullMode::NONE; - once = false; - } - return msdfDefaultShader; - } - - Shader& TextDrawable::GetBitmapDefaultShader() - { - static bool once = true; - static Shader bitmapDefaultShader; - if (once) - { - bitmapDefaultShader.AddShaderProgram(ShaderProgramType::VERTEX, "Shader/text"); - bitmapDefaultShader.AddShaderProgram(ShaderProgramType::FRAGMENT, "Shader/text"); - bitmapDefaultShader.AddVertexInputDescription(Vertex::GetVertexInputDescription()); - bitmapDefaultShader.AddDescriptorSetLayoutBinding(Texture::DESCRIPTOR_SET_LAYOUT_BINDING); - DescriptorSetLayoutBinding desc = UniformBuffer::DESCRIPTOR_SET_LAYOUT_BINDING; - desc.stageFlags = ShaderProgramType::FRAGMENT; - bitmapDefaultShader.AddDescriptorSetLayoutBinding(desc); - bitmapDefaultShader.alphaBlend = true; - bitmapDefaultShader.cullMode = CullMode::NONE; - once = false; - } - return bitmapDefaultShader; - } + Shader TextDrawable::DEFAULT_SHADER_BITMAP = MakeDefaultShader("text", "text"); + Shader TextDrawable::DEFAULT_SHADER_SDF = MakeDefaultShader("sdfText", "sdfText"); + Shader TextDrawable::DEFAULT_SHADER_MSDF = MakeDefaultShader("sdfText", "msdfText"); TextDrawable::TextDrawable(const TextConfig& config) { diff --git a/openVulkanoCpp/Scene/TextDrawable.hpp b/openVulkanoCpp/Scene/TextDrawable.hpp index 8e07e74..6bc1471 100644 --- a/openVulkanoCpp/Scene/TextDrawable.hpp +++ b/openVulkanoCpp/Scene/TextDrawable.hpp @@ -13,8 +13,6 @@ #include "UniformBuffer.hpp" #include "AtlasData.hpp" #include "Image/Image.hpp" -#include -#include namespace OpenVulkano::Scene { @@ -35,10 +33,12 @@ namespace OpenVulkano::Scene class TextDrawable : public SimpleDrawable { + static Shader DEFAULT_SHADER_BITMAP, DEFAULT_SHADER_SDF, DEFAULT_SHADER_MSDF; + public: - static Shader& GetSdfDefaultShader(); - static Shader& GetMsdfDefaultShader(); - static Shader& GetBitmapDefaultShader(); + [[nodiscard]] static Shader& GetSdfDefaultShader() { return DEFAULT_SHADER_SDF; } + [[nodiscard]] static Shader& GetMsdfDefaultShader() { return DEFAULT_SHADER_MSDF; } + [[nodiscard]] static Shader& GetBitmapDefaultShader() { return DEFAULT_SHADER_BITMAP; } TextDrawable(const TextConfig& config = TextConfig()); TextDrawable(const Array& atlasMetadata, const TextConfig& config = TextConfig()); TextDrawable(const std::string& atlasMetadataFile, const TextConfig& config = TextConfig());