gtc_color_space.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include <glm/gtc/color_space.hpp>
  2. #include <glm/gtc/epsilon.hpp>
  3. #include <glm/gtc/constants.hpp>
  4. namespace srgb
  5. {
  6. int test()
  7. {
  8. int Error(0);
  9. glm::vec3 const ColorSourceRGB(1.0, 0.5, 0.0);
  10. {
  11. glm::vec3 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGB);
  12. glm::vec3 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB);
  13. Error += glm::all(glm::epsilonEqual(ColorSourceRGB, ColorRGB, 0.00001f)) ? 0 : 1;
  14. }
  15. {
  16. glm::vec3 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGB, 2.8f);
  17. glm::vec3 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB, 2.8f);
  18. Error += glm::all(glm::epsilonEqual(ColorSourceRGB, ColorRGB, 0.00001f)) ? 0 : 1;
  19. }
  20. glm::vec4 const ColorSourceRGBA(1.0, 0.5, 0.0, 1.0);
  21. {
  22. glm::vec4 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGBA);
  23. glm::vec4 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB);
  24. Error += glm::all(glm::epsilonEqual(ColorSourceRGBA, ColorRGB, 0.00001f)) ? 0 : 1;
  25. }
  26. {
  27. glm::vec4 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGBA, 2.8f);
  28. glm::vec4 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB, 2.8f);
  29. Error += glm::all(glm::epsilonEqual(ColorSourceRGBA, ColorRGB, 0.00001f)) ? 0 : 1;
  30. }
  31. glm::vec4 const ColorSourceGNI = glm::vec4(107, 107, 104, 131) / glm::vec4(255);
  32. {
  33. glm::vec4 const ColorGNA = glm::convertSRGBToLinear(ColorSourceGNI) * glm::vec4(255);
  34. glm::vec4 const ColorGNE = glm::convertLinearToSRGB(ColorSourceGNI) * glm::vec4(255);
  35. glm::vec4 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceGNI);
  36. glm::vec4 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB);
  37. Error += glm::all(glm::epsilonEqual(ColorSourceGNI, ColorRGB, 0.00001f)) ? 0 : 1;
  38. }
  39. return Error;
  40. }
  41. }//namespace srgb
  42. namespace srgb_lowp
  43. {
  44. int test()
  45. {
  46. int Error(0);
  47. for(float Color = 0.0f; Color < 1.0f; Color += 0.01f)
  48. {
  49. glm::highp_vec3 const HighpSRGB = glm::convertLinearToSRGB(glm::highp_vec3(Color));
  50. glm::lowp_vec3 const LowpSRGB = glm::convertLinearToSRGB(glm::lowp_vec3(Color));
  51. Error += glm::all(glm::epsilonEqual(glm::abs(HighpSRGB - glm::highp_vec3(LowpSRGB)), glm::highp_vec3(0), 0.1f)) ? 0 : 1;
  52. }
  53. return Error;
  54. }
  55. }//namespace srgb_lowp
  56. int main()
  57. {
  58. int Error(0);
  59. Error += srgb::test();
  60. Error += srgb_lowp::test();
  61. return Error;
  62. }