xml::XMLElement* RenderMaterial::loadXMLSettings(xml::XMLElement* elem){

	IResource::loadFromXML(elem);

	xml::XMLElement*e=elem->getSubElement(mT("Technique"));
	while(e)
	{
		core::string name=e->getValueString("Name");
		video::RenderTechnique* t= GetTechniqueByName(name);
		bool loaded=false;
		if(!t)
			t=new RenderTechnique(this);
		else loaded=true;
		t->loadXMLSettings(e);
		if(!loaded)
			AddTechnique(t);
		e=e->nextSiblingElement(mT("Technique"));
	}
	m_activeTechnique=0;
	for(int i=0;i<m_techniques.size();++i)
	{
		if(m_techniques[i]->IsSupported())
		{
			m_activeTechnique=m_techniques[i];
			break;
		}
	}
	return elem;
}
RenderTechnique* RenderMaterial::CreateTechnique(const core::string& name)
{
	RenderTechnique* t=new RenderTechnique(this);
	t->SetName(name);
	AddTechnique(t);
	if (m_activeTechnique == 0)
		m_activeTechnique = t;
	return t;
}
Exemplo n.º 3
0
/**
*  @brief
*    Copy operator
*/
Effect &Effect::operator =(const Effect &cSource)
{
	// Clear effect
	Unload();
	m_sFilename			 = cSource.m_sFilename;
	m_nFlags			 = cSource.GetFlags();
	m_bBlend			 = cSource.GetBlend();
	m_nSelectedTechnique = cSource.GetSelectedTechniqueIndex();
	for (uint32 i=0; i<cSource.m_lstTechnique.GetNumOfElements(); i++)
		*AddTechnique() = *cSource.m_lstTechnique[i];

	/* [TODO] Check me
	for (uint32 i=0; i<cSource.m_lstParameters.GetNumOfElements(); i++) {
		m_lstParameters.Add();
		*m_lstParameters[i] = *cSource.m_lstParameters[i];
	}
	*/

	// Done
	return *this;
}
Exemplo n.º 4
0
EffectTexture::EffectTexture():
    Effect(),
    m_hRasterizerState(), m_hDepthStencilState(), m_hBlendState(), m_hIL(),
    m_hPass(), m_hTechnique()
{
    // Create render states
    m_hRasterizerState.Bind();
    m_hDepthStencilState.Bind();
    m_hBlendState.Bind();

    // Create shaders
    GPUShaderCompilationData hCompilationData;
    hCompilationData.arrMacros = NULL;
    hCompilationData.iFlags = ( GPUSHADER_COMPILE_STRICT | GPUSHADER_COMPILE_PACK_MATRIX_COLUMN_MAJOR | GPUSHADER_COMPILE_OPTIMIZATION_LEVEL1 );
    hCompilationData.iEffectFlags = 0;

    hCompilationData.iTarget = GPUSHADER_VERTEX;
    hCompilationData.strName = "EffectLib.Texture.VS";
    hCompilationData.strEntryPoint = "_VS_Main";

    m_hCompiledVS.Compile( sm_strHLSLCode, sm_iHLSLCodeLength, &hCompilationData );
    m_hVS.Bind( &m_hCompiledVS, false, false );

    hCompilationData.iTarget = GPUSHADER_PIXEL;
    hCompilationData.strName = "EffectLib.Texture.PS";
    hCompilationData.strEntryPoint = "_PS_Main";

    m_hCompiledPS.Compile( sm_strHLSLCode, sm_iHLSLCodeLength, &hCompilationData );
    m_hPS.Bind( &m_hCompiledPS, false, false );

    // Create input layout
    GPUInputFieldDesc hField;
    hField.iSlot = 0;
    hField.iSlotClass = GPUINPUTFIELD_SLOTCLASS_PER_VERTEX;
    hField.iInstanceDataStepRate = 0;

    hField.iType = GPUINPUTFIELD_TYPE_FLOAT4;
    hField.strSemantic = GPUINPUTFIELD_SEMANTIC_POSITION;
    hField.iSemanticIndex = 0;
    m_hIL.PushField( &hField );

    hField.iType = GPUINPUTFIELD_TYPE_FLOAT2;
    hField.strSemantic = GPUINPUTFIELD_SEMANTIC_TEXCOORD;
    hField.iSemanticIndex = 0;
    m_hIL.PushField( &hField );

    m_hIL.Finalize();
    m_hIL.Bind( &m_hCompiledVS );

    // Build effect
    m_hPass.SetRasterizerState( &m_hRasterizerState );
    m_hPass.SetDepthStencilState( &m_hDepthStencilState );
    m_hPass.SetBlendState( &m_hBlendState );

    m_hPass.SetInputLayout( &m_hIL );

    m_hPass.SetVertexShader( &m_hVS );
    m_hPass.SetPixelShader( &m_hPS );

    m_hTechnique.AddPass( &m_hPass );
    AddTechnique( &m_hTechnique );
}