/** * @brief * Constructor */ EffectManager::EffectManager(RendererContext &cRendererContext) : m_pRendererContext(&cRendererContext), m_pDefault(new EffectHandler()) { PL_LOG(Debug, "Create effect manager") // Set manager name SetManagerName("Effect manager"); // Unload unused resources, please SetUnloadUnused(true); // Create the standard effect Effect *pFX = CreateResource(Default); if (pFX) { // Create the effect EffectTechnique *pEffectTechnique = pFX->AddTechnique(); if (pEffectTechnique) { pEffectTechnique->AddPass(); pFX->SelectTechnique(0); } // Setup effect pFX->SetProtected(true); m_pDefault->SetResource(pFX); SetStandard(pFX); } }
/** * @brief * Adds a technique */ EffectTechnique *Effect::AddTechnique(int nTechnique) { EffectTechnique *pTechnique = new EffectTechnique(*this); pTechnique->SetName(String("Technique_") + m_lstTechnique.GetNumOfElements()); m_lstTechnique.AddAtIndex(pTechnique, nTechnique); return pTechnique; }
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 Direct3D11::renderText() { if ( ! font_ ) { return; } getSprite()->begin(); EffectTechnique* technique = effect_->get_technique( "|sprite" ); for ( const auto& pass : technique->get_pass_list() ) { pass->apply(); Sprite::Rect dst_rect( 0, 0, get_width(), get_height() ); getSprite()->draw( dst_rect, text_view_.get() ); } getSprite()->end(); }
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); } }
/** * @brief * Constructor */ SPMultiViewFixedFunctions::SPMultiViewFixedFunctions(Renderer &cRenderer) : SPMultiView(cRenderer) { // Get the renderer context RendererContext &cRendererContext = GetRenderer().GetRendererContext(); // Create and set a special material & effect Material *pMaterial = cRendererContext.GetMaterialManager().Create("MyTeapot"); if (pMaterial) { Effect *pFX = cRendererContext.GetEffectManager().Create("MyTeapot"); if (pFX) { EffectTechnique *pTechnique = pFX->AddTechnique(); if (pTechnique) { pFX->SelectTechnique(0); EffectPass *pEffectPass = pTechnique->AddPass(); if (pEffectPass) pEffectPass->GetFixedFunctionsRenderStates().SetLighting(true); } pMaterial->SetEffect(pFX); } m_pMeshHandlerSphere->SetMaterial(0, pMaterial); m_pMeshHandlerTorus ->SetMaterial(0, pMaterial); m_pMeshHandlerCube ->SetMaterial(0, pMaterial); } }