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

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();
}