2022-05-21 19:58:09 +02:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <memory>
|
|
|
|
#include <cstdint>
|
|
|
|
#include "StringBase.h"
|
|
|
|
|
|
|
|
namespace Assets
|
|
|
|
{
|
|
|
|
// Represents an OpenGl compatible font that can be embedded for rendering.
|
|
|
|
class RenderFont
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
// Initialize a new render font from the provided LZ4 compressed buffer
|
|
|
|
RenderFont();
|
|
|
|
~RenderFont();
|
|
|
|
|
|
|
|
// Loads a font from the provided LZ4 compressed buffer
|
|
|
|
void LoadFont(const uint8_t* Buffer, uint64_t BufferLength);
|
|
|
|
// Loads a font from the provided file path.
|
2022-05-21 21:51:35 +02:00
|
|
|
void LoadFont(const String& FontPath);
|
2022-05-21 19:58:09 +02:00
|
|
|
|
|
|
|
// Renders a string to the current opengl context.
|
|
|
|
void RenderString(const char* Text, float X, float Y, float Scale = 1.f);
|
|
|
|
// Renders a string to the current opengl context.
|
2022-05-21 21:51:35 +02:00
|
|
|
void RenderString(const String& Text, float X, float Y, float Scale = 1.f);
|
2022-05-21 19:58:09 +02:00
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
// Internal cached flags for the atlas
|
|
|
|
#pragma pack(push, 1)
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
uint32_t Magic;
|
|
|
|
uint32_t Width;
|
|
|
|
uint32_t Height;
|
|
|
|
uint32_t CellWidth;
|
|
|
|
uint32_t CellHeight;
|
|
|
|
|
|
|
|
uint8_t Bpp;
|
|
|
|
uint8_t BaseIndex;
|
|
|
|
} FontHeader;
|
|
|
|
#pragma pack(pop)
|
|
|
|
|
|
|
|
uint8_t Widths[256];
|
|
|
|
|
|
|
|
uint32_t TextureID;
|
|
|
|
uint32_t RowPitch;
|
|
|
|
|
|
|
|
float RowFactor;
|
|
|
|
float ColFactor;
|
|
|
|
|
|
|
|
bool Initialized;
|
|
|
|
|
|
|
|
// Internal routine to render a string
|
|
|
|
void RenderStringInternal(const char* Text, uint32_t Length, float X, float Y, float Scale);
|
|
|
|
|
|
|
|
// Internal routine to cleanup the texture instance
|
|
|
|
void Dispose();
|
|
|
|
};
|
|
|
|
}
|