76 lines
2.1 KiB
C++
76 lines
2.1 KiB
C++
#include "StdAfx.h"
|
|
#include "EtHeatHazeFilter.h"
|
|
#include "EtBackBufferMng.h"
|
|
#include "EtDrawQuad.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
|
|
#endif
|
|
|
|
CEtHeatHazeFilter::CEtHeatHazeFilter()
|
|
{
|
|
m_Type = SF_HEATHAZE;
|
|
m_fElapsedTime = 0.0f;
|
|
m_fDistortionPower = 1.0f;
|
|
m_fWaveSpeed = 5.0f;
|
|
}
|
|
|
|
CEtHeatHazeFilter::~CEtHeatHazeFilter()
|
|
{
|
|
Clear();
|
|
}
|
|
|
|
void CEtHeatHazeFilter::Clear()
|
|
{
|
|
SAFE_RELEASE_SPTR( m_hTexture );
|
|
CEtPostProcessFilter::Clear();
|
|
}
|
|
|
|
void CEtHeatHazeFilter::Initialize()
|
|
{
|
|
Clear();
|
|
|
|
m_hMaterial = LoadResource( "HeatHazeFilter.fx", RT_SHADER );
|
|
if( !m_hMaterial ) return;
|
|
|
|
int nBackBufferIndex = GetEtBackBufferMng()->GetBackBufferIndex();
|
|
AddCustomParam( m_vecCustomParam, EPT_TEX, m_hMaterial, "g_BackBuffer", &nBackBufferIndex );
|
|
AddCustomParam( m_vecCustomParam, EPT_FLOAT_PTR, m_hMaterial, "g_fElapsedTime", &m_fElapsedTime );
|
|
AddCustomParam( m_vecCustomParam, EPT_FLOAT_PTR, m_hMaterial, "g_fDistortionPower", &m_fDistortionPower );
|
|
}
|
|
|
|
void CEtHeatHazeFilter::SetTexture( char *szFileName )
|
|
{
|
|
if( !m_hMaterial ) return;
|
|
SAFE_RELEASE_SPTR( m_hTexture );
|
|
m_hTexture = EternityEngine::LoadTexture( szFileName );
|
|
if( !m_hTexture ) return;
|
|
int nTexIndex = m_hTexture->GetMyIndex();
|
|
AddCustomParam( m_vecCustomParam, EPT_TEX, m_hMaterial, "g_PerturbationTexture", &nTexIndex );
|
|
}
|
|
|
|
void CEtHeatHazeFilter::Render( float fElapsedTime )
|
|
{
|
|
if( !m_hMaterial ) return;
|
|
m_fElapsedTime += fElapsedTime * m_fWaveSpeed;
|
|
GetEtDevice()->RestoreRenderTarget();
|
|
|
|
int nPasses = 0;
|
|
int nTechnique = 0;
|
|
m_hMaterial->SetTechnique( nTechnique );
|
|
m_hMaterial->SetCustomParamList( m_vecCustomParam );
|
|
m_hMaterial->BeginEffect( nPasses );
|
|
m_hMaterial->BeginPass( 0 );
|
|
|
|
EtCameraHandle hCamera;
|
|
EtMatrix *pProjMat;
|
|
EtVector3 vOutput;
|
|
|
|
hCamera = CEtCamera::GetActiveCamera();
|
|
pProjMat = hCamera->GetProjMat();
|
|
EtVec3TransformCoord( &vOutput, &EtVector3( 0.0, 0.0f, 1000.0f ), pProjMat );
|
|
GetEtDevice()->SetVertexShader( NULL ); // Use Fixed Pipeline
|
|
DrawQuad( &EtVector2( 0, 0 ), &EtVector2( 1, 1 ), &EtVector2( 0, 0 ), &EtVector2( 1, 1 ), vOutput.z );
|
|
m_hMaterial->EndPass();
|
|
m_hMaterial->EndEffect();
|
|
}
|