GLSL shader gen: Add alpha test (...half of it I guess)
This commit is contained in:
@@ -144,6 +144,8 @@ std::string FragmentGenerator::generate(const PICARegs& regs) {
|
||||
compileTEV(ret, i, regs);
|
||||
}
|
||||
|
||||
applyAlphaTest(ret, regs);
|
||||
|
||||
ret += "fragColor = combinerOutput;\n";
|
||||
ret += "}"; // End of main function
|
||||
ret += "\n\n\n\n\n\n\n\n\n\n\n\n\n";
|
||||
@@ -353,3 +355,25 @@ void FragmentGenerator::getAlphaOperation(std::string& shader, TexEnvConfig::Ope
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void FragmentGenerator::applyAlphaTest(std::string& shader, const PICARegs& regs) {
|
||||
const u32 alphaConfig = regs[InternalRegs::AlphaTestConfig];
|
||||
// Alpha test disabled
|
||||
if (Helpers::getBit<0>(alphaConfig) == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
const auto function = static_cast<CompareFunction>(Helpers::getBits<4, 3>(alphaConfig));
|
||||
|
||||
shader += "if (";
|
||||
switch (function) {
|
||||
case CompareFunction::Never: shader += "true"; break;
|
||||
case CompareFunction::Always: shader += "false"; break;
|
||||
default:
|
||||
Helpers::warn("Unimplemented alpha test function");
|
||||
shader += "false";
|
||||
break;
|
||||
}
|
||||
|
||||
shader += ") { discard; }\n";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user