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(); }
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); } }
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); } }