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 CDrawQuadRendererCommand::Execute(CRenderManager &RM)
{
	ActivateTextures();

	CRenderableObjectTechnique *l_Rot= CORE->GetRenderableObjectsTechniqueManager()->GetResource(CORE->GetRenderableObjectsTechniqueManager()->GetRenderableObjectTechniqueNameByVertexType(SCREEN_TEXTURE_COLORED_VERTEX::GetVertexType()),"");
	if (l_Rot != NULL)
		DrawColoredQuad2DTexturedInPixelsByEffectTechnique(&RM, l_Rot->GetEffectTechnique(), m_Rect, colWHITE, NULL);
}
void CDrawQuadSceneEffect::PostRender(CRenderManager *RM)
{
	if(m_Technique!=NULL)
	{
		RECT l_Rect;
		l_Rect.top=l_Rect.left=0;
    uint32 l_ScreenHeight,l_ScreenWidth;
    RM->GetWandH(l_ScreenWidth,l_ScreenHeight);
    l_Rect.bottom = l_ScreenHeight;
		l_Rect.right = l_ScreenWidth;
		m_Technique->BeginRender();
		ActivateTextures();

		LPD3DXEFFECT l_Effect = m_Technique->GetEffect()->GetD3DEffect();
		if(l_Effect!=NULL)
		{
			l_Effect->SetTechnique(m_Technique->GetD3DTechnique());
			UINT l_NumPasses;
			l_Effect->Begin(&l_NumPasses, 0);
			for (UINT iPass = 0; iPass < l_NumPasses; iPass++)
			{
				l_Effect->BeginPass(iPass);
				
				//RM->DrawColoredQuad2DTexturedInPixels( l_Rect, m_Color, m_StageTextures[0].m_Texture);
        RM->DrawTexturedQuad2D(Vect2i(0,0), l_ScreenWidth, l_ScreenHeight, CRenderManager::UPPER_LEFT,m_StageTextures[0].m_Texture, m_Color);

/*
        if(CORE->GetInputManager()->GetActionToInput()->DoAction("Screenshot") != 0.0f )
	      {
          char pathFoto[256];
          sprintf(pathFoto, "./Data/Screenshots/screen%d.bmp", (int) CORE->GetTimer()->GetTotalTime());
          this->m_StageTextures[0].m_Texture->Save(pathFoto);
	      }    

        
        std::string pathFoto = "C:\\texturasjuego\\postrend_zblur";
  pathFoto += ::timeGetTime();
  pathFoto += ".bmp";
  this->m_StageTextures[0].m_Texture->Save(pathFoto);
*/        l_Effect->EndPass();
			}
			l_Effect->End();
		}
	}
}
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();
}
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 CDrawQuadRendererCommand::Execute( CGraphicsManager& GM )
{
  BROFILER_CATEGORY( "CDrawQuadRendererCommand::Execute", Profiler::Color::Orchid )
    ActivateTextures();

    CRenderableObjectTechniqueManager* lROTM = ROTMInstance;

    const std::string& l_EffectTechName = lROTM->GetRenderableObjectTechniqueNameByVertexType(
            SCREEN_COLOR_VERTEX::GetVertexType() );

    CRenderableObjectTechnique* l_ROT = lROTM->GetResource( l_EffectTechName );

    CEffectTechnique* l_EffectTech =  l_ROT->GetEffectTechnique();
    uint32 width, height;
    GM.GetWidthAndHeight( width, height );
    RECT l_Rect = { 0, 0, ( long )width - 1, ( long )height - 1 };

    l_EffectTech->GetEffect()->SetLight( 0 );

    if( mSetPlayerLife )
    {
      CEffect* lEffect = l_EffectTech->GetEffect();

      float lLife = GUIInstance->GetWindow("HUD.xml")->GetElement("Life")->GetProgress();
      //LOG_INFO_APPLICATION("Setting life %5.2f", lLife);
      lLife = Math::Utils::Clamp(lLife, 0.05f, 100.0f);
      lEffect->SetLife(lLife);
    }

    if ( l_EffectTech )
    {
        GM.DrawColoredQuad2DTexturedInPixelsByEffectTechnique( l_EffectTech, l_Rect, m_Color,
                m_StageTextures[0].m_Texture, 0.0f, 0.0f, 1.0f, 1.0f );
    }
    else
    {
        GM.DrawColoredQuad2DTexturedInPixels( l_Rect, m_Color,
                                              m_StageTextures[0].m_Texture, 0.0f, 0.0f, 1.0f, 1.0f );
    }
}
Ejemplo n.º 8
0
	void Material::ActivateForDraw()
	{
		GetShader()->Activate();
		ActivateTextures();
	}