2022-04-15 11:19:30 +02:00
|
|
|
#pragma once
|
|
|
|
|
#include "RenderPass.h"
|
|
|
|
|
#include "UI/RenderHierarchy.h"
|
|
|
|
|
#include "Graphics/GraphicsResources.h"
|
|
|
|
|
#include "Asset/FontAsset.h"
|
|
|
|
|
|
|
|
|
|
namespace Seele
|
|
|
|
|
{
|
|
|
|
|
DECLARE_NAME_REF(Gfx, Texture2D)
|
|
|
|
|
DECLARE_NAME_REF(Gfx, RenderTargetAttachment)
|
|
|
|
|
DECLARE_NAME_REF(Gfx, StructuredBuffer)
|
|
|
|
|
struct TextRender
|
|
|
|
|
{
|
|
|
|
|
std::string text;
|
|
|
|
|
PFontAsset font;
|
|
|
|
|
Vector4 textColor;
|
|
|
|
|
Vector2 position;
|
|
|
|
|
float scale;
|
|
|
|
|
};
|
|
|
|
|
struct TextPassData
|
|
|
|
|
{
|
|
|
|
|
Array<TextRender> texts;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class TextPass : public RenderPass<TextPassData>
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
TextPass(Gfx::PGraphics graphics, Gfx::PViewport viewport, Gfx::PRenderTargetAttachment renderTarget);
|
|
|
|
|
virtual ~TextPass();
|
2022-04-15 23:45:44 +02:00
|
|
|
virtual void beginFrame() override;
|
|
|
|
|
virtual void render() override;
|
|
|
|
|
virtual void endFrame() override;
|
2022-04-15 11:19:30 +02:00
|
|
|
virtual void publishOutputs() override;
|
|
|
|
|
virtual void createRenderPass() override;
|
|
|
|
|
private:
|
|
|
|
|
struct GlyphData
|
|
|
|
|
{
|
|
|
|
|
Vector2 bearing;
|
|
|
|
|
Vector2 size;
|
2022-04-17 09:10:20 +02:00
|
|
|
uint32 advance;
|
2022-04-15 11:19:30 +02:00
|
|
|
};
|
|
|
|
|
struct GlyphInstanceData
|
|
|
|
|
{
|
|
|
|
|
Vector2 position;
|
2022-04-17 09:10:20 +02:00
|
|
|
Vector2 widthHeight;
|
|
|
|
|
uint32 glyphIndex;
|
|
|
|
|
};
|
|
|
|
|
struct TextData
|
|
|
|
|
{
|
|
|
|
|
Vector4 textColor;
|
|
|
|
|
float scale;
|
2022-04-15 11:19:30 +02:00
|
|
|
};
|
|
|
|
|
struct FontData
|
|
|
|
|
{
|
2022-04-15 23:45:44 +02:00
|
|
|
Gfx::PDescriptorSet textureArraySet;
|
2022-04-17 09:10:20 +02:00
|
|
|
Array<GlyphData> glyphDataSet;
|
2022-04-15 11:19:30 +02:00
|
|
|
Map<uint32, uint32> characterToGlyphIndex;
|
|
|
|
|
};
|
|
|
|
|
FontData& getFontData(PFontAsset font);
|
|
|
|
|
Map<PFontAsset, FontData> fontData;
|
|
|
|
|
|
|
|
|
|
struct TextResources
|
|
|
|
|
{
|
|
|
|
|
Gfx::PVertexBuffer vertexBuffer;
|
2022-04-15 23:45:44 +02:00
|
|
|
Gfx::PDescriptorSet textureArraySet;
|
2022-04-17 09:10:20 +02:00
|
|
|
TextData textData;
|
2022-04-15 11:19:30 +02:00
|
|
|
};
|
2022-04-18 18:08:38 +02:00
|
|
|
std::map<PFontAsset, Array<TextResources>> textResources;
|
2022-04-15 11:19:30 +02:00
|
|
|
|
|
|
|
|
Gfx::PRenderTargetAttachment renderTarget;
|
|
|
|
|
Gfx::PRenderTargetAttachment depthAttachment;
|
|
|
|
|
Gfx::PTexture2D depthBuffer;
|
|
|
|
|
|
2022-04-15 23:45:44 +02:00
|
|
|
Gfx::PDescriptorLayout generalLayout;
|
2022-04-15 11:19:30 +02:00
|
|
|
Gfx::PDescriptorLayout textureArrayLayout;
|
|
|
|
|
|
2022-04-15 23:45:44 +02:00
|
|
|
Gfx::PDescriptorSet generalSet;
|
|
|
|
|
|
2022-04-15 11:19:30 +02:00
|
|
|
Gfx::PUniformBuffer projectionBuffer;
|
|
|
|
|
Gfx::PSamplerState glyphSampler;
|
|
|
|
|
|
|
|
|
|
Gfx::PVertexDeclaration declaration;
|
|
|
|
|
Gfx::PVertexShader vertexShader;
|
|
|
|
|
Gfx::PFragmentShader fragmentShader;
|
|
|
|
|
Gfx::PPipelineLayout pipelineLayout;
|
|
|
|
|
Gfx::PGraphicsPipeline pipeline;
|
|
|
|
|
};
|
|
|
|
|
DEFINE_REF(TextPass);
|
|
|
|
|
} // namespace Seele
|