Fix text position

This commit is contained in:
Georg Hagen
2025-01-05 17:15:18 +01:00
parent aca64c57b7
commit 56cb508002
5 changed files with 18 additions and 17 deletions

View File

@@ -7,30 +7,31 @@
#pragma once #pragma once
#include "IFontAtlasGenerator.hpp" #include "IFontAtlasGenerator.hpp"
#include "AtlasData.hpp"
#include "Math/AABB.hpp" #include "Math/AABB.hpp"
#include "Extensions/FreetypeHelper.hpp" #include "Extensions/FreetypeHelper.hpp"
#include <variant> #include <variant>
#include <set>
namespace OpenVulkano::Scene namespace OpenVulkano::Scene
{ {
class FontAtlasGeneratorBase : public IFontAtlasGenerator class FontAtlasGeneratorBase : public IFontAtlasGenerator
{ {
protected:
int m_channelsCount;
std::shared_ptr<AtlasData> m_atlasData;
public: public:
FontAtlasGeneratorBase(int channelsCount) : m_channelsCount(channelsCount) {} FontAtlasGeneratorBase(const int channelsCount) : m_channelsCount(channelsCount) {}
void SaveAtlasMetadataInfo(const std::string& outputFile, bool packIntoSingleFile = true) const override; void SaveAtlasMetadataInfo(const std::string& outputFile, bool packIntoSingleFile = true) const override;
std::shared_ptr<AtlasData> GetAtlasData() const { return m_atlasData; } [[nodiscard]] const std::shared_ptr<AtlasData>& GetAtlasData() const override { return m_atlasData; }
int GetAtlasChannelsCount() const { return m_channelsCount; } [[nodiscard]] int GetAtlasChannelsCount() const { return m_channelsCount; }
static std::set<uint32_t> LoadAllGlyphs(const std::variant<std::string, Array<char>>& data); [[nodiscard]] static std::set<uint32_t> LoadAllGlyphs(const std::variant<std::string, Array<char>>& data);
protected: protected:
void SavePng(std::string output) const; void SavePng(std::string output) const;
void SetupAtlasData(Math::Vector2ui textureResolution, double lineHeight, FontAtlasType::Type atlasType); void SetupAtlasData(Math::Vector2ui textureResolution, double lineHeight, FontAtlasType::Type atlasType);
void SetGlyphData(GlyphInfo& info, Math::Vector2d bearing, Math::Vector2d size, const Math::AABB& aabb, double advance); void SetGlyphData(GlyphInfo& info, Math::Vector2d bearing, Math::Vector2d size, const Math::AABB& aabb, double advance);
static std::string GetFreetypeErrorDescription(FT_Error error); [[nodiscard]] static std::string GetFreetypeErrorDescription(FT_Error error);
static std::pair<FtLibraryRecPtr, FtFaceRecPtr> InitFreetype(const std::variant<std::string, Array<char>>& source); [[nodiscard]] static std::pair<FtLibraryRecPtr, FtFaceRecPtr> InitFreetype(const std::variant<std::string, Array<char>>& source);
protected:
int m_channelsCount;
std::shared_ptr<AtlasData> m_atlasData;
}; };
} }

View File

@@ -6,24 +6,25 @@
#pragma once #pragma once
#include "Scene/AtlasData.hpp" #include <Data/Containers/Array.hpp>
#include <string> #include <string>
#include <optional> #include <optional>
#include <map>
#include <variant>
#include <set> #include <set>
#include <memory> #include <memory>
namespace OpenVulkano::Scene namespace OpenVulkano::Scene
{ {
struct AtlasData;
class IFontAtlasGenerator class IFontAtlasGenerator
{ {
public: public:
virtual ~IFontAtlasGenerator() = default;
virtual void GenerateAtlas(const std::string& fontFile, const std::set<uint32_t>& charset, virtual void GenerateAtlas(const std::string& fontFile, const std::set<uint32_t>& charset,
const std::optional<std::string>& pngOutput = std::nullopt) = 0; const std::optional<std::string>& pngOutput = std::nullopt) = 0;
virtual void GenerateAtlas(const Array<char>& fontData, const std::set<uint32_t>& charset, virtual void GenerateAtlas(const Array<char>& fontData, const std::set<uint32_t>& charset,
const std::optional<std::string>& pngOutput = std::nullopt) = 0; const std::optional<std::string>& pngOutput = std::nullopt) = 0;
virtual void SaveAtlasMetadataInfo(const std::string& outputFile, bool packIntoSingleFile = true) const = 0; virtual void SaveAtlasMetadataInfo(const std::string& outputFile, bool packIntoSingleFile = true) const = 0;
virtual std::shared_ptr<AtlasData> GetAtlasData() const = 0; virtual const std::shared_ptr<AtlasData>& GetAtlasData() const = 0;
}; };
} }

View File

@@ -7,7 +7,6 @@
#pragma once #pragma once
#include "Scene/Drawable.hpp" #include "Scene/Drawable.hpp"
#include "Scene/Texture.hpp"
#include "Scene/UniformBuffer.hpp" #include "Scene/UniformBuffer.hpp"
#include "Scene/BillboardControlBlock.hpp" #include "Scene/BillboardControlBlock.hpp"
#include "Math/AABB.hpp" #include "Math/AABB.hpp"

View File

@@ -20,7 +20,7 @@ layout(set = 1, binding = 0) uniform CameraData
} cam; } cam;
void main() { void main() {
gl_Position = cam.viewProjection * node.world * vec4(position[gl_VertexIndex], 1.0, 1.0); gl_Position = cam.viewProjection * node.world * vec4(position[gl_VertexIndex], 0.0, 1.0);
fragTextureCoordinates = textureCoordinates[gl_VertexIndex]; fragTextureCoordinates = textureCoordinates[gl_VertexIndex];
outColor = color; outColor = color;
outBgColor = bgColor; outBgColor = bgColor;

View File

@@ -53,7 +53,7 @@ void main()
} }
else else
{ {
vec4 billboardPos = vec4(0.5, 0.5, 0.5, 1); vec4 billboardPos = vec4(0.5, 0.5, 0, 1);
vec4 viewPos = cam.view * node.world * billboardPos; vec4 viewPos = cam.view * node.world * billboardPos;
float dist = -viewPos.z; float dist = -viewPos.z;
gl_Position = cam.projection * (viewPos + vec4(pos.xy * dist * 0.2, 0, 0)); gl_Position = cam.projection * (viewPos + vec4(pos.xy * dist * 0.2, 0, 0));