Beispiel #1
0
/***********************************************************************************
 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;	
}
Beispiel #4
0
void ReleaseShader( Shader* shader )
{
    Release(&shader->refCounter);
    if(!HasReferences(&shader->refCounter))
        FreeShader(shader);
}