You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
		
		
		
		
		
			
		
			
				
					
					
						
							147 lines
						
					
					
						
							5.4 KiB
						
					
					
				
			
		
		
	
	
							147 lines
						
					
					
						
							5.4 KiB
						
					
					
				|  | |
| __author__ = "eloraiby" | |
| __date__ = "$5-Sep-2010 9:35:29 PM$" | |
| 
 | |
| atomic_types = ["unsigned char", "unsigned short", "unsigned int", | |
| 		 "signed char", "signed short", "signed int", | |
| 		 "float", "double"] | |
| 
 | |
| 
 | |
| glsl_vector_types = ["tvec2", "tvec3", "tvec4"] | |
| glsl_matrix_types = ["tmat2x2", "tmat2x3", "tmat2x4", | |
| 				"tmat3x2", "tmat3x3", "tmat3x4", | |
| 				"tmat4x2", "tmat4x3", "tmat4x4"] | |
| 
 | |
| glsl_matrix_member_operators = ["+=", "-=", "*=", "/="] | |
| glsl_matrix_out_op_dic = { | |
| 						"tmat2x2":"tmat2x2", | |
| 						"tmat2x3":"tmat3x3", | |
| 						"tmat2x4":"tmat4x4", | |
| 						"tmat3x2":"tmat2x2", | |
| 						"tmat3x3":"tmat3x3", | |
| 						"tmat3x4":"tmat4x4", | |
| 						"tmat4x2":"tmat2x2", | |
| 						"tmat4x3":"tmat3x3", | |
| 						"tmat4x4":"tmat4x4", | |
| 						} | |
| 
 | |
| glsl_matrix_right_op_dic = { | |
| 						"tmat2x2":"tmat2x2", | |
| 						"tmat2x3":"tmat3x2", | |
| 						"tmat2x4":"tmat4x2", | |
| 						"tmat3x2":"tmat2x3", | |
| 						"tmat3x3":"tmat3x3", | |
| 						"tmat3x4":"tmat4x3", | |
| 						"tmat4x2":"tmat2x4", | |
| 						"tmat4x3":"tmat3x4", | |
| 						"tmat4x4":"tmat4x4", | |
| 						} | |
| def gen_vectors(): | |
| 	for v in glsl_vector_types: | |
| 		print | |
| 		print "//" | |
| 		print "// " + v + " type explicit instantiation" | |
| 		print "//" | |
| 		for a in atomic_types: | |
| 			print "template struct " + v + "<" + a + ">;" | |
| 		print | |
| 
 | |
