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.
This commit is contained in:
Lioncash 2020-03-29 03:35:01 -04:00
parent fda08db9b1
commit 20b74c4818
2 changed files with 60 additions and 49 deletions

View File

@ -12,31 +12,60 @@
namespace urde { namespace urde {
struct CTextRenderBuffer::BooFontCharacters {
TLockedToken<CRasterFont> m_font;
hecl::VertexBufferPool<CTextSupportShader::CharacterInstance>::Token m_instBuf;
boo::ObjToken<boo::IShaderDataBinding> m_dataBinding;
boo::ObjToken<boo::IShaderDataBinding> m_dataBinding2;
std::vector<CTextSupportShader::CharacterInstance> 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<CTextSupportShader::ImageInstance>::Token m_instBuf;
std::vector<boo::ObjToken<boo::IShaderDataBinding>> m_dataBinding;
std::vector<boo::ObjToken<boo::IShaderDataBinding>> 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::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) { CTextRenderBuffer::~CTextRenderBuffer() = default;
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;
}
}
void CTextRenderBuffer::CommitResources() { void CTextRenderBuffer::CommitResources() {
if (m_committed) if (m_committed)
@ -125,6 +154,8 @@ void CTextRenderBuffer::SetPrimitiveOpacity(int idx, float opacity) {
m_primitiveMarks[idx].SetOpacity(*this, 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 { void CTextRenderBuffer::Render(const zeus::CColor& col, float time) const {
const_cast<CTextRenderBuffer*>(this)->CommitResources(); const_cast<CTextRenderBuffer*>(this)->CommitResources();

View File

@ -65,35 +65,13 @@ private:
hecl::UniformBufferPool<CTextSupportShader::Uniform>::Token m_uniBuf; hecl::UniformBufferPool<CTextSupportShader::Uniform>::Token m_uniBuf;
hecl::UniformBufferPool<CTextSupportShader::Uniform>::Token m_uniBuf2; hecl::UniformBufferPool<CTextSupportShader::Uniform>::Token m_uniBuf2;
struct BooFontCharacters { struct BooFontCharacters;
TLockedToken<CRasterFont> m_font;
hecl::VertexBufferPool<CTextSupportShader::CharacterInstance>::Token m_instBuf;
boo::ObjToken<boo::IShaderDataBinding> m_dataBinding;
boo::ObjToken<boo::IShaderDataBinding> m_dataBinding2;
std::vector<CTextSupportShader::CharacterInstance> m_charData;
u32 m_charCount = 0;
bool m_dirty = true;
BooFontCharacters(const CToken& token) : m_font(token) {}
};
std::vector<BooFontCharacters> m_fontCharacters; std::vector<BooFontCharacters> m_fontCharacters;
struct BooImage { struct BooImage;
CFontImageDef m_imageDef;
hecl::VertexBufferPool<CTextSupportShader::ImageInstance>::Token m_instBuf;
std::vector<boo::ObjToken<boo::IShaderDataBinding>> m_dataBinding;
std::vector<boo::ObjToken<boo::IShaderDataBinding>> m_dataBinding2;
CTextSupportShader::ImageInstance m_imageData;
bool m_dirty = true;
BooImage(const CFontImageDef& imgDef, const zeus::CVector2i& offset);
};
std::vector<BooImage> m_images; std::vector<BooImage> m_images;
struct BooPrimitiveMark { struct BooPrimitiveMark;
Command m_cmd;
u32 m_bindIdx;
u32 m_instIdx;
void SetOpacity(CTextRenderBuffer& rb, float opacity);
};
std::vector<BooPrimitiveMark> m_primitiveMarks; std::vector<BooPrimitiveMark> m_primitiveMarks;
u32 m_imagesCount = 0; u32 m_imagesCount = 0;
u32 m_activeFontCh = UINT32_MAX; u32 m_activeFontCh = UINT32_MAX;
@ -109,6 +87,8 @@ private:
public: public:
CTextRenderBuffer(EMode mode, CGuiWidget::EGuiModelDrawFlags df); CTextRenderBuffer(EMode mode, CGuiWidget::EGuiModelDrawFlags df);
~CTextRenderBuffer();
#if 0 #if 0
void SetPrimitive(const Primitive&, int); void SetPrimitive(const Primitive&, int);
Primitive GetPrimitive(int) const; Primitive GetPrimitive(int) const;
@ -119,7 +99,7 @@ public:
void AddPaletteChange(const CGraphicsPalette& palette); void AddPaletteChange(const CGraphicsPalette& palette);
#else #else
void SetPrimitiveOpacity(int idx, float opacity); void SetPrimitiveOpacity(int idx, float opacity);
u32 GetPrimitiveCount() const { return m_primitiveMarks.size(); } u32 GetPrimitiveCount() const;
#endif #endif
void SetMode(EMode mode); void SetMode(EMode mode);
void Render(const zeus::CColor& col, float) const; void Render(const zeus::CColor& col, float) const;