Parcourir la source

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

rdb il y a 13 ans
Parent
commit
6fde10f9d1
1 fichiers modifiés avec 29 ajouts et 9 suppressions
  1. 29 9
      panda/src/pgraphnodes/shaderGenerator.cxx

+ 29 - 9
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";
-    case RenderAttrib::M_equal:          text<<"\t if (result.a != "<<ref<<") discard;\n";
-    case RenderAttrib::M_less_equal:     text<<"\t if (result.a >  "<<ref<<") discard;\n";
-    case RenderAttrib::M_greater:        text<<"\t if (result.a <= "<<ref<<") discard;\n";
-    case RenderAttrib::M_not_equal:      text<<"\t if (result.a == "<<ref<<") discard;\n";
-    case RenderAttrib::M_greater_equal:  text<<"\t if (result.a <  "<<ref<<") discard;\n";
-    case RenderAttrib::M_none: break;
-    case RenderAttrib::M_always: break;
+    case RenderAttrib::M_never:
+      text << "\t discard;\n";
+      break;
+    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;
     }
   }