106 lines
2.4 KiB
C++
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;
|
|
}
|
|
}
|