float Scalar::GetFloat() { DataType* pPT = Get(); if( NULL == pPT ) return 0; return pPT->GetFloat(); }
//-------------------------------------------------------------------------------------- HRESULT Variable9::SetScalar_Internal( Scalar* pScalar ) { HRESULT hr; DataType* pType; pType = pScalar->Get(); if( NULL == pType ) return E_FAIL; switch( m_Desc.Type ) { //------------------------------------------------------------------------------ case SASVT_BOOL: { hr = m_pD3DXEffect->SetBool( m_Handle, pType->GetInt() ); // Cast to BOOL if( FAILED(hr) ) return hr; return S_OK; } //------------------------------------------------------------------------------ case SASVT_INT: { hr = m_pD3DXEffect->SetInt( m_Handle, pType->GetInt() ); if( FAILED(hr) ) return hr; return S_OK; } //------------------------------------------------------------------------------ case SASVT_FLOAT: { hr = m_pD3DXEffect->SetFloat( m_Handle, pType->GetFloat() ); if( FAILED(hr) ) return hr; return S_OK; } } return E_FAIL; }
//-------------------------------------------------------------------------------------- HRESULT Variable9::SetMatrix_Internal( Matrix* pMatrix ) { HRESULT hr; switch( m_Desc.Type ) { //------------------------------------------------------------------------------ case SASVT_BOOL: { BOOL x[16]; int index=0; for( UINT r=0; r < m_Desc.Rows; r++ ) { for( UINT c=0; c < m_Desc.Columns; c++ ) { DataType* pType = pMatrix->Get(r, c); if( pType ) { x[index] = pType->GetInt(); // Cast to BOOL } index++; } } hr = m_pD3DXEffect->SetBoolArray( m_Handle, x, 16 ); if( FAILED(hr) ) return hr; return S_OK; } //------------------------------------------------------------------------------ case SASVT_INT: { int x[16]; int index=0; for( UINT r=0; r < m_Desc.Rows; r++ ) { for( UINT c=0; c < m_Desc.Columns; c++ ) { DataType* pType = pMatrix->Get(r, c); if( pType ) { x[index] = pType->GetInt(); } index++; } } hr = m_pD3DXEffect->SetIntArray( m_Handle, x, 16 ); if( FAILED(hr) ) return hr; return S_OK; } //------------------------------------------------------------------------------ case SASVT_FLOAT: { float x[16]; int index=0; for( UINT r=0; r < m_Desc.Rows; r++ ) { for( UINT c=0; c < m_Desc.Columns; c++ ) { DataType* pType = pMatrix->Get(r, c); if( pType ) { x[index] = pType->GetFloat(); } index++; } } hr = m_pD3DXEffect->SetFloatArray( m_Handle, x, 16 ); if( FAILED(hr) ) return hr; return S_OK; } } return E_FAIL; }
//-------------------------------------------------------------------------------------- HRESULT Variable9::SetVector_Internal( Vector* pVector ) { HRESULT hr; switch( m_Desc.Type ) { //------------------------------------------------------------------------------ case SASVT_BOOL: { BOOL x[4] = {0}; for( UINT i=0; i < m_Desc.Columns; i++ ) { DataType* pType = pVector->Get(i); if( pType ) { x[i] = pType->GetInt(); // Cast to BOOL } } hr = m_pD3DXEffect->SetBoolArray( m_Handle, x, pVector->Length() ); if( FAILED(hr) ) return hr; return S_OK; } //------------------------------------------------------------------------------ case SASVT_INT: { int x[4] = {0}; for( UINT i=0; i < m_Desc.Columns; i++ ) { DataType* pType = pVector->Get(i); if( pType ) { x[i] = pType->GetInt(); } } hr = m_pD3DXEffect->SetIntArray( m_Handle, x, pVector->Length() ); if( FAILED(hr) ) return hr; return S_OK; } //------------------------------------------------------------------------------ case SASVT_FLOAT: { float x[4] = {0}; for( UINT i=0; i < m_Desc.Columns; i++ ) { DataType* pType = pVector->Get(i); if( pType ) { x[i] = pType->GetFloat(); } } hr = m_pD3DXEffect->SetFloatArray( m_Handle, x, pVector->Length() ); if( FAILED(hr) ) return hr; return S_OK; } } return E_FAIL; }