Fixing alpha testing.

This commit is contained in:
Ben Vanik
2015-03-21 03:21:55 -07:00
parent 704077d543
commit 494e918496
3 changed files with 13 additions and 11 deletions

View File

@@ -253,16 +253,18 @@ bool GL4Shader::PreparePixelShader(
"layout(location = 0) out vec4 oC[4];\n"
"void processFragment(const in StateData state);\n"
"void applyAlphaTest(int alpha_func, float alpha_ref) {\n"
" bool passes = false;\n"
" switch (alpha_func) {\n"
" case 0: discard;\n"
" case 1: if (oC[0].a < alpha_ref) discard; break;\n"
" case 2: if (oC[0].a == alpha_ref) discard; break;\n"
" case 3: if (oC[0].a <= alpha_ref) discard; break;\n"
" case 4: if (oC[0].a > alpha_ref) discard; break;\n"
" case 5: if (oC[0].a != alpha_ref) discard; break;\n"
" case 6: if (oC[0].a >= alpha_ref) discard; break;\n"
" case 7: break;\n"
" case 0: break;\n"
" case 1: if (oC[0].a < alpha_ref) passes = true; break;\n"
" case 2: if (oC[0].a == alpha_ref) passes = true; break;\n"
" case 3: if (oC[0].a <= alpha_ref) passes = true; break;\n"
" case 4: if (oC[0].a > alpha_ref) passes = true; break;\n"
" case 5: if (oC[0].a != alpha_ref) passes = true; break;\n"
" case 6: if (oC[0].a >= alpha_ref) passes = true; break;\n"
" case 7: passes = true; break;\n"
" };\n"
" if (!passes) discard;\n"
"}\n"
"void main() {\n" +
" const StateData state = states[draw_id];\n"