RenderItem 渲染集中

	typedef std::vector<DrawItemInfo> VectorDrawItem;

而DrawItemInfo 为:

	typedef std::pair<ISubWidget*, size_t> DrawItemInfo;
这里明显看出ISubWidget为Widget的渲染信息单元


RenderItem的数据结构:

	private:
#if MYGUI_DEBUG_MODE == 1
		std::string mTextureName;
#endif
		// 渲染纹理
		ITexture* mTexture;
		// 需要渲染的顶点数
		size_t mNeedVertexCount;
		// 渲染时候时机??
		bool mOutDate;
		// 需要渲染的SubWidget的列,
		//ISubWidget不是Widget 只是用来保存渲染的信息。
		VectorDrawItem mDrawItems;

		// 俄文看不懂, 顶点渲染数? 与 size_t mNeedVertexCount 
		// 有何区别???
		size_t mCountVertex;
		// 与 bool mOutDate 又是什么关系???
		bool mCurrentUpdate;
		// current vertex
		Vertex* mCurrentVertext;
		// ???
		size_t mLastVertextCount;
		
		IVertexBuffer* mVertexBuffer;
		IRenderTarget* mRenderTarget;
		// Compression的作用?
		// 压缩那些信息?
		bool mCompression;



renderToTarget  成员函数与RenderManager进行交流

	void RenderItem::renderToTarget(IRenderTarget* _target, bool _update)
	{
		if (mTexture == nullptr)
			return;

		mRenderTarget = _target;

		mCurrentUpdate = _update;

		if (mOutDate || _update)
		{
			mCountVertex = 0;
			Vertex * buffer = (Vertex*)mVertexBuffer->lock();

			for (VectorDrawItem::iterator iter=mDrawItems.begin(); iter!=mDrawItems.end(); ++iter)
			{
				// перед вызовом запоминаем позицию в буфере
				mCurrentVertext = buffer;
				mLastVertextCount = 0;

				(*iter).first->doRender();

				// колличество отрисованных вершин
				MYGUI_DEBUG_ASSERT(mLastVertextCount <= (*iter).second, "It is too much vertexes");
				buffer += mLastVertextCount;
				mCountVertex += mLastVertextCount;
			}

			mVertexBuffer->unlock();

			mOutDate = false;
		}

		// хоть с 0 не выводиться батч, но все равно не будем дергать стейт и операцию
		if (0 != mCountVertex)
		{
#if MYGUI_DEBUG_MODE == 1
			if (!RenderManager::getInstance().checkTexture(mTexture))
			{
				mTexture = nullptr;
				MYGUI_EXCEPT("texture pointer is not valid, texture name '" << mTextureName << "'");
				return;
			}
#endif
			// непосредственный рендринг
			_target->doRender(mVertexBuffer, mTexture, mCountVertex);
		}
	}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值