6 #ifndef _INC_cDXEffect_H
7 #define _INC_cDXEffect_H
27 class GRAY3D_LINK cDXEffect :
public cDXBaseT<ID3DXEffect>
34 typedef cDXBaseT<ID3DXEffect> SUPER_t;
40 cDXEffect(
cStringF sFilePath =
"", DWORD dwShaderFlags=0 );
49 bool isEffectLoaded()
const
50 {
return m_pDXObj !=
nullptr; }
52 ID3DXEffect* get_DXEffect()
const
55 operator ID3DXEffect* ()
const
72 bool CheckReturnDX( D3DXHANDLE hRet )
const
83 HRESULT CreateEffectFromFile(
cStringF sFilePath, DWORD dwShaderFlags=0 );
85 D3DXEFFECT_DESC get_Desc()
const
92 HRESULT hRes = m_pDXObj->GetDesc(&desc);
98 D3DXHANDLE GetTechniqueByName(
const char* pszTechName,
bool bCritical=
true )
const
103 ASSERT(m_pDXObj!=
nullptr);
104 D3DXHANDLE hRet = m_pDXObj->GetTechniqueByName( pszTechName );
107 if ( ! CheckReturnDX(hRet))
112 D3DXHANDLE GetTechniqueEnum(
const int nr)
const
114 ASSERT(m_pDXObj!=
nullptr);
115 D3DXHANDLE hRet = m_pDXObj->GetTechnique(nr);
119 D3DXHANDLE get_CurrentTechnique()
const
122 ASSERT(m_pDXObj!=
nullptr);
123 D3DXHANDLE hRet = m_pDXObj->GetCurrentTechnique();
127 HRESULT put_CurrentTechnique( D3DXHANDLE hTech )
const
130 ASSERT(m_pDXObj!=
nullptr);
131 HRESULT hRes = m_pDXObj->SetTechnique(hTech);
132 return CheckReturnHR(hRes);
134 HRESULT ValidateTechnique( D3DXHANDLE hTech )
const
139 ASSERT(m_pDXObj!=
nullptr);
140 HRESULT hRes = m_pDXObj->ValidateTechnique( hTech );
144 D3DXHANDLE BindTechnique(
const char* pszTechName )
const
146 D3DXHANDLE hTech = GetTechniqueByName( pszTechName );
147 if ( ! CheckReturnDX(hTech))
149 HRESULT hRes = ValidateTechnique( hTech );
156 D3DXTECHNIQUE_DESC GetTechniqueDesc(D3DXHANDLE hTech)
const
161 ASSERT(m_pDXObj!=
nullptr);
162 D3DXTECHNIQUE_DESC desc;
163 HRESULT hRes = m_pDXObj->GetTechniqueDesc(hTech, &desc);
167 D3DXHANDLE GetTechniquePass(D3DXHANDLE hTech,
const int passNr)
const
169 ASSERT(m_pDXObj!=
nullptr);
170 D3DXHANDLE hRet = m_pDXObj->GetPass(hTech, passNr);
171 CheckReturnDX(hTech);
177 D3DXPASS_DESC GetPassDesc(D3DXHANDLE hPass)
const
181 ASSERT(m_pDXObj!=
nullptr);
183 HRESULT hRes = m_pDXObj->GetPassDesc(hPass, &desc);
189 D3DXHANDLE GetAnnotationEnum(D3DXHANDLE hTechniquePassOrGlobalParam,
const int nr)
191 ASSERT(m_pDXObj!=
nullptr);
192 return m_pDXObj->GetAnnotation(hTechniquePassOrGlobalParam, nr);
194 D3DXHANDLE GetAnnotationByName(D3DXHANDLE hTechniquePassOrGlobalParam,
const char* pszName )
const
197 ASSERT(m_pDXObj!=
nullptr);
198 D3DXHANDLE hRet = m_pDXObj->GetAnnotationByName(hTechniquePassOrGlobalParam, pszName );
204 bool isParameterUsedCur( D3DXHANDLE hParam )
const
207 ASSERT(m_pDXObj!=
nullptr);
208 return m_pDXObj->IsParameterUsed( hParam, get_CurrentTechnique()) ? true :
false;
210 D3DXHANDLE GetParameterByName(
const char* pszName )
const
213 ASSERT(m_pDXObj!=
nullptr);
214 D3DXHANDLE hRet = m_pDXObj->GetParameterByName(
HANDLE_NULL, pszName );
219 D3DXHANDLE GetParameterEnum(D3DXHANDLE hParent, UINT iNum)
const
222 ASSERT(m_pDXObj!=
nullptr);
223 D3DXHANDLE hRet = m_pDXObj->GetParameter( hParent, iNum);
227 D3DXHANDLE GetParameterElement(D3DXHANDLE hParameter, UINT iNum)
const
229 ASSERT(m_pDXObj!=
nullptr);
230 D3DXHANDLE hRet = m_pDXObj->GetParameterElement( hParameter, iNum );
235 D3DXPARAMETER_DESC GetParamDesc( D3DXHANDLE hParamOrAnnotation )
const
241 ASSERT(m_pDXObj!=
nullptr);
242 D3DXPARAMETER_DESC desc;
243 HRESULT hRes = m_pDXObj->GetParameterDesc(hParamOrAnnotation, &desc);
249 HRESULT GetParamFloat( D3DXHANDLE hParam, FLOAT* pValue )
const
251 ASSERT(m_pDXObj!=
nullptr);
252 HRESULT hRes = m_pDXObj->GetFloat(hParam, pValue );
258 ASSERT(m_pDXObj!=
nullptr);
259 HRESULT hRes = m_pDXObj->GetMatrixTranspose(hParam, pMat );
263 HRESULT GetParamTexture( D3DXHANDLE hParam, IDirect3DBaseTexture9** ppTexture )
265 ASSERT(m_pDXObj!=
nullptr);
266 HRESULT hRes = m_pDXObj->GetTexture( hParam, ppTexture );
272 HRESULT SetParamValue(D3DXHANDLE hParam,
const void* pBuffer, UINT numBytes)
274 ASSERT(m_pDXObj!=
nullptr);
275 HRESULT hRes = m_pDXObj->SetValue(hParam, pBuffer, numBytes);
279 HRESULT SetParamInt(D3DXHANDLE hParam,
int iValue )
281 ASSERT(m_pDXObj!=
nullptr);
282 HRESULT hRes = m_pDXObj->SetInt(hParam, iValue );
286 HRESULT SetParamFloat( D3DXHANDLE hParam, FLOAT fVal )
288 ASSERT(m_pDXObj!=
nullptr);
289 HRESULT hRes = m_pDXObj->SetFloat(hParam, fVal );
293 HRESULT SetParamBool( D3DXHANDLE hParam, BOOL bVal )
295 ASSERT(m_pDXObj!=
nullptr);
296 HRESULT hRes = m_pDXObj->SetBool(hParam, bVal );
303 ASSERT(m_pDXObj!=
nullptr);
304 HRESULT hRes = m_pDXObj->SetVector(hParam, pVector );
310 ASSERT(m_pDXObj!=
nullptr);
311 HRESULT hRes = m_pDXObj->SetMatrix(hParam, pMat );
317 ASSERT(m_pDXObj!=
nullptr);
318 HRESULT hRes = m_pDXObj->SetMatrixTranspose(hParam, pMat );
322 HRESULT SetParamTexture(D3DXHANDLE hParam, IDirect3DBaseTexture9* pTexture )
324 ASSERT(m_pDXObj!=
nullptr);
325 HRESULT hRes = m_pDXObj->SetTexture( hParam, pTexture );
330 HRESULT SetParamFloatArray(D3DXHANDLE hParam,
const FLOAT* pVals,
int size)
332 ASSERT(m_pDXObj!=
nullptr);
333 HRESULT hRes = m_pDXObj->SetFloatArray(hParam, pVals, size);
337 HRESULT SetParamVectorArray(D3DXHANDLE hParam,
const XMFLOAT4* pVals,
int size)
339 ASSERT(m_pDXObj!=
nullptr);
340 HRESULT hRes = m_pDXObj->SetVectorArray(hParam, pVals, size);
344 HRESULT SetParamMatrixArray(D3DXHANDLE hParam,
const XMFLOAT4X4* pVals,
int size)
346 ASSERT(m_pDXObj!=
nullptr);
347 HRESULT hRes = m_pDXObj->SetMatrixArray(hParam, pVals, size);
351 HRESULT SetParamArrayRange( D3DXHANDLE hParam, UINT uStart, UINT uEnd )
353 ASSERT(m_pDXObj!=
nullptr);
354 HRESULT hRes = m_pDXObj->SetArrayRange(hParam, uStart, uEnd);
361 #define D3DPROP(p) (D3DXHANDLE)(#p)
365 #define EFF_HAND(parm) m_h##parm
366 #define EFF_HAND_DECL(parm) D3DXHANDLE EFF_HAND(parm)
369 #define EFF_BIND_TECH( tech ) EFF_HAND(tech) = BindTechnique( #tech );
372 #define EFF_BIND_PARM( parm ) EFF_HAND(parm) = GetParameterByName( #parm )
375 #define EFF_PARM_SET( manager, eff, setter, parm, arg ) (manager).eff.setter((manager).eff.EFF_HAND(parm), arg )
376 #define EFF_PARM_SET2( manager, eff, setter, parm, arg, arg2 ) (manager).eff.setter((manager).eff.EFF_HAND(parm), arg, arg2 )
384 cDXEffectDraw( ID3DXEffect* pEffect, DWORD dwFlags=0 )
385 : m_pEffect( pEffect )
388 ASSERT(m_pEffect!=
nullptr);
389 if ( dwFlags != 0xFFFFFFFF )
391 HRESULT hRes = m_pEffect->Begin(&m_uPasses,dwFlags);
410 bool isValidEffect()
const
412 if ( m_uPasses <= 0 )
414 ASSERT(m_pEffect!=
nullptr);
418 ID3DXEffect* m_pEffect;
429 cDXEffectDraw& m_draw;
433 cDXEffectDrawPass( cDXEffectDraw& draw, UINT uPassCur=0 )
435 , m_uPassCur(uPassCur)
437 ASSERT(m_draw.m_pEffect!=
nullptr);
438 if ( m_draw.m_uPasses )
440 ASSERT( uPassCur < m_draw.m_uPasses );
441 HRESULT hRes = m_draw.m_pEffect->BeginPass( uPassCur );
444 m_draw.m_uPasses = 0;
455 if ( m_draw.m_uPasses )
457 m_draw.m_pEffect->EndPass();
465 HRESULT hRes = m_draw.m_pEffect->CommitChanges();
469 HRESULT SetPass( UINT uPassCur )
472 ASSERT( m_draw.m_uPasses > 0 );
473 if ( m_uPassCur == uPassCur )
475 m_uPassCur = uPassCur;
476 m_draw.m_pEffect->EndPass();
477 return m_draw.m_pEffect->BeginPass( uPassCur );
480 HRESULT SetTechnique( D3DXHANDLE hTechnique, UINT uPassCur=0 )
484 ASSERT( hTechnique != m_draw.m_pEffect->GetCurrentTechnique() );
485 if ( m_draw.m_uPasses )
487 m_draw.m_pEffect->EndPass();
488 m_draw.m_pEffect->End();
489 m_draw.m_uPasses = 0;
491 HRESULT hRes = m_draw.m_pEffect->SetTechnique( hTechnique );
497 hRes = m_draw.m_pEffect->Begin( &m_draw.m_uPasses, 0 );
500 m_draw.m_uPasses = 0;
503 hRes = m_draw.m_pEffect->BeginPass( uPassCur );
506 m_draw.m_uPasses = 0;
509 m_uPassCur = uPassCur;
#define GRAY3D_LINK
Definition: Gray3D.h:15
#define FAILED(x)
Definition: HResult.h:30
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
#define ASSERT(exp)
Definition: cDebugAssert.h:87
#define DEBUG_CHECK(exp)
Definition: cDebugAssert.h:90
#define HANDLE_NULL
Invalid OS handle for _WIN32. Not invalid OS handle for linux.
Definition: cOSHandle.h:21
Definition: Gray3D.cpp:12
cStringT< FILECHAR_t > cStringF
A file name. checks USE_UNICODE_FN. related to cFilePath.
Definition: cFilePath.h:17