26 mVertexBuffer =
nullptr;
31 if (mTexture ==
nullptr)
34 mRenderTarget = _target;
36 mCurrentUpdate = _update;
38 if (mOutOfDate || _update)
41 Vertex* buffer = mVertexBuffer->lock();
42 if (buffer !=
nullptr)
44 for (
auto& item : mDrawItems)
46 mCurrentVertex = buffer;
49 item.first->doRender();
52 buffer += mLastVertexCount;
53 mCountVertex += mLastVertexCount;
56 mVertexBuffer->unlock();
63 if (0 != mCountVertex)
65#if MYGUI_DEBUG_MODE == 1
68 auto textureName = mTexture ? mTexture->getName() : std::string();
70 MYGUI_EXCEPT(
"texture pointer is not valid, texture name '" << textureName <<
"'");
77 for (
auto& item : mDrawItems)
78 item.first->doManualRender(mVertexBuffer, mTexture, mCountVertex);
82 _target->
doRender(mVertexBuffer, mTexture, mCountVertex);
89 for (VectorDrawItem::iterator iter = mDrawItems.begin(); iter != mDrawItems.end(); ++iter)
91 if ((*iter).first == _item)
93 mNeedVertexCount -= (*iter).second;
94 mDrawItems.erase(iter);
97 mVertexBuffer->setVertexCount(mNeedVertexCount);
100 if (mDrawItems.empty())
103 mNeedCompression =
true;
115#if MYGUI_DEBUG_MODE == 1
116 for (
const auto& item : mDrawItems)
122 mDrawItems.emplace_back(_item, _count);
123 mNeedVertexCount += _count;
126 mVertexBuffer->setVertexCount(mNeedVertexCount);
131 for (
auto& item : mDrawItems)
133 if (item.first == _item)
136 if (item.second < _count)
138 mNeedVertexCount -= item.second;
139 mNeedVertexCount += _count;
140 item.second = _count;
143 mVertexBuffer->setVertexCount(mNeedVertexCount);
153 if (mTexture == _value)
156 MYGUI_DEBUG_ASSERT(mVertexBuffer->getVertexCount() == 0,
"change texture only empty buffer");
169 mNeedCompression = _compression;
174 return mNeedCompression;
179 mManualRender = _value;
184 return mManualRender;
199 return mNeedVertexCount;
209 return mCurrentUpdate;
214 return mCurrentVertex;
219 mLastVertexCount = _count;
224 return mRenderTarget;
#define MYGUI_ASSERT(exp, dest)
#define MYGUI_DEBUG_ASSERT(exp, dest)
#define MYGUI_EXCEPT(dest)
virtual void doRender(IVertexBuffer *_buffer, ITexture *_texture, size_t _count)=0
void addDrawItem(ISubWidget *_item, size_t _count)
bool getCurrentUpdate() const
void setManualRender(bool _value)
void setTexture(ITexture *_value)
IRenderTarget * getRenderTarget()
void renderToTarget(IRenderTarget *_target, bool _update)
bool getManualRender() const
size_t getVertexCount() const
bool getNeedCompression() const
void setNeedCompression(bool _compression)
void reallockDrawItem(ISubWidget *_item, size_t _count)
size_t getNeedVertexCount() const
void removeDrawItem(ISubWidget *_item)
Vertex * getCurrentVertexBuffer() const
ITexture * getTexture() const
void setLastVertexCount(size_t _count)
virtual void destroyVertexBuffer(IVertexBuffer *_buffer)=0
static RenderManager & getInstance()
virtual IVertexBuffer * createVertexBuffer()=0