OpenGLRenderer: Fix Y flipping for FBOs

This commit is contained in:
Jérôme Leclercq
2021-02-20 19:23:29 +01:00
parent fb3468854f
commit 311cfeaf3c
8 changed files with 83 additions and 9 deletions

View File

@@ -7,6 +7,7 @@
#include <Nazara/OpenGLRenderer/Utils.hpp>
#include <Nazara/OpenGLRenderer/OpenGLRenderPipelineLayout.hpp>
#include <Nazara/OpenGLRenderer/OpenGLShaderStage.hpp>
#include <Nazara/Shader/GlslWriter.hpp>
#include <cassert>
#include <stdexcept>
#include <Nazara/OpenGLRenderer/Debug.hpp>
@@ -14,7 +15,8 @@
namespace Nz
{
OpenGLRenderPipeline::OpenGLRenderPipeline(OpenGLDevice& device, RenderPipelineInfo pipelineInfo) :
m_pipelineInfo(std::move(pipelineInfo))
m_pipelineInfo(std::move(pipelineInfo)),
m_isYFlipped(false)
{
if (!m_program.Create(device))
throw std::runtime_error("failed to create program");
@@ -30,6 +32,10 @@ namespace Nz
std::string errLog;
if (!m_program.GetLinkStatus(&errLog))
throw std::runtime_error("failed to link program: " + errLog);
m_flipYUniformLocation = m_program.GetUniformLocation(GlslWriter::GetFlipYUniformName());
if (m_flipYUniformLocation != -1)
m_program.Uniform(m_flipYUniformLocation, 1.f);
}
void OpenGLRenderPipeline::Apply(const GL::Context& context) const
@@ -37,4 +43,13 @@ namespace Nz
context.UpdateStates(m_pipelineInfo);
context.BindProgram(m_program.GetObjectId()); //< Bind program after states
}
void OpenGLRenderPipeline::FlipY(bool shouldFlipY) const
{
if (m_isYFlipped != shouldFlipY)
{
m_program.Uniform(m_flipYUniformLocation, (shouldFlipY) ? -1.f : 1.f);
m_isYFlipped = shouldFlipY;
}
}
}