| def gen_matrices_member_operators(): | |
| 	for m in glsl_matrix_types: | |
| 		print | |
| 		print "//" | |
| 		print "// " + m + " type member operator instantiation" | |
| 		print "//" | |
| 		for a in atomic_types: | |
| 			#print "template " + m + "<" + a + ">::col_type;" | |
| 			#print "template " + m + "<" + a + ">::row_type;" | |
| 			 | |
| 			for c in atomic_types: | |
| 				if a != c: | |
| 					print "template " + m + "<" + a + ">::" + m + "(" + m + "<" + c + "> const &m);"   | |
| 				 | |
| 			"""for b in glsl_matrix_member_operators: | |
| 				for cm in atomic_types: | |
| 					print "template " + m + "<" + a + ">& " + m + "<" + a + ">::operator " + b + "( " + m + "<" + cm + "> const &m);" | |
| 					print "template " + m + "<" + a + ">& " + m + "<" + a + ">::operator " + b + "( " + cm + " const &s);" | |
| 			 | |
|  			""" | |
|  			print | |
| 			print "//" | |
| 			print "// Binary operators" | |
| 			print "//" | |
| 			print "template " + m + "<" + a + "> operator + (" + m + "<" + a + "> const &m, " + a + " const &s);" | |
| 			if m == "tmat2x2" or m == "tmat3x3" or m == "tmat4x4": | |
| 				print "template " + m + "<" + a + "> operator + (" + a + " const &s, " + m + "<" + a + "> const &m);" | |
| 			print "template " + m + "<" + a + "> operator + (" + m + "<" + a + "> const &m1, " + m + "<" + a + "> const &m2);" | |
| 			 | |
| 			print "template " + m + "<" + a + "> operator - (" + m + "<" + a + "> const &m, " + a + " const &s);" | |
| 			if m == "tmat2x2" or m == "tmat3x3" or m == "tmat4x4": | |
| 				print "template " + m + "<" + a + "> operator - (" + a + " const &s, " + m + "<" + a + "> const &m);" | |
| 			print "template " + m + "<" + a + "> operator - (" + m + "<" + a + "> const &m1, " + m + "<" + a + "> const &m2);" | |
| 			 | |
| 			out_op = glsl_matrix_out_op_dic[m] | |
| 			right_op = glsl_matrix_right_op_dic[m] | |
| 			 | |
| 			print "template " + m + "<" + a + "> operator * (" + m + "<" + a + "> const &m, " + a + " const &s);" | |
| 			if m == "tmat2x2" or m == "tmat3x3" or m == "tmat4x4": | |
| 				print "template " + m + "<" + a + "> operator * ( " + a + " const &s, " + m + "<" + a + "> const &m);" | |
| 			print "template " + out_op + "<" + a + "> operator * (" + m + "<" + a + "> const &m1, " + right_op + "<" + a + "> const &m2);" | |
| 			print "template " + m + "<" + a + ">::col_type" + " operator * ( " + m + "<" + a + "> const &m, " + m + "<" + a + ">::row_type" + " const &s);" | |
| 			print "template " + m + "<" + a + ">::row_type" + " operator * ( " + m + "<" + a + ">::col_type const &s, " + m + "<" + a + "> const &m);" | |
| 			 | |
| 			print "template " + m + "<" + a + "> operator / (" + m + "<" + a + "> const &m, " + a + " const &s);" | |
| 			#print "template " + right_op + "<" + a + "> operator / ( " + a + " const &s, " + m + "<" + a + "> const &m);" | |
| 			 | |
| 			if m == "tmat2x2" or m == "tmat3x3" or m == "tmat4x4": | |
| 				print "template " + m + "<" + a + "> operator / ( " + a + " const &s, " + m + "<" + a + "> const &m);" | |
| 				#print "template " + m + "<" + a + "> operator / (" + m + "<" + a + "> const &m1, " + m + "<" + a + "> const &m2);" | |
| 			else: | |
| 				print "template " + m + "<" + a + "> operator / ( " + a + " const &s, " + m + "<" + a + "> const &m);" | |
| 
 | |
| 			#print "template " + m + "<" + a + ">" + " operator / ( " + m + "<" + a + "> const &m, " + a + " const &s);" | |
| 			#print "template " + m + "<" + a + ">" + " operator / ( " + a + " const &s, " + m + "<" + a + "> const &m);" | |
| 			 | |
| 			print | |
| 			print "//" | |
| 			print "// Unary constant operators" | |
| 			print "//" | |
| 			print "template " + m + "<" + a + "> const operator -(" + m + "<" + a + "> const &m);" | |
| 			print "template " + m + "<" + a + "> const operator --(" + m + "<" + a + "> const &m, int);" | |
| 			print "template " + m + "<" + a + "> const operator ++(" + m + "<" + a + "> const &m, int);" | |
| 		 | |
| 		print | |
| 
 | |
| def gen_matrices(): | |
| 	for m in glsl_matrix_types: | |
| 		print | |
| 		print "//" | |
| 		print "// " + m + " type explicit instantiation" | |
| 		print "//" | |
| 		for a in atomic_types: | |
| 			print "template struct " + m + "<" + a + ">;" | |
| 		print | |
| 		 | |
| if __name__ == "__main__": | |
| 	print "//" | |
| 	print "// GLM External templates generator script version 0.1 for GLM core" | |
| 	print "//" | |
| 	print "// atomic types:", atomic_types | |
| 	print "// GLSL vector types:", glsl_vector_types; | |
| 	print "// GLSL matrix types:", glsl_matrix_types; | |
| 	print "//" | |
| 	print | |
| 	print "#include <glm/glm.hpp>" | |
| 	print | |
| 	print "namespace glm {" | |
| 	print "namespace detail {" | |
| 	 | |
| 
 | |
| 	gen_vectors() | |
| 	gen_matrices() | |
| 	gen_matrices_member_operators() | |
| 
 | |
| 	print "} // namespace detail" | |
| 	print "} // namespace glm" | |
| 	 | |
| 	
 | |
| 
 |