Fix text position
This commit is contained in:
@@ -7,30 +7,31 @@
|
||||
#pragma once
|
||||
|
||||
#include "IFontAtlasGenerator.hpp"
|
||||
#include "AtlasData.hpp"
|
||||
#include "Math/AABB.hpp"
|
||||
#include "Extensions/FreetypeHelper.hpp"
|
||||
#include <variant>
|
||||
#include <set>
|
||||
|
||||
namespace OpenVulkano::Scene
|
||||
{
|
||||
class FontAtlasGeneratorBase : public IFontAtlasGenerator
|
||||
{
|
||||
protected:
|
||||
int m_channelsCount;
|
||||
std::shared_ptr<AtlasData> m_atlasData;
|
||||
|
||||
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;
|
||||
std::shared_ptr<AtlasData> GetAtlasData() const { return m_atlasData; }
|
||||
int GetAtlasChannelsCount() const { return m_channelsCount; }
|
||||
static std::set<uint32_t> LoadAllGlyphs(const std::variant<std::string, Array<char>>& data);
|
||||
[[nodiscard]] const std::shared_ptr<AtlasData>& GetAtlasData() const override { return m_atlasData; }
|
||||
[[nodiscard]] int GetAtlasChannelsCount() const { return m_channelsCount; }
|
||||
[[nodiscard]] static std::set<uint32_t> LoadAllGlyphs(const std::variant<std::string, Array<char>>& data);
|
||||
|
||||
protected:
|
||||
void SavePng(std::string output) const;
|
||||
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);
|
||||
static std::string GetFreetypeErrorDescription(FT_Error error);
|
||||
static std::pair<FtLibraryRecPtr, FtFaceRecPtr> InitFreetype(const std::variant<std::string, Array<char>>& source);
|
||||
protected:
|
||||
int m_channelsCount;
|
||||
std::shared_ptr<AtlasData> m_atlasData;
|
||||
[[nodiscard]] static std::string GetFreetypeErrorDescription(FT_Error error);
|
||||
[[nodiscard]] static std::pair<FtLibraryRecPtr, FtFaceRecPtr> InitFreetype(const std::variant<std::string, Array<char>>& source);
|
||||
};
|
||||
}
|
||||
@@ -6,24 +6,25 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "Scene/AtlasData.hpp"
|
||||
#include <Data/Containers/Array.hpp>
|
||||
#include <string>
|
||||
#include <optional>
|
||||
#include <map>
|
||||
#include <variant>
|
||||
#include <set>
|
||||
#include <memory>
|
||||
|
||||
namespace OpenVulkano::Scene
|
||||
{
|
||||
struct AtlasData;
|
||||
|
||||
class IFontAtlasGenerator
|
||||
{
|
||||
public:
|
||||
virtual ~IFontAtlasGenerator() = default;
|
||||
virtual void GenerateAtlas(const std::string& fontFile, const std::set<uint32_t>& charset,
|
||||
const std::optional<std::string>& pngOutput = std::nullopt) = 0;
|
||||
virtual void GenerateAtlas(const Array<char>& fontData, const std::set<uint32_t>& charset,
|
||||
const std::optional<std::string>& pngOutput = std::nullopt) = 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;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "Scene/Drawable.hpp"
|
||||
#include "Scene/Texture.hpp"
|
||||
#include "Scene/UniformBuffer.hpp"
|
||||
#include "Scene/BillboardControlBlock.hpp"
|
||||
#include "Math/AABB.hpp"
|
||||
|
||||
@@ -20,7 +20,7 @@ layout(set = 1, binding = 0) uniform CameraData
|
||||
} cam;
|
||||
|
||||
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];
|
||||
outColor = color;
|
||||
outBgColor = bgColor;
|
||||
|
||||
@@ -53,7 +53,7 @@ void main()
|
||||
}
|
||||
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;
|
||||
float dist = -viewPos.z;
|
||||
gl_Position = cam.projection * (viewPos + vec4(pos.xy * dist * 0.2, 0, 0));
|
||||
|
||||
Reference in New Issue
Block a user