write render state info to generated shader as comment. also fix a switch with missing breaks

This commit is contained in:
rdb 2013-02-12 15:28:17 +00:00
parent f9b4dad6f9
commit 6fde10f9d1

View File

@ -662,6 +662,10 @@ synthesize_shader(const RenderState *rs) {
text << "//Cg\n"; text << "//Cg\n";
text << "/* Generated shader for render state " << rs << ":\n";
rs->write(text, 2);
text << "*/\n";
text << "void vshader(\n"; text << "void vshader(\n";
const TextureAttrib *texture = DCAST(TextureAttrib, rs->get_attrib_def(TextureAttrib::get_class_slot())); 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())); 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"; text << "\t // Shader includes alpha test:\n";
double ref = alpha_test->get_reference_alpha(); double ref = alpha_test->get_reference_alpha();
switch (alpha_test->get_mode()) { switch (alpha_test->get_mode()) {
case RenderAttrib::M_never: text<<"\t discard;\n"; case RenderAttrib::M_never:
case RenderAttrib::M_less: text<<"\t if (result.a >= "<<ref<<") discard;\n"; text << "\t discard;\n";
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"; case RenderAttrib::M_less:
case RenderAttrib::M_greater: text<<"\t if (result.a <= "<<ref<<") discard;\n"; text << "\t if (result.a >= " << ref << ") discard;\n";
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"; case RenderAttrib::M_equal:
case RenderAttrib::M_none: break; text << "\t if (result.a != " << ref << ") discard;\n";
case RenderAttrib::M_always: break; 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;
} }
} }