/*********************************************************************************** Function Name : DisposePrograms Inputs : gc Outputs : - Returns : - Description : Generic program free function; called from eglglue.c ************************************************************************************/ static IMG_VOID DisposePrograms(GLES1Context *gc) { GLES1Shader *psShader, *psNextShader; psShader = gc->sProgram.psVertex; while(psShader) { psNextShader = psShader->psNext; FreeShader(gc,psShader); psShader = psNextShader; } psShader = gc->sProgram.psFragment; while(psShader) { psNextShader = psShader->psNext; FreeShader(gc,psShader); psShader = psNextShader; } /* clear the current shaders */ gc->sProgram.psCurrentVertexShader = IMG_NULL; gc->sProgram.psCurrentFragmentShader = IMG_NULL; }
// Assemble shader using DX runtime HRESULT U2Dx9ShaderMgr::LoadAndAssembleShader( U2Dx9ShaderDesc * pDesc ) { HRESULT hr = S_OK; FAIL_IF_NULL( pDesc ); FreeShader( pDesc ); LPD3DXBUFFER pbufShader, pbufErrors; //flags: // D3DXSHADER_DEBUG // D3DXSHADER_SKIPVALIDATION // D3DXSHADER_SKIPOPTIMIZATION hr = D3DXAssembleShaderFromFile( pDesc->m_szShaderDefFile.c_str(), NULL, // D3DXMACRO defines NULL, // LPD3DXINcLUDE include, NULL = do #include 0, // flags &pbufShader, &pbufErrors ); if( FAILED( hr )) { FMsg("U2Dx9ShaderMgr::LoadAndAssembleShader( U2Dx9ShaderDesc * pDesc ) Errors:\n"); if( pbufErrors != NULL ) { HandleErrorString( (TCHAR*) pbufErrors->GetBufferPointer() ); } else { FMsg("Error buffer is NULL!\n"); } SAFE_RELEASE( pbufShader ); BREAK_AND_RET_VAL_IF_FAILED( hr ); } hr = CreateShader( pbufShader, pDesc->m_type, pDesc ); if( FAILED(hr) ) { FMsg("LoadAndAssembleShader( U2Dx9ShaderDesc * pDesc ) couldn't create shader : %s\n", pDesc->m_szShaderDefFile.c_str() ); } return( hr ); }
void U2Dx9ShaderMgr::Terminate() { size_t i; HRESULT hr; if(ms_pD3DDev) { ms_pD3DDev->SetPixelShader( 0 ); ms_pD3DDev->SetVertexShader( NULL ); ms_pD3DDev->SetFVF( D3DFVF_XYZ ); for(i = 1; i < GetInstance()->m_shaders.size() ; ++i) { hr = FreeShader( &(GetInstance()->m_shaders[i])); } SAFE_RELEASE(ms_pD3DDev); ms_pRenderer = NULL; } U2_DELETE ms_pInstance; ms_pInstance = NULL; }
void ReleaseShader( Shader* shader ) { Release(&shader->refCounter); if(!HasReferences(&shader->refCounter)) FreeShader(shader); }