mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-09 01:07:43 +00:00
GuiSys and FrontEnd work
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
namespace urde
|
||||
{
|
||||
|
||||
CTextRenderBuffer CTextExecuteBuffer::CreateTextRenderBuffer() const
|
||||
CTextRenderBuffer CTextExecuteBuffer::BuildRenderBuffer() const
|
||||
{
|
||||
CTextRenderBuffer ret(CTextRenderBuffer::EMode::AllocTally);
|
||||
|
||||
@@ -32,6 +32,92 @@ CTextRenderBuffer CTextExecuteBuffer::CreateTextRenderBuffer() const
|
||||
return ret;
|
||||
}
|
||||
|
||||
CTextRenderBuffer CTextExecuteBuffer::BuildRenderBufferPage(InstList::const_iterator start,
|
||||
InstList::const_iterator pgStart,
|
||||
InstList::const_iterator pgEnd) const
|
||||
{
|
||||
CTextRenderBuffer ret(CTextRenderBuffer::EMode::AllocTally);
|
||||
|
||||
{
|
||||
CFontRenderState rendState;
|
||||
for (auto it = start ; it != pgStart ; ++it)
|
||||
{
|
||||
const std::shared_ptr<CInstruction>& inst = *it;
|
||||
inst->PageInvoke(rendState, &ret);
|
||||
}
|
||||
for (auto it = pgStart ; it != pgEnd ; ++it)
|
||||
{
|
||||
const std::shared_ptr<CInstruction>& inst = *it;
|
||||
inst->Invoke(rendState, &ret);
|
||||
}
|
||||
}
|
||||
|
||||
ret.SetMode(CTextRenderBuffer::EMode::BufferFill);
|
||||
|
||||
{
|
||||
CFontRenderState rendState;
|
||||
for (auto it = start ; it != pgStart ; ++it)
|
||||
{
|
||||
const std::shared_ptr<CInstruction>& inst = *it;
|
||||
inst->PageInvoke(rendState, &ret);
|
||||
}
|
||||
for (auto it = pgStart ; it != pgEnd ; ++it)
|
||||
{
|
||||
const std::shared_ptr<CInstruction>& inst = *it;
|
||||
inst->Invoke(rendState, &ret);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
std::list<CTextRenderBuffer> CTextExecuteBuffer::BuildRenderBufferPages(const zeus::CVector2i& extent) const
|
||||
{
|
||||
std::list<CTextRenderBuffer> ret;
|
||||
|
||||
for (auto it = x0_instList.begin() ; it != x0_instList.end() ;)
|
||||
{
|
||||
const std::shared_ptr<CInstruction>& inst = *it;
|
||||
CTextRenderBuffer rbuf(CTextRenderBuffer::EMode::AllocTally);
|
||||
|
||||
{
|
||||
CFontRenderState rstate;
|
||||
for (auto it2 = x0_instList.begin() ; it2 != x0_instList.end() ;)
|
||||
{
|
||||
const std::shared_ptr<CInstruction>& inst2 = *it2;
|
||||
inst2->Invoke(rstate, &rbuf);
|
||||
}
|
||||
}
|
||||
|
||||
rbuf.SetMode(CTextRenderBuffer::EMode::BufferFill);
|
||||
|
||||
InstList::const_iterator pageEnd = it;
|
||||
{
|
||||
CFontRenderState rstate;
|
||||
for (auto it2 = x0_instList.begin() ; it2 != x0_instList.end() ;)
|
||||
{
|
||||
const std::shared_ptr<CInstruction>& inst2 = *it2;
|
||||
if (it2 != it)
|
||||
{
|
||||
inst2->PageInvoke(rstate, &rbuf);
|
||||
}
|
||||
else
|
||||
{
|
||||
inst2->Invoke(rstate, &rbuf);
|
||||
if (!rbuf.HasSpaceAvailable(zeus::CVector2i{}, extent))
|
||||
break;
|
||||
++pageEnd;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ret.push_back(BuildRenderBufferPage(x0_instList.cbegin(), it, pageEnd));
|
||||
it = pageEnd;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
std::vector<CToken> CTextExecuteBuffer::GetAssets() const
|
||||
{
|
||||
size_t totalAssets = 0;
|
||||
|
||||
Reference in New Issue
Block a user