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(); }
// --------------------------------------------------------------------------------------------------- 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); }
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); }
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); }