support msdf
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
#include "Scene/Material.hpp"
|
||||
#include "Scene/Vertex.hpp"
|
||||
#include "Scene/UniformBuffer.hpp"
|
||||
#include "Scene/FontAtlasGenerator.hpp"
|
||||
#include "Scene/IFontAtlasGenerator.hpp"
|
||||
#include "Base/Logger.hpp"
|
||||
#include "Host/ResourceLoader.hpp"
|
||||
#include "Image/ImageLoader.hpp"
|
||||
@@ -20,22 +20,40 @@
|
||||
|
||||
namespace OpenVulkano::Scene
|
||||
{
|
||||
Shader& TextDrawable::GetDefaultShader()
|
||||
Shader& TextDrawable::GetSdfDefaultShader()
|
||||
{
|
||||
static bool once = true;
|
||||
static Shader textDefaultShader;
|
||||
static Shader sdfDefaultShader;
|
||||
if (once)
|
||||
{
|
||||
textDefaultShader.AddShaderProgram(OpenVulkano::ShaderProgramType::VERTEX, "Shader/text");
|
||||
textDefaultShader.AddShaderProgram(OpenVulkano::ShaderProgramType::FRAGMENT, "Shader/text");
|
||||
textDefaultShader.AddVertexInputDescription(OpenVulkano::Vertex::GetVertexInputDescription());
|
||||
textDefaultShader.AddDescriptorSetLayoutBinding(Texture::DESCRIPTOR_SET_LAYOUT_BINDING);
|
||||
textDefaultShader.AddDescriptorSetLayoutBinding(UniformBuffer::DESCRIPTOR_SET_LAYOUT_BINDING);
|
||||
textDefaultShader.alphaBlend = true;
|
||||
textDefaultShader.cullMode = CullMode::NONE;
|
||||
sdfDefaultShader.AddShaderProgram(OpenVulkano::ShaderProgramType::VERTEX, "Shader/text");
|
||||
sdfDefaultShader.AddShaderProgram(OpenVulkano::ShaderProgramType::FRAGMENT, "Shader/text");
|
||||
sdfDefaultShader.AddVertexInputDescription(OpenVulkano::Vertex::GetVertexInputDescription());
|
||||
sdfDefaultShader.AddDescriptorSetLayoutBinding(Texture::DESCRIPTOR_SET_LAYOUT_BINDING);
|
||||
sdfDefaultShader.AddDescriptorSetLayoutBinding(UniformBuffer::DESCRIPTOR_SET_LAYOUT_BINDING);
|
||||
sdfDefaultShader.alphaBlend = true;
|
||||
sdfDefaultShader.cullMode = CullMode::NONE;
|
||||
once = false;
|
||||
}
|
||||
return textDefaultShader;
|
||||
return sdfDefaultShader;
|
||||
}
|
||||
|
||||
Shader& TextDrawable::GetMsdfDefaultShader()
|
||||
{
|
||||
static bool once = true;
|
||||
static Shader msdfDefaultShader;
|
||||
if (once)
|
||||
{
|
||||
msdfDefaultShader.AddShaderProgram(OpenVulkano::ShaderProgramType::VERTEX, "Shader/text");
|
||||
msdfDefaultShader.AddShaderProgram(OpenVulkano::ShaderProgramType::FRAGMENT, "Shader/msdfText");
|
||||
msdfDefaultShader.AddVertexInputDescription(OpenVulkano::Vertex::GetVertexInputDescription());
|
||||
msdfDefaultShader.AddDescriptorSetLayoutBinding(Texture::DESCRIPTOR_SET_LAYOUT_BINDING);
|
||||
msdfDefaultShader.AddDescriptorSetLayoutBinding(UniformBuffer::DESCRIPTOR_SET_LAYOUT_BINDING);
|
||||
msdfDefaultShader.alphaBlend = true;
|
||||
msdfDefaultShader.cullMode = CullMode::NONE;
|
||||
once = false;
|
||||
}
|
||||
return msdfDefaultShader;
|
||||
}
|
||||
|
||||
TextDrawable::TextDrawable(const Array<char>& atlasMetadata, const TextConfig& config)
|
||||
@@ -63,12 +81,13 @@ namespace OpenVulkano::Scene
|
||||
uint64_t offsetToMetadata = atlasMetadata.Size() - metadataBytes - sizeof(uint32_t) - sizeof(uint64_t);
|
||||
if (isPacked)
|
||||
{
|
||||
m_material.texture = new Texture();
|
||||
m_texture = Texture();
|
||||
m_material.texture = &m_texture.value();
|
||||
m_img = Image::IImageLoader::loadData((const uint8_t*) atlasMetadata.Data(),
|
||||
offsetToMetadata);
|
||||
m_material.texture->format = m_img->dataFormat;
|
||||
m_material.texture->resolution = m_img->resolution;
|
||||
m_material.texture->size = m_img->data.Size(); // 1 channel
|
||||
m_material.texture->size = m_img->data.Size();
|
||||
m_material.texture->textureBuffer = m_img->data.Data();
|
||||
}
|
||||
else
|
||||
@@ -110,7 +129,7 @@ namespace OpenVulkano::Scene
|
||||
m_uniBuffer.Init(sizeof(TextConfig), &m_cfg, 3);
|
||||
}
|
||||
|
||||
TextDrawable::TextDrawable(FontAtlasGenerator* fontAtlasGenerator, const TextConfig& config)
|
||||
TextDrawable::TextDrawable(IFontAtlasGenerator* fontAtlasGenerator, const TextConfig& config)
|
||||
{
|
||||
if (!fontAtlasGenerator) { throw std::runtime_error("FontAtlasGenerator is nullptr"); }
|
||||
if (fontAtlasGenerator->GetGlyphsInfo().empty()) { throw std::runtime_error("Glyphs are not loaded"); }
|
||||
@@ -237,7 +256,7 @@ namespace OpenVulkano::Scene
|
||||
SimpleDrawable::Init(m_shader, &m_geometry, &m_material, &m_uniBuffer);
|
||||
}
|
||||
|
||||
void TextDrawable::SetFontAtlasGenerator(FontAtlasGenerator* fontAtlasGenerator)
|
||||
void TextDrawable::SetFontAtlasGenerator(IFontAtlasGenerator* fontAtlasGenerator)
|
||||
{
|
||||
if (!fontAtlasGenerator || fontAtlasGenerator->GetGlyphsInfo().empty())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user