gen_external_templates.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. __author__ = "eloraiby"
  2. __date__ = "$5-Sep-2010 9:35:29 PM$"
  3. atomic_types = ["unsigned char", "unsigned short", "unsigned int",
  4. "signed char", "signed short", "signed int",
  5. "float", "double"]
  6. glsl_vector_types = ["tvec2", "tvec3", "tvec4"]
  7. glsl_matrix_types = ["tmat2x2", "tmat2x3", "tmat2x4",
  8. "tmat3x2", "tmat3x3", "tmat3x4",
  9. "tmat4x2", "tmat4x3", "tmat4x4"]
  10. glsl_matrix_member_operators = ["+=", "-=", "*=", "/="]
  11. glsl_matrix_out_op_dic = {
  12. "tmat2x2":"tmat2x2",
  13. "tmat2x3":"tmat3x3",
  14. "tmat2x4":"tmat4x4",
  15. "tmat3x2":"tmat2x2",
  16. "tmat3x3":"tmat3x3",
  17. "tmat3x4":"tmat4x4",
  18. "tmat4x2":"tmat2x2",
  19. "tmat4x3":"tmat3x3",
  20. "tmat4x4":"tmat4x4",
  21. }
  22. glsl_matrix_right_op_dic = {
  23. "tmat2x2":"tmat2x2",
  24. "tmat2x3":"tmat3x2",
  25. "tmat2x4":"tmat4x2",
  26. "tmat3x2":"tmat2x3",
  27. "tmat3x3":"tmat3x3",
  28. "tmat3x4":"tmat4x3",
  29. "tmat4x2":"tmat2x4",
  30. "tmat4x3":"tmat3x4",
  31. "tmat4x4":"tmat4x4",
  32. }
  33. def gen_vectors():
  34. for v in glsl_vector_types:
  35. print
  36. print "//"
  37. print "// " + v + " type explicit instantiation"
  38. print "//"
  39. for a in atomic_types:
  40. print "template struct " + v + "<" + a + ">;"
  41. print
  42. def gen_matrices_member_operators():
  43. for m in glsl_matrix_types:
  44. print
  45. print "//"
  46. print "// " + m + " type member operator instantiation"
  47. print "//"
  48. for a in atomic_types:
  49. #print "template " + m + "<" + a + ">::col_type;"
  50. #print "template " + m + "<" + a + ">::row_type;"
  51. for c in atomic_types:
  52. if a != c:
  53. print "template " + m + "<" + a + ">::" + m + "(" + m + "<" + c + "> const &m);"
  54. """for b in glsl_matrix_member_operators:
  55. for cm in atomic_types:
  56. print "template " + m + "<" + a + ">& " + m + "<" + a + ">::operator " + b + "( " + m + "<" + cm + "> const &m);"
  57. print "template " + m + "<" + a + ">& " + m + "<" + a + ">::operator " + b + "( " + cm + " const &s);"
  58. """
  59. print
  60. print "//"
  61. print "// Binary operators"
  62. print "//"
  63. print "template " + m + "<" + a + "> operator + (" + m + "<" + a + "> const &m, " + a + " const &s);"
  64. if m == "tmat2x2" or m == "tmat3x3" or m == "tmat4x4":
  65. print "template " + m + "<" + a + "> operator + (" + a + " const &s, " + m + "<" + a + "> const &m);"
  66. print "template " + m + "<" + a + "> operator + (" + m + "<" + a + "> const &m1, " + m + "<" + a + "> const &m2);"
  67. print "template " + m + "<" + a + "> operator - (" + m + "<" + a + "> const &m, " + a + " const &s);"
  68. if m == "tmat2x2" or m == "tmat3x3" or m == "tmat4x4":
  69. print "template " + m + "<" + a + "> operator - (" + a + " const &s, " + m + "<" + a + "> const &m);"
  70. print "template " + m + "<" + a + "> operator - (" + m + "<" + a + "> const &m1, " + m + "<" + a + "> const &m2);"
  71. out_op = glsl_matrix_out_op_dic[m]
  72. right_op = glsl_matrix_right_op_dic[m]
  73. print "template " + m + "<" + a + "> operator * (" + m + "<" + a + "> const &m, " + a + " const &s);"
  74. if m == "tmat2x2" or m == "tmat3x3" or m == "tmat4x4":
  75. print "template " + m + "<" + a + "> operator * ( " + a + " const &s, " + m + "<" + a + "> const &m);"
  76. print "template " + out_op + "<" + a + "> operator * (" + m + "<" + a + "> const &m1, " + right_op + "<" + a + "> const &m2);"
  77. print "template " + m + "<" + a + ">::col_type" + " operator * ( " + m + "<" + a + "> const &m, " + m + "<" + a + ">::row_type" + " const &s);"
  78. print "template " + m + "<" + a + ">::row_type" + " operator * ( " + m + "<" + a + ">::col_type const &s, " + m + "<" + a + "> const &m);"
  79. print "template " + m + "<" + a + "> operator / (" + m + "<" + a + "> const &m, " + a + " const &s);"
  80. #print "template " + right_op + "<" + a + "> operator / ( " + a + " const &s, " + m + "<" + a + "> const &m);"
  81. if m == "tmat2x2" or m == "tmat3x3" or m == "tmat4x4":
  82. print "template " + m + "<" + a + "> operator / ( " + a + " const &s, " + m + "<" + a + "> const &m);"
  83. #print "template " + m + "<" + a + "> operator / (" + m + "<" + a + "> const &m1, " + m + "<" + a + "> const &m2);"
  84. else:
  85. print "template " + m + "<" + a + "> operator / ( " + a + " const &s, " + m + "<" + a + "> const &m);"
  86. #print "template " + m + "<" + a + ">" + " operator / ( " + m + "<" + a + "> const &m, " + a + " const &s);"
  87. #print "template " + m + "<" + a + ">" + " operator / ( " + a + " const &s, " + m + "<" + a + "> const &m);"
  88. print
  89. print "//"
  90. print "// Unary constant operators"
  91. print "//"
  92. print "template " + m + "<" + a + "> const operator -(" + m + "<" + a + "> const &m);"
  93. print "template " + m + "<" + a + "> const operator --(" + m + "<" + a + "> const &m, int);"
  94. print "template " + m + "<" + a + "> const operator ++(" + m + "<" + a + "> const &m, int);"
  95. print
  96. def gen_matrices():
  97. for m in glsl_matrix_types:
  98. print
  99. print "//"
  100. print "// " + m + " type explicit instantiation"
  101. print "//"
  102. for a in atomic_types:
  103. print "template struct " + m + "<" + a + ">;"
  104. print
  105. if __name__ == "__main__":
  106. print "//"
  107. print "// GLM External templates generator script version 0.1 for GLM core"
  108. print "//"
  109. print "// atomic types:", atomic_types
  110. print "// GLSL vector types:", glsl_vector_types;
  111. print "// GLSL matrix types:", glsl_matrix_types;
  112. print "//"
  113. print
  114. print "#include <glm/glm.hpp>"
  115. print
  116. print "namespace glm {"
  117. print "namespace detail {"
  118. gen_vectors()
  119. gen_matrices()
  120. gen_matrices_member_operators()
  121. print "} // namespace detail"
  122. print "} // namespace glm"