Beispiel #1
0
/**
*  @brief
*    Constructor
*/
EffectManager::EffectManager(RendererContext &cRendererContext) :
	m_pRendererContext(&cRendererContext),
	m_pDefault(new EffectHandler())
{
	PL_LOG(Debug, "Create effect manager")

	// Set manager name
	SetManagerName("Effect manager");

	// Unload unused resources, please
	SetUnloadUnused(true);

	// Create the standard effect
	Effect *pFX = CreateResource(Default);
	if (pFX) {
		// Create the effect
		EffectTechnique *pEffectTechnique = pFX->AddTechnique();
		if (pEffectTechnique) {
			pEffectTechnique->AddPass();
			pFX->SelectTechnique(0);
		}

		// Setup effect
		pFX->SetProtected(true);
		m_pDefault->SetResource(pFX);
		SetStandard(pFX);
	}
}
Beispiel #2
0
/**
*  @brief
*    Adds a technique
*/
EffectTechnique *Effect::AddTechnique(int nTechnique)
{
	EffectTechnique *pTechnique = new EffectTechnique(*this);
	pTechnique->SetName(String("Technique_") + m_lstTechnique.GetNumOfElements());
	m_lstTechnique.AddAtIndex(pTechnique, nTechnique);
	return pTechnique;
}
Beispiel #3
0
void IRenderBatch::CustomDraw(IRenderQueue& renderQueue, RenderingFlags renderingFlags /*= RenderingFlags::None*/)
{
	RETURN_IF_TRUE(IsEmpty());

	EffectTechnique* technique = mEffect->CurrentTechniqueGroup()->CurrentTechnique();
	EffectTechnique::PassCollectionType& renderPasses = technique->RenderPasses();
	RenderingStatics::Instance().CountRenderPass(renderPasses.Count());
	RenderingStatics::Instance().CountMaterial(mMaterial);
	RenderingStatics::Instance().CountMaterialTextures(mMaterial);

	FOR_EACH_COLLECTION(i, renderPasses)
	{
		IRenderPass* renderPass = *i;
		RenderingContext::Instance().ApplyRenderPass(renderPass);
		RenderingContext::Instance().ApplyMaterial(mMaterial);
		RenderingContext::Instance().ApplyState(mStateTreeNode);

		RenderingContext::Instance().ApplyBatch(this);
		RenderingContext::Instance().ValidateBeforeDraw();

		Draw(renderQueue, renderingFlags);
		RenderingContext::Instance().RestoreBatch();

		RenderingContext::Instance().RestoreState();
		RenderingContext::Instance().RestoreMaterial();
		RenderingContext::Instance().RestoreRenderPass();
	}
Beispiel #4
0
void EffectRenderGroup::Draw(IRenderQueue& renderQueue, RenderingFlags renderingFlags/*=RenderingFlags::None*/)
{
	EffectTechnique* technique = mEffect->CurrentTechniqueGroup()->CurrentTechnique();
	EffectTechnique::PassCollectionType& renderPasses = technique->RenderPasses();
	RenderingStatics::Instance().CountRenderPass(renderPasses.Count());

	FOR_EACH_COLLECTION(i, renderPasses)
	{
		IRenderPass* renderPass = *i;
		RenderingContext::Instance().ApplyRenderPass(renderPass);
		bool isContinue = renderPass->Draw(renderQueue, renderingFlags);
		if (isContinue)
		{
			FOR_EACH_COLLECTION(j, mGroups)
			{
				MaterialRenderGroup* materialRenderGroup = *j;
				materialRenderGroup->Draw(renderQueue, renderingFlags);
			}
		}
Beispiel #5
0
void Direct3D11::renderText()
{
	if ( ! font_ )
	{
		return;
	}

	getSprite()->begin();

	EffectTechnique* technique = effect_->get_technique( "|sprite" );

	for ( const auto& pass : technique->get_pass_list() )
	{
		pass->apply();

		Sprite::Rect dst_rect( 0, 0, get_width(), get_height() );
		getSprite()->draw( dst_rect, text_view_.get() );
	}

	getSprite()->end();
}
Beispiel #6
0
void EffectRenderGroup::Draw(IRenderQueue& renderQueue, RenderingFlags renderingFlags/*=RenderingFlags::None*/)
{
	EffectTechnique* technique = mEffect->CurrentTechniqueGroup()->CurrentTechnique();
	EffectTechnique::PassCollectionType& renderPasses = technique->RenderPasses();
	RenderingStatics::Instance().CountRenderPass(renderPasses.Count());

	for (auto renderPass : renderPasses)
	{
		RenderingContext::Instance().ApplyRenderPass(renderPass);
		bool isContinue = renderPass->Draw(renderQueue, renderingFlags);
		if (isContinue)
		{
			for (auto materialRenderGroup : mGroups)
			{
				materialRenderGroup->Draw(renderQueue, renderingFlags);
			}
		}

		RenderingContext::Instance().RestoreRenderPass();
		BREAK_IF_FALSE(isContinue);
	}
}
/**
*  @brief
*    Constructor
*/
SPMultiViewFixedFunctions::SPMultiViewFixedFunctions(Renderer &cRenderer) : SPMultiView(cRenderer)
{
	// Get the renderer context
	RendererContext &cRendererContext = GetRenderer().GetRendererContext();

	// Create and set a special material & effect
	Material *pMaterial = cRendererContext.GetMaterialManager().Create("MyTeapot");
	if (pMaterial) {
		Effect *pFX = cRendererContext.GetEffectManager().Create("MyTeapot");
		if (pFX) {
			EffectTechnique *pTechnique = pFX->AddTechnique();
			if (pTechnique) {
				pFX->SelectTechnique(0);
				EffectPass *pEffectPass = pTechnique->AddPass();
				if (pEffectPass)
					pEffectPass->GetFixedFunctionsRenderStates().SetLighting(true);
			}
			pMaterial->SetEffect(pFX);
		}
		m_pMeshHandlerSphere->SetMaterial(0, pMaterial);
		m_pMeshHandlerTorus ->SetMaterial(0, pMaterial);
		m_pMeshHandlerCube  ->SetMaterial(0, pMaterial);
	}
}