From 20b74c4818b58f9be8c6459de3aa6afadb8e7040 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sun, 29 Mar 2020 03:35:01 -0400 Subject: [PATCH] CTextRenderBuffer: Forward declare structs where applicable These are only used internally, so we can completely hide these structs from external view. This allows their implementation to be changed without needing to recompile all the headers that include it. --- Runtime/GuiSys/CTextRenderBuffer.cpp | 77 +++++++++++++++++++--------- Runtime/GuiSys/CTextRenderBuffer.hpp | 32 +++--------- 2 files changed, 60 insertions(+), 49 deletions(-) diff --git a/Runtime/GuiSys/CTextRenderBuffer.cpp b/Runtime/GuiSys/CTextRenderBuffer.cpp index 2888b5867..ffebd3aa8 100644 --- a/Runtime/GuiSys/CTextRenderBuffer.cpp +++ b/Runtime/GuiSys/CTextRenderBuffer.cpp @@ -12,31 +12,60 @@ namespace urde { +struct CTextRenderBuffer::BooFontCharacters { + TLockedToken m_font; + hecl::VertexBufferPool::Token m_instBuf; + boo::ObjToken m_dataBinding; + boo::ObjToken m_dataBinding2; + std::vector m_charData; + u32 m_charCount = 0; + bool m_dirty = true; + + BooFontCharacters(const CToken& token) : m_font(token) {} +}; + +struct CTextRenderBuffer::BooImage { + CFontImageDef m_imageDef; + hecl::VertexBufferPool::Token m_instBuf; + std::vector> m_dataBinding; + std::vector> m_dataBinding2; + CTextSupportShader::ImageInstance m_imageData; + bool m_dirty = true; + + BooImage(const CFontImageDef& imgDef, const zeus::CVector2i& offset) : m_imageDef(imgDef) { + m_imageData.SetMetrics(imgDef, offset); + } +}; + +struct CTextRenderBuffer::BooPrimitiveMark { + Command m_cmd; + u32 m_bindIdx; + u32 m_instIdx; + + void SetOpacity(CTextRenderBuffer& rb, float opacity) { + switch (m_cmd) { + case Command::CharacterRender: { + BooFontCharacters& fc = rb.m_fontCharacters[m_bindIdx]; + CTextSupportShader::CharacterInstance& inst = fc.m_charData[m_instIdx]; + inst.m_mulColor.a() = opacity; + fc.m_dirty = true; + break; + } + case Command::ImageRender: { + BooImage& img = rb.m_images[m_bindIdx]; + img.m_imageData.m_color.a() = opacity; + img.m_dirty = true; + break; + } + default: + break; + } + } +}; + CTextRenderBuffer::CTextRenderBuffer(EMode mode, CGuiWidget::EGuiModelDrawFlags df) : x0_mode(mode), m_drawFlags(df) {} -CTextRenderBuffer::BooImage::BooImage(const CFontImageDef& imgDef, const zeus::CVector2i& offset) : m_imageDef(imgDef) { - m_imageData.SetMetrics(imgDef, offset); -} - -void CTextRenderBuffer::BooPrimitiveMark::SetOpacity(CTextRenderBuffer& rb, float opacity) { - switch (m_cmd) { - case Command::CharacterRender: { - BooFontCharacters& fc = rb.m_fontCharacters[m_bindIdx]; - CTextSupportShader::CharacterInstance& inst = fc.m_charData[m_instIdx]; - inst.m_mulColor.a() = opacity; - fc.m_dirty = true; - break; - } - case Command::ImageRender: { - BooImage& img = rb.m_images[m_bindIdx]; - img.m_imageData.m_color.a() = opacity; - img.m_dirty = true; - break; - } - default: - break; - } -} +CTextRenderBuffer::~CTextRenderBuffer() = default; void CTextRenderBuffer::CommitResources() { if (m_committed) @@ -125,6 +154,8 @@ void CTextRenderBuffer::SetPrimitiveOpacity(int idx, float opacity) { m_primitiveMarks[idx].SetOpacity(*this, opacity); } +u32 CTextRenderBuffer::GetPrimitiveCount() const { return m_primitiveMarks.size(); } + void CTextRenderBuffer::Render(const zeus::CColor& col, float time) const { const_cast(this)->CommitResources(); diff --git a/Runtime/GuiSys/CTextRenderBuffer.hpp b/Runtime/GuiSys/CTextRenderBuffer.hpp index b3ad6806b..947bccef3 100644 --- a/Runtime/GuiSys/CTextRenderBuffer.hpp +++ b/Runtime/GuiSys/CTextRenderBuffer.hpp @@ -65,35 +65,13 @@ private: hecl::UniformBufferPool::Token m_uniBuf; hecl::UniformBufferPool::Token m_uniBuf2; - struct BooFontCharacters { - TLockedToken m_font; - hecl::VertexBufferPool::Token m_instBuf; - boo::ObjToken m_dataBinding; - boo::ObjToken m_dataBinding2; - std::vector m_charData; - u32 m_charCount = 0; - bool m_dirty = true; - BooFontCharacters(const CToken& token) : m_font(token) {} - }; + struct BooFontCharacters; std::vector m_fontCharacters; - struct BooImage { - CFontImageDef m_imageDef; - hecl::VertexBufferPool::Token m_instBuf; - std::vector> m_dataBinding; - std::vector> m_dataBinding2; - CTextSupportShader::ImageInstance m_imageData; - bool m_dirty = true; - BooImage(const CFontImageDef& imgDef, const zeus::CVector2i& offset); - }; + struct BooImage; std::vector m_images; - struct BooPrimitiveMark { - Command m_cmd; - u32 m_bindIdx; - u32 m_instIdx; - void SetOpacity(CTextRenderBuffer& rb, float opacity); - }; + struct BooPrimitiveMark; std::vector m_primitiveMarks; u32 m_imagesCount = 0; u32 m_activeFontCh = UINT32_MAX; @@ -109,6 +87,8 @@ private: public: CTextRenderBuffer(EMode mode, CGuiWidget::EGuiModelDrawFlags df); + ~CTextRenderBuffer(); + #if 0 void SetPrimitive(const Primitive&, int); Primitive GetPrimitive(int) const; @@ -119,7 +99,7 @@ public: void AddPaletteChange(const CGraphicsPalette& palette); #else void SetPrimitiveOpacity(int idx, float opacity); - u32 GetPrimitiveCount() const { return m_primitiveMarks.size(); } + u32 GetPrimitiveCount() const; #endif void SetMode(EMode mode); void Render(const zeus::CColor& col, float) const;