From c02b3822623372d9598d38da4dd66f8f7e8a090c Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Tue, 16 Jul 2024 00:58:52 +0300 Subject: [PATCH] Perform alpha test with integers instead of floats --- src/core/PICA/shader_gen_glsl.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/core/PICA/shader_gen_glsl.cpp b/src/core/PICA/shader_gen_glsl.cpp index 556c0794..d4a4bf8e 100644 --- a/src/core/PICA/shader_gen_glsl.cpp +++ b/src/core/PICA/shader_gen_glsl.cpp @@ -398,17 +398,17 @@ void FragmentGenerator::applyAlphaTest(std::string& shader, const PICARegs& regs return; } - shader += "float alphaReferenceFloat = float(alphaReference) / 255.0;\n"; - shader += "if (!("; + shader += "int testingAlpha = int(combinerOutput.a * 255.0);\n"; + shader += "if ("; switch (function) { - case CompareFunction::Never: shader += "false"; break; - case CompareFunction::Always: shader += "true"; break; - case CompareFunction::Equal: shader += "combinerOutput.a == alphaReferenceFloat"; break; - case CompareFunction::NotEqual: shader += "combinerOutput.a != alphaReferenceFloat"; break; - case CompareFunction::Less: shader += "combinerOutput.a < alphaReferenceFloat"; break; - case CompareFunction::LessOrEqual: shader += "combinerOutput.a <= alphaReferenceFloat"; break; - case CompareFunction::Greater: shader += "combinerOutput.a > alphaReferenceFloat"; break; - case CompareFunction::GreaterOrEqual: shader += "combinerOutput.a >= alphaReferenceFloat"; break; + case CompareFunction::Never: shader += "true"; break; + case CompareFunction::Always: shader += "false"; break; + case CompareFunction::Equal: shader += "testingAlpha != alphaReference"; break; + case CompareFunction::NotEqual: shader += "testingAlpha == alphaReference"; break; + case CompareFunction::Less: shader += "testingAlpha >= alphaReference"; break; + case CompareFunction::LessOrEqual: shader += "testingAlpha > alphaReference"; break; + case CompareFunction::Greater: shader += "testingAlpha <= alphaReference"; break; + case CompareFunction::GreaterOrEqual: shader += "testingAlpha < alphaReference"; break; default: Helpers::warn("Unimplemented alpha test function"); @@ -416,5 +416,5 @@ void FragmentGenerator::applyAlphaTest(std::string& shader, const PICARegs& regs break; } - shader += ")) { discard; }\n"; + shader += ") { discard; }\n"; }