Exemplo n.º 1
0
void IRenderBatch::CustomDraw(IRenderQueue& renderQueue, RenderingFlags renderingFlags /*= RenderingFlags::None*/)
{
	RETURN_IF_TRUE(IsEmpty());

	EffectTechnique* technique = mEffect->CurrentTechniqueGroup()->CurrentTechnique();
	EffectTechnique::PassCollectionType& renderPasses = technique->RenderPasses();
	RenderingStatics::Instance().CountRenderPass(renderPasses.Count());
	RenderingStatics::Instance().CountMaterial(mMaterial);
	RenderingStatics::Instance().CountMaterialTextures(mMaterial);

	FOR_EACH_COLLECTION(i, renderPasses)
	{
		IRenderPass* renderPass = *i;
		RenderingContext::Instance().ApplyRenderPass(renderPass);
		RenderingContext::Instance().ApplyMaterial(mMaterial);
		RenderingContext::Instance().ApplyState(mStateTreeNode);

		RenderingContext::Instance().ApplyBatch(this);
		RenderingContext::Instance().ValidateBeforeDraw();

		Draw(renderQueue, renderingFlags);
		RenderingContext::Instance().RestoreBatch();

		RenderingContext::Instance().RestoreState();
		RenderingContext::Instance().RestoreMaterial();
		RenderingContext::Instance().RestoreRenderPass();
	}
Exemplo n.º 2
0
void EffectRenderGroup::Draw(IRenderQueue& renderQueue, RenderingFlags renderingFlags/*=RenderingFlags::None*/)
{
	EffectTechnique* technique = mEffect->CurrentTechniqueGroup()->CurrentTechnique();
	EffectTechnique::PassCollectionType& renderPasses = technique->RenderPasses();
	RenderingStatics::Instance().CountRenderPass(renderPasses.Count());

	FOR_EACH_COLLECTION(i, renderPasses)
	{
		IRenderPass* renderPass = *i;
		RenderingContext::Instance().ApplyRenderPass(renderPass);
		bool isContinue = renderPass->Draw(renderQueue, renderingFlags);
		if (isContinue)
		{
			FOR_EACH_COLLECTION(j, mGroups)
			{
				MaterialRenderGroup* materialRenderGroup = *j;
				materialRenderGroup->Draw(renderQueue, renderingFlags);
			}
		}
Exemplo n.º 3
0
void EffectRenderGroup::Draw(IRenderQueue& renderQueue, RenderingFlags renderingFlags/*=RenderingFlags::None*/)
{
	EffectTechnique* technique = mEffect->CurrentTechniqueGroup()->CurrentTechnique();
	EffectTechnique::PassCollectionType& renderPasses = technique->RenderPasses();
	RenderingStatics::Instance().CountRenderPass(renderPasses.Count());

	for (auto renderPass : renderPasses)
	{
		RenderingContext::Instance().ApplyRenderPass(renderPass);
		bool isContinue = renderPass->Draw(renderQueue, renderingFlags);
		if (isContinue)
		{
			for (auto materialRenderGroup : mGroups)
			{
				materialRenderGroup->Draw(renderQueue, renderingFlags);
			}
		}

		RenderingContext::Instance().RestoreRenderPass();
		BREAK_IF_FALSE(isContinue);
	}
}