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

106 lines
2.4 KiB
C++

#include "StdAfx.h"
#include "EtCustomParam.h"
CEtCustomParam::CEtCustomParam(void)
{
}
CEtCustomParam::~CEtCustomParam(void)
{
}
void CEtCustomParam::Initialize( EtSkinHandle hSkin )
{
m_hSkin = hSkin;
m_vecCustomParams.resize( m_hSkin->GetMeshHandle()->GetSubMeshCount() );
}
int CEtCustomParam::AddCustomParam( const char *pParamName, EffectParamType Type )
{
int i, j;
EtMaterialHandle hMaterial;
EtParameterHandle hParameter, CheckParameter;
for( i = 0; i < ( int )m_vecCustomParams.size(); i++ )
{
hMaterial = m_hSkin->GetMaterialHandle( i );
hParameter = hMaterial->GetParameterByName( pParamName );
for( j = 0; j < ( int )m_vecCustomParams[ i ].size(); j++ )
{
if( m_vecCustomParams[ i ][ j ].hParamHandle == hParameter )
{
return j;
}
}
}
SCustomParam Param;
CheckParameter = -1;
for( i = 0; i < ( int )m_vecCustomParams.size(); i++ )
{
hMaterial = m_hSkin->GetMaterialHandle( i );
hParameter = hMaterial->GetParameterByName( pParamName );
Param.hParamHandle = hParameter;
if( hParameter != -1 )
{
CheckParameter = hParameter;
}
Param.Type = Type;
Param.nVariableCount = 1;
m_vecCustomParams[ i ].push_back( Param );
}
ASSERT( CheckParameter != -1 );
return ( int )m_vecCustomParams[ 0 ].size() - 1;
}
void CEtCustomParam::SetCustomParam( int nParamIndex, EffectParamType Type, void *pValue, int nSubMeshIndex )
{
ASSERT( ( int )m_vecCustomParams[ 0 ].size() > nParamIndex );
int i;
switch( Type )
{
case EPT_INT:
for( i = 0; i < ( int )m_vecCustomParams.size(); i++ )
{
if( ( nSubMeshIndex == -1 ) || ( nSubMeshIndex == i ) )
{
m_vecCustomParams[ i ][ nParamIndex ].nInt = *( int * )pValue;
}
}
break;
case EPT_FLOAT:
for( i = 0; i < ( int )m_vecCustomParams.size(); i++ )
{
if( ( nSubMeshIndex == -1 ) || ( nSubMeshIndex == i ) )
{
m_vecCustomParams[ i ][ nParamIndex ].fFloat = *( float * )pValue;
}
}
break;
case EPT_VECTOR:
for( i = 0; i < ( int )m_vecCustomParams.size(); i++ )
{
if( ( nSubMeshIndex == -1 ) || ( nSubMeshIndex == i ) )
{
memcpy( m_vecCustomParams[ i ][ nParamIndex ].fFloat4, pValue, sizeof( float ) * 4 );
}
}
break;
case EPT_TEX:
for( i = 0; i < ( int )m_vecCustomParams.size(); i++ )
{
if( ( nSubMeshIndex == -1 ) || ( nSubMeshIndex == i ) )
{
m_vecCustomParams[ i ][ nParamIndex ].nTextureIndex = *( int * )pValue;
}
}
break;
default:
ASSERT( 0 );
break;
}
}