From f124a2291032c0eb81a96f1fd73c83661e7bb9a0 Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Sat, 4 Jan 2025 01:52:11 +0100 Subject: [PATCH] Cleanup duplicated text shader --- openVulkanoCpp/Scene/AtlasData.hpp | 19 ++++++++++++------- openVulkanoCpp/Scene/TextDrawable.cpp | 14 ++++++++------ openVulkanoCpp/Shader/sdfText.vert | 26 -------------------------- 3 files changed, 20 insertions(+), 39 deletions(-) delete mode 100644 openVulkanoCpp/Shader/sdfText.vert diff --git a/openVulkanoCpp/Scene/AtlasData.hpp b/openVulkanoCpp/Scene/AtlasData.hpp index ed75309..f62c8de 100644 --- a/openVulkanoCpp/Scene/AtlasData.hpp +++ b/openVulkanoCpp/Scene/AtlasData.hpp @@ -29,20 +29,23 @@ namespace OpenVulkano::Scene public: enum Type : int16_t { - SDF = 0, + BITMAP = 0, + SDF, MSDF, - BITMAP, UNKNOWN }; - static constexpr std::string_view DEFAULT_FG_SHADERS[] = { "Shader/text", "Shader/msdfText" }; - public: - FontAtlasType(Type type) : m_type(type) {} - Type GetType() const { return m_type; } - const std::string_view& GetDefaultFragmentShader() const + static constexpr std::string_view DEFAULT_FG_SHADERS[] = { "Shader/text", "Shader/sdfText", "Shader/msdfText" }; + + constexpr FontAtlasType(Type type) : m_type(type) {} + + [[nodiscard]] constexpr Type GetType() const { return m_type; } + + [[nodiscard]] constexpr const std::string_view& GetDefaultFragmentShader() const { return DEFAULT_FG_SHADERS[static_cast(m_type)]; } + private: Type m_type; }; @@ -60,6 +63,8 @@ namespace OpenVulkano::Scene AtlasMetadata meta; Unique img; Texture texture; + + operator bool() const { return !glyphs.empty(); } }; } \ No newline at end of file diff --git a/openVulkanoCpp/Scene/TextDrawable.cpp b/openVulkanoCpp/Scene/TextDrawable.cpp index fd8df4c..036e199 100644 --- a/openVulkanoCpp/Scene/TextDrawable.cpp +++ b/openVulkanoCpp/Scene/TextDrawable.cpp @@ -22,11 +22,13 @@ namespace OpenVulkano::Scene { namespace { - Shader MakeDefaultShader(const std::string& vertexShader, const std::string& fragmentShader) + constexpr uint32_t MISSING_GLYPH_SYMBOL = '?'; + + Shader MakeDefaultShader(FontAtlasType type) { Shader shader; - shader.AddShaderProgram(ShaderProgramType::VERTEX, "Shader/" + vertexShader); - shader.AddShaderProgram(ShaderProgramType::FRAGMENT, "Shader/" + fragmentShader); + shader.AddShaderProgram(ShaderProgramType::VERTEX, "Shader/text"); + shader.AddShaderProgram(ShaderProgramType::FRAGMENT, std::string(type.GetDefaultFragmentShader())); shader.AddVertexInputDescription(Vertex::GetVertexInputDescription()); shader.AddDescriptorSetLayoutBinding(Texture::DESCRIPTOR_SET_LAYOUT_BINDING); DescriptorSetLayoutBinding desc = UniformBuffer::DESCRIPTOR_SET_LAYOUT_BINDING; @@ -38,9 +40,9 @@ namespace OpenVulkano::Scene } } - Shader TextDrawable::DEFAULT_SHADER_BITMAP = MakeDefaultShader("text", "text"); - Shader TextDrawable::DEFAULT_SHADER_SDF = MakeDefaultShader("sdfText", "sdfText"); - Shader TextDrawable::DEFAULT_SHADER_MSDF = MakeDefaultShader("sdfText", "msdfText"); + Shader TextDrawable::DEFAULT_SHADER_BITMAP = MakeDefaultShader(FontAtlasType::BITMAP); + Shader TextDrawable::DEFAULT_SHADER_SDF = MakeDefaultShader(FontAtlasType::SDF); + Shader TextDrawable::DEFAULT_SHADER_MSDF = MakeDefaultShader(FontAtlasType::MSDF); TextDrawable::TextDrawable(const TextConfig& config) : m_cfg(config) { diff --git a/openVulkanoCpp/Shader/sdfText.vert b/openVulkanoCpp/Shader/sdfText.vert deleted file mode 100644 index c259c65..0000000 --- a/openVulkanoCpp/Shader/sdfText.vert +++ /dev/null @@ -1,26 +0,0 @@ -#version 450 -layout(location = 0) in vec3 position; -layout(location = 1) in vec3 normal; -layout(location = 2) in vec3 tangent; -layout(location = 3) in vec3 biTangent; -layout(location = 4) in vec3 textureCoordinates; -layout(location = 5) in vec4 color; -layout(location = 1) out vec2 fragTextureCoordinates; - -layout(set = 0, binding = 0) uniform NodeData -{ - mat4 world; -} node; - -layout(set = 1, binding = 0) uniform CameraData -{ - mat4 viewProjection; - mat4 view; - mat4 projection; - vec4 camPos; -} cam; - -void main() { - gl_Position = cam.viewProjection * node.world * vec4(position, 1.0); - fragTextureCoordinates.xy = textureCoordinates.xy; -}