165 lines
4.7 KiB
C++
165 lines
4.7 KiB
C++
//-----------------------------------------------------------------------------
|
|
// File: DXUTEffectMap.h
|
|
//
|
|
// Desc: Maps the set of standard semantics and annotations to a collection
|
|
// of ID3DXEffect objects.
|
|
//
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//-----------------------------------------------------------------------------
|
|
#pragma once
|
|
#ifndef DXUT_EFFECTMAP_H
|
|
#define DXUT_EFFECTMAP_H
|
|
|
|
const int MAX_INDEX = 5;
|
|
|
|
enum DXUT_SEMANTIC
|
|
{
|
|
DXUT_UNKNOWN_SEMANTIC,
|
|
|
|
DXUT_Diffuse,
|
|
DXUT_Specular,
|
|
DXUT_Ambient,
|
|
DXUT_SpecularPower,
|
|
DXUT_Emissive,
|
|
DXUT_Normal,
|
|
DXUT_Height,
|
|
DXUT_Refraction,
|
|
DXUT_Opacity,
|
|
DXUT_Environment,
|
|
DXUT_EnvironmentNormal,
|
|
DXUT_Fresnel,
|
|
|
|
DXUT_World,
|
|
DXUT_WorldInverse,
|
|
DXUT_WorldInverseTranspose,
|
|
DXUT_WorldView,
|
|
DXUT_WorldViewInverse,
|
|
DXUT_WorldViewInverseTranspose,
|
|
DXUT_WorldViewProjection,
|
|
DXUT_WorldViewProjectionInverse,
|
|
DXUT_WorldViewProjectionInverseTranspose,
|
|
DXUT_View,
|
|
DXUT_ViewInverse,
|
|
DXUT_ViewInverseTranspose,
|
|
DXUT_ViewProjection,
|
|
DXUT_ViewProjectionInverse,
|
|
DXUT_ViewProjectionInverseTranspose,
|
|
DXUT_Projection,
|
|
DXUT_ProjectionInverse,
|
|
DXUT_ProjectionInverseTranspose,
|
|
|
|
DXUT_RenderTargetDimensions,
|
|
DXUT_RenderTargetClipping,
|
|
DXUT_Time,
|
|
DXUT_LastTime,
|
|
DXUT_ElapsedTime,
|
|
DXUT_Position,
|
|
DXUT_Direction,
|
|
DXUT_BoundingCenter,
|
|
DXUT_BoundingSphereSize,
|
|
DXUT_BoundingSphereMin,
|
|
DXUT_BoundingSphereMax,
|
|
DXUT_BoundingBoxSize,
|
|
DXUT_BoundingBoxMin,
|
|
DXUT_BoundingBoxMax,
|
|
DXUT_Attenuation,
|
|
DXUT_RenderColorTarget,
|
|
DXUT_RenderDepthStencilTarget,
|
|
DXUT_UnitsScale,
|
|
DXUT_StandardsGlobal,
|
|
|
|
NUM_DXUT_SEMANTICS
|
|
};
|
|
|
|
enum DXUT_OBJECT
|
|
{
|
|
DXUT_UNKNOWN_OBJECT,
|
|
|
|
DXUT_Geometry,
|
|
DXUT_Light,
|
|
DXUT_Camera,
|
|
DXUT_Frame,
|
|
|
|
NUM_DXUT_OBJECTS
|
|
};
|
|
|
|
|
|
struct ParamList
|
|
{
|
|
ID3DXEffect* pEffect;
|
|
CGrowableArray< D3DXHANDLE > ahParameters;
|
|
|
|
void Reset();
|
|
};
|
|
|
|
|
|
class CDXUTEffectMap
|
|
{
|
|
public:
|
|
CDXUTEffectMap() { Reset(); }
|
|
~CDXUTEffectMap() { Reset(); }
|
|
|
|
VOID Reset();
|
|
|
|
HRESULT AddEffect( ID3DXEffect* pEffect );
|
|
HRESULT RemoveEffect( ID3DXEffect* pEffect );
|
|
|
|
HRESULT SetStandardParameter( const WCHAR* strSemantic, const WCHAR* strObject, DWORD dwObjectIndex, float* pData, DWORD dwDataLen, const WCHAR* strType = NULL, const WCHAR* strUnits = NULL, const WCHAR* strSpace = NULL );
|
|
HRESULT SetStandardParameter( DXUT_SEMANTIC eSemantic, DXUT_OBJECT eObject, DWORD dwObjectIndex, float* pData, DWORD dwDataLen, const WCHAR* strType = NULL, const WCHAR* strUnits = NULL, const WCHAR* strSpace = NULL );
|
|
|
|
HRESULT SetWorldMatrix( D3DXMATRIXA16* pWorldMatrix, const WCHAR* strUnits = NULL );
|
|
HRESULT SetViewMatrix( D3DXMATRIXA16* pViewMatrix, const WCHAR* strUnits = NULL );
|
|
HRESULT SetProjectionMatrix( D3DXMATRIXA16* pProjectionMatrix );
|
|
|
|
static DXUT_SEMANTIC StringToSemantic( const char* cstrSemantic );
|
|
static DXUT_SEMANTIC StringToSemantic( const WCHAR* strSemantic );
|
|
static DXUT_OBJECT StringToObject( const char* cstrObject );
|
|
static DXUT_OBJECT StringToObject( const WCHAR* strObject );
|
|
|
|
private:
|
|
HRESULT UpdateTransforms( DXUT_SEMANTIC eSemantic, const WCHAR* strUnits = L"m" );
|
|
|
|
D3DXMATRIXA16 m_matWorld;
|
|
D3DXMATRIXA16 m_matView;
|
|
D3DXMATRIXA16 m_matProjection;
|
|
|
|
// Database of DXUTEffect object parameter handles which are indexed accoring to
|
|
// Semantic, Object annotation, index, and containing mesh pointer
|
|
CGrowableArray<ParamList> m_Bindings[ NUM_DXUT_SEMANTICS ][ NUM_DXUT_OBJECTS ][ MAX_INDEX ];
|
|
};
|
|
|
|
|
|
//-------------------------------------------------------------------------------------
|
|
inline bool StringBegins( const char* strTest, const char* strStartsWith )
|
|
{
|
|
return ( 0 == _strnicmp( strTest, strStartsWith, strlen(strStartsWith) ) );
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------------------------------
|
|
inline bool StringEquals( const char* strTest, const char* strEquals )
|
|
{
|
|
return( 0 == _stricmp( strTest, strEquals ) );
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------------------------------
|
|
inline void RemoveTrailingNumber( char* strWithoutNumber, DWORD dwBufLen, const char* str )
|
|
{
|
|
StringCchCopyA( strWithoutNumber, dwBufLen, str );
|
|
|
|
char* strIndex = strWithoutNumber + strlen(strWithoutNumber);
|
|
|
|
// If there is a digit at the end of the semantic discard it
|
|
while( isdigit( (BYTE) (*(strIndex-1)) ) )
|
|
{
|
|
--strIndex;
|
|
}
|
|
|
|
*strIndex = 0;
|
|
}
|
|
|
|
|
|
|
|
#endif //DXUT_EFFECTMAP_H
|