示例#1
0
文件: Renderer.cpp 项目: Kaaml/Vxy
void Renderer::InitRendering()
{
	// TO DO: NAPISAC SHADERY DO DIR LIGHT, SPOT LIGHT I POINT LIGHT I PRZETESTOWAC DZIALANIE!!!!!!!!!!
	DirectLightSurface = PrefabShape::GenerateRectangle();
	SpotLightSurface = PrefabShape::GenerateRectangle();
	//PointLightSurface = PrefabShape::GenerateRectangle();

	cShaderManager *ShaderMgr = cShaderManager::GetInstance();
	cProgramShader *DirectLightShader = ShaderMgr->GetProgram( "DirectLight" );
	cProgramShader *SpotLightShader   = ShaderMgr->GetProgram( "SpotLight" );
	//cProgramShader *PointLightShader  = ShaderMgr->GetProgram( "PointLight" );

	MaterialManager& MatMgr = MaterialManager::GetSingleton();
	//auto DirLight = MatMgr.GetMaterialPtr( "DirectLight" );	

	RenderPass *DirectLight = new RenderPass();
	RenderPass *SpotLight = new RenderPass();
	//RenderPass *PointLight = new RenderPass();
	
	DirectLight->SetShader( DirectLightShader );
	SpotLight->SetShader( SpotLightShader );
	//PointLight->SetShader( PointLightShader );

	Material *DirectLightMaterial = new Material();
	Material *SpotLightMaterial = new Material();
	//Material *PointLightMaterial = new Material();

	DirectLightMaterial->AddRenderPass( DirectLight );
	SpotLightMaterial->AddRenderPass( SpotLight );
	//PointLightMaterial->AddRenderPass( PointLight );

	DirectLightSurface->SetMaterial( DirectLightMaterial );
	SpotLightSurface->SetMaterial( SpotLightMaterial );
	//PointLightSurface->SetMaterial( pPointLightMaterial );

	pDeferred = new Fbo( (GLuint) mViewSize.x, (GLuint)mViewSize.y );

	mLayers.push_back( new Texture2D( (int)mViewSize.x, (int)mViewSize.y, 0, FORMAT::RGB ) );
	mLayers.push_back( new Texture2D( (int)mViewSize.x, (int)mViewSize.y, 0, FORMAT::RGBA16F ) );
	mLayers.push_back( new Texture2D( (int)mViewSize.x, (int)mViewSize.y, 0, FORMAT::RGB ) );
	mLayers.push_back( new Texture2D( (int)mViewSize.x, (int)mViewSize.y, 0, FORMAT::RGB ) );
	//mLayers.push_back( new Texture2D( (int)mViewSize.x, (int)mViewSize.y, 0, FORMAT::RGB ) );
	mLayers.push_back( new Texture2D( (int)mViewSize.x, (int)mViewSize.y, 0, FORMAT::DEPTH24 ) );
	pDeferred->AddTextureAtachament( BUFFERTARGET::COLOR_ATTACHMENT0, mLayers[0] );
	pDeferred->AddTextureAtachament( BUFFERTARGET::COLOR_ATTACHMENT1, mLayers[1] );
	pDeferred->AddTextureAtachament( BUFFERTARGET::COLOR_ATTACHMENT2, mLayers[2] );
	pDeferred->AddTextureAtachament( BUFFERTARGET::COLOR_ATTACHMENT3, mLayers[3] );
	//pDeferred->AddTextureAtachament( BUFFERTARGET::COLOR_ATTACHMENT4, mLayers[4] );
	pDeferred->AddDepthAtachament( mLayers[4] );
	pDeferred->SetDrawBuffers( COLOR_ATTACHMENT0, COLOR_ATTACHMENT1, COLOR_ATTACHMENT2, COLOR_ATTACHMENT3/*, COLOR_ATTACHMENT4*/ );
	
	TextureSampler *sampler1 = new TextureSampler( mLayers[0], 0, TF_LINEAR, TF_LINEAR, WM_CLAMP, WM_CLAMP );
	TextureSampler *sampler2 = new TextureSampler( mLayers[1], 1, TF_LINEAR, TF_LINEAR, WM_CLAMP, WM_CLAMP );
	TextureSampler *sampler3 = new TextureSampler( mLayers[2], 2, TF_LINEAR, TF_LINEAR, WM_CLAMP, WM_CLAMP );
	//TextureSampler *sampler4 = new TextureSampler( mLayers[3], 3, TF_LINEAR, TF_LINEAR, WM_CLAMP, WM_CLAMP );
	//TextureSampler *sampler5 = new TextureSampler( mLayers[4], 4 ); 
	DirectLight->AddTexture( sampler1 );				    // OutputAmbient = 0
	DirectLight->AddTexture( sampler2 );					// OutputNormal =1
	DirectLight->AddTexture( sampler3 );					// OutputPosition =2
	//PointLight->AddTexture( sampler4 );					// OutputDiffuse =3
	//PointLight->AddTexture( sampler5 );		

	SpotLight->AddTexture( sampler1 );						// OutputAmbient = 0
	SpotLight->AddTexture( sampler2 );					    // OutputNormal =1
	SpotLight->AddTexture( sampler3 );					    // OutputPosition =2

	//PointLight->AddTexture( sampler1 );						//OutputAmbient = 0
	//PointLight->AddTexture( sampler2 );					    // OutputNormal =1
	//PointLight->AddTexture( sampler3 );					    // OutputPosition =2
														  
}