#pragma once #include "RenderPass.h" #include "UI/RenderHierarchy.h" #include "Graphics/Resources.h" #include "Asset/FontAsset.h" namespace Seele { DECLARE_NAME_REF(Gfx, Texture2D) DECLARE_NAME_REF(Gfx, RenderTargetAttachment) DECLARE_NAME_REF(Gfx, ShaderBuffer) struct TextRender { std::string text; PFontAsset font; Vector4 textColor; Vector2 position; float scale; }; class TextPass : public RenderPass { public: TextPass(Gfx::PGraphics graphics, PScene scene); virtual ~TextPass(); virtual void beginFrame(const Component::Camera& cam) override; virtual void render() override; virtual void endFrame() override; virtual void publishOutputs() override; virtual void createRenderPass() override; private: struct GlyphData { Vector2 bearing; Vector2 size; uint32 advance; }; struct GlyphInstanceData { Vector2 position; Vector2 widthHeight; uint32 glyphIndex; }; struct TextData { Vector4 textColor; float scale; }; struct FontData { Gfx::PDescriptorSet textureArraySet; Array glyphDataSet; Map characterToGlyphIndex; }; FontData& getFontData(PFontAsset font); Map fontData; struct TextResources { Gfx::PVertexBuffer vertexBuffer; Gfx::PDescriptorSet textureArraySet; TextData textData; }; Map> textResources; Gfx::PRenderTargetAttachment renderTarget; Gfx::PRenderTargetAttachment depthAttachment; Gfx::PDescriptorLayout generalLayout; Gfx::PDescriptorLayout textureArrayLayout; Gfx::PDescriptorSet generalSet; Gfx::PUniformBuffer projectionBuffer; Gfx::PSamplerState glyphSampler; Gfx::PVertexDeclaration declaration; Gfx::PVertexShader vertexShader; Gfx::PFragmentShader fragmentShader; Gfx::PPipelineLayout pipelineLayout; Gfx::PGraphicsPipeline pipeline; Array texts; }; DEFINE_REF(TextPass); } // namespace Seele