gtx_component_wise.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #include <glm/gtx/component_wise.hpp>
  2. #include <glm/gtc/type_precision.hpp>
  3. #include <glm/gtc/epsilon.hpp>
  4. #include <glm/gtc/constants.hpp>
  5. #include <limits>
  6. namespace compNormalize
  7. {
  8. int run()
  9. {
  10. int Error(0);
  11. {
  12. glm::vec4 const A = glm::compNormalize<float>(glm::u8vec4(0, 127, 128, 255));
  13. Error += glm::epsilonEqual(A.x, 0.0f, glm::epsilon<float>()) ? 0 : 1;
  14. Error += A.y < 0.5f ? 0 : 1;
  15. Error += A.z > 0.5f ? 0 : 1;
  16. Error += glm::epsilonEqual(A.w, 1.0f, glm::epsilon<float>()) ? 0 : 1;
  17. }
  18. {
  19. glm::vec4 const A = glm::compNormalize<float>(glm::i8vec4(-128, -1, 0, 127));
  20. Error += glm::epsilonEqual(A.x,-1.0f, glm::epsilon<float>()) ? 0 : 1;
  21. Error += A.y < 0.0f ? 0 : 1;
  22. Error += A.z > 0.0f ? 0 : 1;
  23. Error += glm::epsilonEqual(A.w, 1.0f, glm::epsilon<float>()) ? 0 : 1;
  24. }
  25. {
  26. glm::vec4 const A = glm::compNormalize<float>(glm::u16vec4(
  27. std::numeric_limits<glm::u16>::min(),
  28. (std::numeric_limits<glm::u16>::max() >> 1) + 0,
  29. (std::numeric_limits<glm::u16>::max() >> 1) + 1,
  30. std::numeric_limits<glm::u16>::max()));
  31. Error += glm::epsilonEqual(A.x, 0.0f, glm::epsilon<float>()) ? 0 : 1;
  32. Error += A.y < 0.5f ? 0 : 1;
  33. Error += A.z > 0.5f ? 0 : 1;
  34. Error += glm::epsilonEqual(A.w, 1.0f, glm::epsilon<float>()) ? 0 : 1;
  35. }
  36. {
  37. glm::vec4 const A = glm::compNormalize<float>(glm::i16vec4(
  38. std::numeric_limits<glm::i16>::min(),
  39. static_cast<glm::i16>(-1),
  40. static_cast<glm::i16>(0),
  41. std::numeric_limits<glm::i16>::max()));
  42. Error += glm::epsilonEqual(A.x,-1.0f, glm::epsilon<float>()) ? 0 : 1;
  43. Error += A.y < 0.0f ? 0 : 1;
  44. Error += A.z > 0.0f ? 0 : 1;
  45. Error += glm::epsilonEqual(A.w, 1.0f, glm::epsilon<float>()) ? 0 : 1;
  46. }
  47. return Error;
  48. }
  49. }//namespace compNormalize
  50. namespace compScale
  51. {
  52. int run()
  53. {
  54. int Error(0);
  55. {
  56. glm::u8vec4 const A = glm::compScale<glm::u8>(glm::vec4(0.0f, 0.2f, 0.5f, 1.0f));
  57. Error += A.x == std::numeric_limits<glm::u8>::min() ? 0 : 1;
  58. Error += A.y < (std::numeric_limits<glm::u8>::max() >> 2) ? 0 : 1;
  59. Error += A.z == 127 ? 0 : 1;
  60. Error += A.w == 255 ? 0 : 1;
  61. }
  62. {
  63. glm::i8vec4 const A = glm::compScale<glm::i8>(glm::vec4(0.0f,-1.0f, 0.5f, 1.0f));
  64. Error += A.x == 0 ? 0 : 1;
  65. Error += A.y == -128 ? 0 : 1;
  66. Error += A.z == 63 ? 0 : 1;
  67. Error += A.w == 127 ? 0 : 1;
  68. }
  69. {
  70. glm::u16vec4 const A = glm::compScale<glm::u16>(glm::vec4(0.0f, 0.2f, 0.5f, 1.0f));
  71. Error += A.x == std::numeric_limits<glm::u16>::min() ? 0 : 1;
  72. Error += A.y < (std::numeric_limits<glm::u16>::max() >> 2) ? 0 : 1;
  73. Error += A.z == 32767 ? 0 : 1;
  74. Error += A.w == 65535 ? 0 : 1;
  75. }
  76. {
  77. glm::i16vec4 const A = glm::compScale<glm::i16>(glm::vec4(0.0f,-1.0f, 0.5f, 1.0f));
  78. Error += A.x == 0 ? 0 : 1;
  79. Error += A.y == -32768 ? 0 : 1;
  80. Error += A.z == 16383 ? 0 : 1;
  81. Error += A.w == 32767 ? 0 : 1;
  82. }
  83. return Error;
  84. }
  85. }// compScale
  86. int main()
  87. {
  88. int Error(0);
  89. Error += compNormalize::run();
  90. Error += compScale::run();
  91. return Error;
  92. }