Преглед изворни кода

Dump shader programs on compile errors

RealBadAngel пре 8 година
родитељ
комит
f253ff9f1a
2 измењених фајлова са 26 додато и 0 уклоњено
  1. 23 0
      src/shader.cpp
  2. 3 0
      src/shader.h

+ 23 - 0
src/shader.cpp

@@ -808,6 +808,9 @@ ShaderInfo generate_shader(std::string name, u8 material_type, u8 drawtype,
 					"failed to generate \""<<name<<"\", "
 					"addHighLevelShaderMaterial failed."
 					<<std::endl;
+			dumpShaderProgram(warningstream, "Vertex", vertex_program);
+			dumpShaderProgram(warningstream, "Pixel", pixel_program);
+			dumpShaderProgram(warningstream, "Geometry", geometry_program);
 			return shaderinfo;
 		}
 	}
@@ -826,6 +829,8 @@ ShaderInfo generate_shader(std::string name, u8 material_type, u8 drawtype,
 					"failed to generate \""<<name<<"\", "
 					"addShaderMaterial failed."
 					<<std::endl;
+			dumpShaderProgram(warningstream, "Vertex", vertex_program);
+			dumpShaderProgram(warningstream,"Pixel", pixel_program);
 			return shaderinfo;
 		}
 	}
@@ -871,3 +876,21 @@ void load_shaders(std::string name, SourceShaderCache *sourcecache,
 	}
 
 }
+
+void dumpShaderProgram(std::ostream &output_stream,
+		const std::string &program_type, const std::string &program)
+{
+	output_stream << program_type << " shader program:" << std::endl <<
+		"----------------------------------" << std::endl;
+	size_t pos = 0;
+	size_t prev = 0;
+	s16 line = 1;
+	while ((pos = program.find("\n", prev)) != std::string::npos) {
+		output_stream << line++ << ": "<< program.substr(prev, pos - prev) <<
+			std::endl;
+		prev = pos + 1;
+	}
+	output_stream << line << ": " << program.substr(prev) << std::endl <<
+		"End of " << program_type << " shader program." << std::endl <<
+		" " << std::endl;
+}

+ 3 - 0
src/shader.h

@@ -110,4 +110,7 @@ public:
 
 IWritableShaderSource* createShaderSource(IrrlichtDevice *device);
 
+void dumpShaderProgram(std::ostream &output_stream,
+	const std::string &program_type, const std::string &program);
+
 #endif