Пример #1
0
	//---------------------------------------------------------------------------------------------------------
	void ForwardPipelineSystem::OnFrameworkEntry( float time, BohgeEngine::Framework& framework )
	{
		m_pRenderQueueOrderMap = NEW QueueOrderMap();
		m_pLightRenderArray = NEW LightRenderArray();
		IMaterialSystem::Instance()->SetPipelienType(
			PipelineProperty::PLT_FORWARD_SINGLE_LIGHT,
			PipelineProperty::APT_LIGHTING_ALL
			| PipelineProperty::APT_UNIVERSAL_DEPTH
			| PipelineProperty::APT_UNIVERSAL_POST_EFFECT );
		{
			m_pMainRenderTarget = NEW RenderTargetEntity;
			m_pMainRenderTarget->ListenResizeview();
			m_pMainRenderTarget->SetJobType( IJob::JT_SYNCHRONOUS );
			m_pMainRenderTarget->PushMetadata(
				RenderTargetDependResolutionMetadata(
					RenderTargetProperty::RT_RENDER_TARGET_MAIN,
					RenderTargetProperty::ST_SWAP_A,
					GlobalDefine::Color_Gray,
					framework.GetConfig().GetViewSize(),
					framework.GetConfig().GetResolution()
				));
			m_pMainRenderTarget->CreateResource();
		}

		{
			m_pOriginalColorDepthStencil = NEW RenderTargetEntity;
			m_pOriginalColorDepthStencil->ListenResizeview();
			m_pOriginalColorDepthStencil->SetJobType( IJob::JT_SYNCHRONOUS );
			m_pOriginalColorDepthStencil->PushMetadata(
				RenderTargetDependResolutionMetadata(
				RenderTargetProperty::RT_RENDER_TARGET_2D,
				RenderTargetProperty::ST_SWAP_A,
				GlobalDefine::Color_Black,
				framework.GetConfig().GetViewSize(),
				framework.GetConfig().GetResolution()
				));
			TextureEntity* tex = m_pOriginalColorDepthStencil->MakeTextureAttachment( RenderTargetProperty::TA_COLOR_0 );
			tex->PushMetadata( 
				TextureBufferMetadata( 
						framework.GetConfig().GetResolution(),
						TextureProperty::TT_TEXTURE2D,
						TextureProperty::TU_STATIC,
						TextureProperty::PF_R8G8B8A8, 1, false,
						TextureProperty::TW_CLAMP_TO_EDGE,
						TextureProperty::TW_CLAMP_TO_EDGE,
						TextureProperty::TF_NEAREST,
						TextureProperty::TF_NEAREST,
						NULL ) );
			tex = m_pOriginalColorDepthStencil->MakeTextureAttachment( RenderTargetProperty::TA_DEPTH_STENCIL );
			tex->PushMetadata( 
				TextureBufferMetadata( 
					framework.GetConfig().GetResolution(),
					TextureProperty::TT_TEXTURE2D,
					TextureProperty::TU_STATIC,
					TextureProperty::PF_DEPTH24_STENCIL8, 1, false,
					TextureProperty::TW_CLAMP_TO_EDGE,
					TextureProperty::TW_CLAMP_TO_EDGE,
					TextureProperty::TF_NEAREST,
					TextureProperty::TF_NEAREST,
					NULL ) );
			m_pOriginalColorDepthStencil->CreateResource();
		}

		{
			m_pPreviousSceneColor[0] = NEW RenderTargetEntity;
			m_pPreviousSceneColor[0]->ListenResizeview();
			m_pPreviousSceneColor[0]->SetJobType( IJob::JT_SYNCHRONOUS );
			m_pPreviousSceneColor[0]->PushMetadata(
				RenderTargetDependResolutionMetadata(
				RenderTargetProperty::RT_RENDER_TARGET_2D,
				RenderTargetProperty::ST_SWAP_A,
				GlobalDefine::Color_Black,
				framework.GetConfig().GetViewSize(),
				framework.GetConfig().GetResolution()
				));
			TextureEntity* tex = m_pPreviousSceneColor[0]->MakeTextureAttachment( RenderTargetProperty::TA_COLOR_0 );
			tex->PushMetadata( 
				TextureBufferMetadata( 
					framework.GetConfig().GetResolution(),
					TextureProperty::TT_TEXTURE2D,
					TextureProperty::TU_STATIC,
					TextureProperty::PF_R8G8B8A8, 1, false,
					TextureProperty::TW_CLAMP_TO_EDGE,
					TextureProperty::TW_CLAMP_TO_EDGE,
					TextureProperty::TF_NEAREST,
					TextureProperty::TF_NEAREST,
					NULL ) );
			m_pPreviousSceneColor[0]->CreateResource();
		}

		{
			m_pPreviousSceneColor[1] = NEW RenderTargetEntity;
			m_pPreviousSceneColor[1]->ListenResizeview();
			m_pPreviousSceneColor[1]->SetJobType( IJob::JT_SYNCHRONOUS );
			m_pPreviousSceneColor[1]->PushMetadata(
				RenderTargetDependResolutionMetadata(
					RenderTargetProperty::RT_RENDER_TARGET_2D,
					RenderTargetProperty::ST_SWAP_B,
					GlobalDefine::Color_Black,
					framework.GetConfig().GetViewSize(),
					framework.GetConfig().GetResolution()
				));
			TextureEntity* tex = m_pPreviousSceneColor[1]->MakeTextureAttachment( RenderTargetProperty::TA_COLOR_0 );
			tex->PushMetadata( 
				TextureBufferMetadata( 
				framework.GetConfig().GetResolution(),
				TextureProperty::TT_TEXTURE2D,
				TextureProperty::TU_STATIC,
				TextureProperty::PF_R8G8B8A8, 1, false,
				TextureProperty::TW_CLAMP_TO_EDGE,
				TextureProperty::TW_CLAMP_TO_EDGE,
				TextureProperty::TF_NEAREST,
				TextureProperty::TF_NEAREST,
				NULL ) );
			m_pPreviousSceneColor[1]->CreateResource();
		}
		{
			m_pRenderObject = NEW RenderObjectEntity();
			m_pRenderObject->SetJobType( IJob::JT_SYNCHRONOUS );
			m_pRenderObject->PushMetadata(
				RenderObjectMeshMetadate( 
					RenderObjectProperty::RM_TRIANGLES,
					QuadVertexMetadata( BufferObjectProperty::MU_STATIC ),
					QuadIndicesMetadata( BufferObjectProperty::MU_STATIC ) )
				);
			m_pRenderObject->PushMetadata( RenderObjectMaterialMetadata( PathMetadata( DefaultAsset::ImageBlitMaterial ) ) );
			m_pRenderObject->CreateResource();
		}
	}