core_func_swizzle.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. #define GLM_FORCE_SWIZZLE
  2. #include <glm/ext/scalar_relational.hpp>
  3. #include <glm/ext/vector_relational.hpp>
  4. #include <glm/glm.hpp>
  5. static int test_ivec2_swizzle()
  6. {
  7. int Error = 0;
  8. # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
  9. {
  10. glm::ivec2 A(1, 2);
  11. glm::ivec2 B = A.yx();
  12. glm::ivec2 C = B.yx();
  13. Error += A != B ? 0 : 1;
  14. Error += A == C ? 0 : 1;
  15. }
  16. # endif//GLM_CONFIG_SWIZZLE
  17. # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
  18. {
  19. glm::ivec2 A(1, 2);
  20. glm::ivec2 B = A.yx;
  21. glm::ivec2 C = A.yx;
  22. Error += A != B ? 0 : 1;
  23. Error += B == C ? 0 : 1;
  24. B.xy = B.yx;
  25. C.xy = C.yx;
  26. Error += B == C ? 0 : 1;
  27. glm::ivec2 D(0, 0);
  28. D.yx = A.xy;
  29. Error += A.yx() == D ? 0 : 1;
  30. glm::ivec2 E = A.yx;
  31. Error += E == D ? 0 : 1;
  32. }
  33. # endif//GLM_CONFIG_SWIZZLE
  34. return Error;
  35. }
  36. static int test_ivec3_swizzle()
  37. {
  38. int Error = 0;
  39. # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
  40. {
  41. glm::ivec3 A(1, 2, 3);
  42. glm::ivec3 B = A.zyx();
  43. glm::ivec3 C = B.zyx();
  44. Error += A != B ? 0 : 1;
  45. Error += A == C ? 0 : 1;
  46. }
  47. # endif
  48. # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
  49. {
  50. glm::ivec3 const A(1, 2, 3);
  51. glm::ivec2 B = A.yx;
  52. glm::ivec2 C = A.yx;
  53. Error += A.yx() == B ? 0 : 1;
  54. Error += B == C ? 0 : 1;
  55. B.xy = B.yx;
  56. C.xy = C.yx;
  57. Error += B == C ? 0 : 1;
  58. glm::ivec2 D(0, 0);
  59. D.yx = A.xy;
  60. Error += A.yx() == D ? 0 : 1;
  61. glm::ivec2 E(0, 0);
  62. E.xy = A.xy();
  63. Error += E == A.xy() ? 0 : 1;
  64. Error += E.xy() == A.xy() ? 0 : 1;
  65. glm::ivec3 const F = A.xxx + A.xxx;
  66. Error += F == glm::ivec3(2) ? 0 : 1;
  67. glm::ivec3 const G = A.xxx - A.xxx;
  68. Error += G == glm::ivec3(0) ? 0 : 1;
  69. glm::ivec3 const H = A.xxx * A.xxx;
  70. Error += H == glm::ivec3(1) ? 0 : 1;
  71. glm::ivec3 const I = A.xxx / A.xxx;
  72. Error += I == glm::ivec3(1) ? 0 : 1;
  73. glm::ivec3 J(1, 2, 3);
  74. J.xyz += glm::ivec3(1);
  75. Error += J == glm::ivec3(2, 3, 4) ? 0 : 1;
  76. glm::ivec3 K(1, 2, 3);
  77. K.xyz += A.xyz;
  78. Error += K == glm::ivec3(2, 4, 6) ? 0 : 1;
  79. }
  80. # endif
  81. return Error;
  82. }
  83. static int test_ivec4_swizzle()
  84. {
  85. int Error = 0;
  86. # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
  87. {
  88. glm::ivec4 A(1, 2, 3, 4);
  89. glm::ivec4 B = A.wzyx();
  90. glm::ivec4 C = B.wzyx();
  91. Error += A != B ? 0 : 1;
  92. Error += A == C ? 0 : 1;
  93. }
  94. # endif
  95. return Error;
  96. }
  97. static int test_vec4_swizzle()
  98. {
  99. int Error = 0;
  100. # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
  101. {
  102. glm::vec4 A(1, 2, 3, 4);
  103. glm::vec4 B = A.wzyx();
  104. glm::vec4 C = B.wzyx();
  105. Error += glm::any(glm::notEqual(A, B, 0.0001f)) ? 0 : 1;
  106. Error += glm::all(glm::equal(A, C, 0.0001f)) ? 0 : 1;
  107. float D = glm::dot(C.wzyx(), C.xyzw());
  108. Error += glm::equal(D, 20.f, 0.001f) ? 0 : 1;
  109. }
  110. # endif
  111. return Error;
  112. }
  113. int main()
  114. {
  115. int Error = 0;
  116. Error += test_ivec2_swizzle();
  117. Error += test_ivec3_swizzle();
  118. Error += test_ivec4_swizzle();
  119. Error += test_vec4_swizzle();
  120. return Error;
  121. }