void CDrawQuadRendererCommand::Execute(CRenderManager &RenderManager) { if (m_Material) { m_Material->Apply(); } ActivateTextures(); RenderManager.DrawScreenQuad(m_RenderableObjectTechnique->GetEffectTechnique(),NULL,0,0,1.0f,1.0f,CColor(1.0f, 1.0f, 1.0f, 1.0f)); }
void CDeferredShadingSceneRendererCommand::ExecuteDeferredShading(CRenderManager &RenderManager) { CContextManager* l_ContextManager = RenderManager.GetContextManager(); l_ContextManager->EnableDeferredShadingBlendState(); CLightManager* l_LightManager = CEngine::GetSingleton().GetLightManager(); std::vector<CLight*> l_Lights = l_LightManager->GetResourcesVector(); size_t l_Size = l_Lights.size(); int l_Width = l_ContextManager->GetFrameBufferWidth(); int l_Height = l_ContextManager->GetFrameBufferHeight(); ActivateTextures(); for (size_t i = 0; i < l_Size; ++i) { if (l_Lights[i]->GetActive()) { CEngine::GetSingleton().GetEffectManager()->SetLightConstants(0, l_Lights[i]); m_RenderableObjectTechnique->GetEffectTechnique()->SetConstantBuffer(1, &CEffectManager::m_LightEffectParameters); RenderManager.DrawScreenQuad(m_RenderableObjectTechnique->GetEffectTechnique(), NULL, 0, 0, 1.0f, 1.0f, CColor(v4fZERO)); } } CEngine::GetSingleton().GetRenderManager()->GetContextManager()->DisableAlphaBlendState(); }
void CGenerateBlackAndWhiteMapsSceneRendererCommand::Execute(CRenderManager &RenderManager) { CLightManager* l_LightManager = CEngine::GetSingleton().GetLightManager(); std::vector<CLight*> l_Lights = l_LightManager->GetResourcesVector(); size_t l_Size = l_Lights.size(); ActivateTextures(); //We are going to render from camera perspective //RenderManager.GetContextManager()->SetMatrices(RenderManager.GetCurrentCamera()); for (size_t i = 0; i<l_Size; ++i) { if (l_Lights[i]->GetActive() && l_Lights[i]->GetGenerateShadowMap()) { l_Lights[i]->SetBlackAndWhiteMap(RenderManager, false); //Set BlackAndWhiteTexture as rendertarget //Doens't change matrix, beacuse we must render from camera perspective CEngine::GetSingleton().GetEffectManager()->SetBlackAndWhiteLightConstants(l_Lights[i]); RenderManager.DrawScreenQuad(m_RenderableObjectTechnique->GetEffectTechnique(), NULL, 0, 0, 1.0f, 1.0f, CColor(1.0f, 1.0f, 1.0f, 1.0f)); CMaterial* l_GaussianFilterMaterial = CEngine::GetSingleton().GetMaterialManager()->GetResource("GaussianFilterMaterial"); CMaterial* l_GuiMaterial = CEngine::GetSingleton().GetMaterialManager()->GetResource("GUIMaterial"); RenderManager.GetContextManager()->UnsetRenderTargets(); RenderManager.GetContextManager()->SetDefaultViewPort(); l_Lights[i]->SetBlackAndWhiteMap(RenderManager, true); CPoolRenderableObjectTechnique* l_GaussianFilterPool = CEngine::GetSingleton().GetRenderableObjectTechniqueManager()->GetPoolRenderableObjectTechniques().GetResource("gaussian_filter_pool_renderable_object_technique"); l_GaussianFilterPool->Apply(); l_Lights[i]->GetBlackAndWhiteMap()->Activate(0); l_GaussianFilterMaterial->Apply(); RenderManager.DrawScreenQuad(l_GaussianFilterMaterial->GetRenderableObjectTechnique()->GetEffectTechnique(), NULL, 0, 0, 1.0f, 1.0f, CColor(0.0, 0.0, 0.0, 0.0)); } } RenderManager.GetContextManager()->UnsetRenderTargets(); RenderManager.GetContextManager()->SetDefaultViewPort(); }
void CDeferredShadingSceneRendererCommand::ExecuteDeferredShadingUsingLightVolumes(CRenderManager &RenderManager) { CLightManager* l_LightManager = CEngine::GetSingleton().GetLightManager(); std::vector<CLight*> l_Lights = l_LightManager->GetResourcesVector(); size_t l_Size = l_Lights.size(); int l_Width = RenderManager.GetContextManager()->GetFrameBufferWidth(); int l_Height = RenderManager.GetContextManager()->GetFrameBufferHeight(); ActivateTextures(); for (size_t i = 0; i<l_Size; ++i) { /*Only 1 light*/ if (l_Lights[i]->GetActive()) { CEngine::GetSingleton().GetEffectManager()->SetLightConstants(0, l_Lights[i]); m_RenderableObjectTechnique->GetEffectTechnique()->SetConstantBuffer(1, &CEffectManager::m_LightEffectParameters); if (l_Lights[i]->GetType() != CLight::OMNI) // { RenderManager.GetContextManager()->SetRasterizerState(CContextManager::RS_SOLID); RenderManager.DrawScreenQuad(m_RenderableObjectTechnique->GetEffectTechnique(), NULL, 0, 0, 1.0f, 1.0f, CColor(v4fZERO)); } else { float l_LightRadius = l_Lights[i]->GetEndRangeAttenuation(); Mat44f l_Scale; l_Scale.SetFromScale(l_LightRadius, l_LightRadius, l_LightRadius); Mat44f l_LightTransform = l_Lights[i]->GetTransform(); RenderManager.GetContextManager()->SetWorldMatrix(l_Scale*l_LightTransform); FirstPast(RenderManager); CRenderableObjectTechnique* l_Technique = CEngine::GetSingleton().GetRenderableObjectTechniqueManager()->GetResource("deferred_shading_omnilight_sphere_renderable_object_technique"); m_SphereFirstPass->Render(&RenderManager, l_Technique); SecondPass(RenderManager); m_SphereFirstPass->Render(&RenderManager); } } } CEngine::GetSingleton().GetRenderManager()->GetContextManager()->DisableAlphaBlendState(); }