diff --git a/panda/src/pgraphnodes/shaderGenerator.cxx b/panda/src/pgraphnodes/shaderGenerator.cxx index 26aaabdd98..02d46ded22 100644 --- a/panda/src/pgraphnodes/shaderGenerator.cxx +++ b/panda/src/pgraphnodes/shaderGenerator.cxx @@ -662,6 +662,10 @@ synthesize_shader(const RenderState *rs) { text << "//Cg\n"; + text << "/* Generated shader for render state " << rs << ":\n"; + rs->write(text, 2); + text << "*/\n"; + text << "void vshader(\n"; const TextureAttrib *texture = DCAST(TextureAttrib, rs->get_attrib_def(TextureAttrib::get_class_slot())); const TexGenAttrib *tex_gen = DCAST(TexGenAttrib, rs->get_attrib_def(TexGenAttrib::get_class_slot())); @@ -1346,15 +1350,31 @@ synthesize_shader(const RenderState *rs) { text << "\t // Shader includes alpha test:\n"; double ref = alpha_test->get_reference_alpha(); switch (alpha_test->get_mode()) { - case RenderAttrib::M_never: text<<"\t discard;\n"; - case RenderAttrib::M_less: text<<"\t if (result.a >= "< "<= " << ref << ") discard;\n"; + break; + case RenderAttrib::M_equal: + text << "\t if (result.a != " << ref << ") discard;\n"; + break; + case RenderAttrib::M_less_equal: + text << "\t if (result.a > " << ref << ") discard;\n"; + break; + case RenderAttrib::M_greater: + text << "\t if (result.a <= " << ref << ") discard;\n"; + break; + case RenderAttrib::M_not_equal: + text << "\t if (result.a == " << ref << ") discard;\n"; + break; + case RenderAttrib::M_greater_equal: + text << "\t if (result.a < " << ref << ") discard;\n"; + break; + case RenderAttrib::M_none: + case RenderAttrib::M_always: + default: + break; } }