예제 #1
0
파일: effect.cpp 프로젝트: caiwan/Grafkit2
void Grafkit::EffectComposer::Flush(Renderer & render)
{
	// present the result 
	if (m_singlepass)
		return;

	// ezt ki kell majd baszni innen 
	if (m_chainOutput.Invalid()) {
		render.SetRenderTargetView();
	}
	else {
		render.SetRenderTargetView(*m_chainOutput);
		//m_chainOutput->SetRenderTargetView(0);
	}

	render.ApplyRenderTargetView();
	render.BeginScene();

	m_shaderFullscreenQuad->Bind(render);

	size_t fxcount = m_singlepass ? 1 : m_effectChain.size();

	if (fxcount != 0)
		m_shaderCopyScreen->SetShaderResourceView(render, "effectInput", m_pTexRead->GetShaderResourceView());
	else
		m_shaderCopyScreen->SetShaderResourceView(render, "effectInput", m_pTexFront->GetShaderResourceView());

	m_shaderCopyScreen->Bind(render);
	m_fullscreenquad->RenderMesh(render);
	m_shaderCopyScreen->Unbind(render);
	m_shaderFullscreenQuad->Unbind(render);

	// ezt ki kell majd baszni innen 
	if (m_chainOutput.Valid()) {
		render.SetRenderTargetView();
		render.ApplyRenderTargetView();
	}

	this->FlushBuffers();
}
예제 #2
0
파일: effect.cpp 프로젝트: caiwan/Grafkit2
// ---------------------------------------------------------------------------------------------------
void Grafkit::EffectComposer::BindInput(Renderer & render)
{
	if (m_singlepass)
		return;

	size_t count = 1;
	render.SetRenderTargetView(m_pTexFront->GetRenderTargetView(), 0);

	for (auto it = m_inputMap.begin(); it != m_inputMap.end(); it++) {
		if (it->second.Valid()) {
			render.SetRenderTargetView(*(it->second), it->first);
			count++;
		}
	}

	render.ApplyRenderTargetView(count);
}
예제 #3
0
파일: effect.cpp 프로젝트: caiwan/Grafkit2
void Grafkit::EffectComposer::UnbindInput(Renderer & render)
{
	//if (m_singlepass)
	//	return;

	size_t count = 1;
	render.SetRenderTargetView(nullptr, 0);

	for (auto it = m_inputMap.begin(); it != m_inputMap.end(); it++) {
		if (it->second.Valid()) {
			render.SetRenderTargetView(nullptr, it->first);
			count++;
		}
	}

	render.ApplyRenderTargetView(count);
}
예제 #4
0
파일: effect.cpp 프로젝트: caiwan/Grafkit2
void Grafkit::EffectComposer::RenderChain(Renderer & render)
{
	m_shaderFullscreenQuad->Bind(render);

	size_t fxcount = m_singlepass ? 1 : m_effectChain.size();

	bool firstNode = true;
	for (size_t fxid = 0; fxid < fxcount; fxid++)
	{
		EffectPass *fx = m_effectChain[fxid].Get();
		if (!m_singlepass) {
			render.SetRenderTargetView(*m_pTexWrite);
			render.ApplyRenderTargetView(1);
			render.BeginScene();
		}

		if (fx && fx->GetShader().Valid()) {
			if (!m_singlepass) {
				fx->GetShader()->SetShaderResourceView(render, "backBuffer", m_pTexBack->GetShaderResourceView());
				fx->GetShader()->SetShaderResourceView(render, "frontBuffer", m_pTexFront->GetShaderResourceView());

				if (firstNode)
					fx->GetShader()->SetShaderResourceView(render, "effectInput", m_pTexFront->GetShaderResourceView());
				else
					fx->GetShader()->SetShaderResourceView(render, "effectInput", m_pTexRead->GetShaderResourceView());

				firstNode = false;
			}
			fx->GetShader()->SetSamplerSatate(render, "SampleType", m_textureSampler->GetSamplerState());
			fx->GetShader()->SetParam(render, "EffectParams", &m_screen_params);
			fx->BindFx(render);
		}

		m_fullscreenquad->RenderMesh(render);

		if (fx && fx->GetShader().Valid()) {
			fx->UnbindFx(render);
			fx->UnbindOutputs(render);
		}

		this->SwapBuffers();
	}

	m_shaderFullscreenQuad->Unbind(render);
}