//----------------------------------------------------------------------------- // Name: GetNextTechnique // Desc: //----------------------------------------------------------------------------- HRESULT CMyD3DApplication::GetNextTechnique(INT nDir, BOOL bBypassValidate) { D3DXEFFECT_DESC effect; UINT_PTR iTechnique = m_iTechnique; m_pEffect->GetDesc(&effect); for(;;) { iTechnique += nDir; if(((INT_PTR) iTechnique) < 0) iTechnique = effect.Techniques - 1; if(iTechnique >= effect.Techniques) iTechnique = 0; if(nDir && (iTechnique == m_iTechnique)) break; if(!nDir) nDir = 1; m_pEffect->SetTechnique((LPCSTR) iTechnique); if(bBypassValidate || (iTechnique == effect.Techniques - 1) || (m_bDrawCaustics || !m_pEffect->IsParameterUsed("tCAU")) && SUCCEEDED(m_pEffect->Validate())) { m_iTechnique = iTechnique; char szText[256]; sprintf(szText, "Water - Technique %d", m_iTechnique); SetWindowText(m_hWnd, szText); return S_OK; } } m_pEffect->SetTechnique((LPCSTR) m_iTechnique); return E_FAIL; }