diff --git a/include/Nazara/Shader/GlslWriter.hpp b/include/Nazara/Shader/GlslWriter.hpp index bd2c6c7fb..abba48030 100644 --- a/include/Nazara/Shader/GlslWriter.hpp +++ b/include/Nazara/Shader/GlslWriter.hpp @@ -43,6 +43,7 @@ namespace Nz unsigned int glMinorVersion = 0; bool glES = false; bool flipYPosition = false; + bool scaleZPosition = false; }; static const char* GetFlipYUniformName(); diff --git a/src/Nazara/OpenGLRenderer/OpenGLShaderModule.cpp b/src/Nazara/OpenGLRenderer/OpenGLShaderModule.cpp index 8006c6723..b1c896eb4 100644 --- a/src/Nazara/OpenGLRenderer/OpenGLShaderModule.cpp +++ b/src/Nazara/OpenGLRenderer/OpenGLShaderModule.cpp @@ -96,6 +96,7 @@ namespace Nz return context.IsExtensionSupported(std::string(ext)); }; env.flipYPosition = true; + env.normalizeDepth = true; GlslWriter writer; writer.SetEnv(env); diff --git a/src/Nazara/Shader/GlslWriter.cpp b/src/Nazara/Shader/GlslWriter.cpp index d61814422..65c2d684c 100644 --- a/src/Nazara/Shader/GlslWriter.cpp +++ b/src/Nazara/Shader/GlslWriter.cpp @@ -1146,13 +1146,17 @@ namespace Nz for (const auto& [name, targetName] : m_currentState->outputFields) { - bool isOutputPosition = (m_currentState->stage == ShaderStageType::Vertex && m_environment.flipYPosition && targetName == "gl_Position"); + bool isOutputPosition = (m_currentState->stage == ShaderStageType::Vertex && targetName == "gl_Position"); - Append(targetName, " = ", outputStructVarName, ".", name); + AppendLine(targetName, " = ", outputStructVarName, ".", name, ";"); if (isOutputPosition) - Append(" * vec4(1.0, ", s_flipYUniformName, ", 1.0, 1.0)"); + { + if (m_environment.flipYPosition) + AppendLine(targetName, ".y *= ", s_flipYUniformName, ";"); - AppendLine(";"); + if (m_environment.scaleZPosition) + AppendLine(targetName, ".z = ", targetName, ".z * 2.0 - 1.0;"); + } } Append("return;"); //< TODO: Don't return if it's the last statement of the function