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