Add depthMinusOneToOne to specify GL's ridiculous behavior

This commit is contained in:
Henrik Rydgård
2026-05-14 22:13:04 +02:00
parent 7afd3d8ea2
commit 8dc3e8ed14
3 changed files with 8 additions and 0 deletions
+4
View File
@@ -50,6 +50,7 @@ void ShaderLanguageDesc::Init(ShaderLanguage lang) {
lastFragData = nullptr;
gles = false;
forceMatrix4x4 = true;
depthMinusOneToOne = true;
break;
case GLSL_3xx:
// Just used in the shader test.
@@ -67,6 +68,7 @@ void ShaderLanguageDesc::Init(ShaderLanguage lang) {
gles = true;
forceMatrix4x4 = true;
glslES30 = true;
depthMinusOneToOne = true;
break;
case GLSL_VULKAN:
fragColor0 = "fragColor0";
@@ -86,6 +88,7 @@ void ShaderLanguageDesc::Init(ShaderLanguage lang) {
forceMatrix4x4 = false;
coefsFromBuffers = true;
vertexIndex = true;
depthMinusOneToOne = false;
break;
case HLSL_D3D11:
fragColor0 = "outfragment.target";
@@ -107,6 +110,7 @@ void ShaderLanguageDesc::Init(ShaderLanguage lang) {
coefsFromBuffers = true;
vsOutPrefix = "Out.";
viewportYSign = "-";
depthMinusOneToOne = false;
break;
}
}
+1
View File
@@ -57,6 +57,7 @@ struct ShaderLanguageDesc {
const char *vsOutPrefix = "";
const char *viewportYSign = "";
bool depthMinusOneToOne = false;
bool vertexIndex = false;
bool glslES30 = false; // really glslES30Features. TODO: Clean this up.
bool bitwiseOps = false;
+3
View File
@@ -361,6 +361,9 @@ void ShaderWriter::EndVSMain(Slice<VaryingDef> varyings) {
if (strlen(lang_.viewportYSign)) {
F(" gl_Position.y *= %s1.0;\n", lang_.viewportYSign);
}
if (lang_.depthMinusOneToOne) {
F(" gl_Position.z = gl_Position.z * 2.0 - gl_Position.w;\n"); // homogenous math... looks confusing.
}
C(" vs_out.pos = gl_Position;\n");
for (auto &varying : varyings) {
F(" vs_out.%s = %s;\n", varying.name, varying.name);