DragonNest/Common/EternityEngine/EtPostProcessMng.cpp
Cussrro 47f7895977 Revert "修复编码问题"
This reverts commit 9e69c01767.
2024-12-21 10:04:04 +08:00

136 lines
No EOL
2.6 KiB
C++

#include "StdAfx.h"
#include "EtBackBufferMng.h"
#include "EtPostProcessFilter.h"
#include "EtPostProcessMng.h"
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
#endif
CEtPostProcessMng g_EtPostProcessMng;
bool FilterSortFunc( CEtPostProcessFilter *pFilter1, CEtPostProcessFilter *pFilter2 )
{
if( pFilter1->GetType() < pFilter2->GetType() )
{
return true;
}
return false;
}
CEtPostProcessMng::CEtPostProcessMng(void)
{
}
CEtPostProcessMng::~CEtPostProcessMng(void)
{
Clear();
}
void CEtPostProcessMng::Clear()
{
SAFE_DELETE_PVEC( m_vecFilter );
}
void CEtPostProcessMng::Initialize()
{
Clear();
GetEtBackBufferMng()->CreateBackBuffer();
}
void CEtPostProcessMng::Render( float fElapsedTime )
{
if( m_vecFilter.empty() ) {
return;
}
int i, nSize;
nSize = ( int )m_vecFilter.size();
GetEtDevice()->EnableZWrite( false );
for( i = 0; i < nSize; i++ )
{
if( !m_vecFilter[ i ]->IsEnable() )
{
continue;
}
GetEtBackBufferMng()->DumpBackBuffer();
m_vecFilter[ i ]->Render( fElapsedTime );
}
GetEtDevice()->EnableZWrite( true );
GetEtDevice()->RestoreRenderTarget();
}
CEtPostProcessFilter *CEtPostProcessMng::CreateFilter( ScreenFilter Filter )
{
CEtPostProcessFilter *pFilter;
switch( Filter )
{
case SF_LIGHTSHAFT:
pFilter = new CEtLightShaftFilter();
break;
case SF_BLOOM:
pFilter = new CEtBloomFilter();
break;
case SF_WATERCOLOR:
pFilter = new CEtWaterColorFilter();
break;
case SF_COLORADJUST:
pFilter = new CEtColorAdjustFilter();
break;
case SF_COLORADJUSTTEX:
pFilter = new CEtColorAdjustTexFilter();
break;
case SF_DOF:
pFilter = new CEtDOFFilter();
break;
case SF_MOTIONBLUR:
pFilter = new CEtMotionBlurFilter();
break;
case SF_RADIALBLUR:
pFilter = new CEtRadialBlurFilter();
break;
case SF_HEATHAZE:
pFilter = new CEtHeatHazeFilter();
break;
case SF_OUTLINE:
pFilter = new CEtOutlineFilter();
break;
case SF_TRANSITION:
pFilter = new CEtTransitionFilter();
break;
case SF_CAMERABLUR:
pFilter = new CEtCameraBlurFilter();
break;
default:
return NULL;
}
pFilter->Initialize();
m_vecFilter.push_back( pFilter );
std::sort( m_vecFilter.begin(), m_vecFilter.end(), FilterSortFunc );
return pFilter;
}
void CEtPostProcessMng::RemoveFilter( CEtPostProcessFilter *pFilter )
{
for( DWORD i=0; i<m_vecFilter.size(); i++ ) {
if( m_vecFilter[i] == pFilter ) {
m_vecFilter.erase( m_vecFilter.begin() + i );
}
}
}
CEtPostProcessFilter* CEtPostProcessMng::GetFilter( ScreenFilter Filter )
{
for( DWORD i=0; i<m_vecFilter.size(); i++ ) {
if( m_vecFilter[i]->GetType() == Filter ) {
return m_vecFilter[i];
}
}
return NULL;
}