equalsEpsilon.glsl 1.4 KB

123456789101112131415161718192021222324252627282930313233343536
  1. /**
  2. * Compares <code>left</code> and <code>right</code> componentwise. Returns <code>true</code>
  3. * if they are within <code>epsilon</code> and <code>false</code> otherwise. The inputs
  4. * <code>left</code> and <code>right</code> can be <code>float</code>s, <code>vec2</code>s,
  5. * <code>vec3</code>s, or <code>vec4</code>s.
  6. *
  7. * @name czm_equalsEpsilon
  8. * @glslFunction
  9. *
  10. * @param {} left The first vector.
  11. * @param {} right The second vector.
  12. * @param {float} epsilon The epsilon to use for equality testing.
  13. * @returns {bool} <code>true</code> if the components are within <code>epsilon</code> and <code>false</code> otherwise.
  14. *
  15. * @example
  16. * // GLSL declarations
  17. * bool czm_equalsEpsilon(float left, float right, float epsilon);
  18. * bool czm_equalsEpsilon(vec2 left, vec2 right, float epsilon);
  19. * bool czm_equalsEpsilon(vec3 left, vec3 right, float epsilon);
  20. * bool czm_equalsEpsilon(vec4 left, vec4 right, float epsilon);
  21. */
  22. bool czm_equalsEpsilon(vec4 left, vec4 right, float epsilon) {
  23. return all(lessThanEqual(abs(left - right), vec4(epsilon)));
  24. }
  25. bool czm_equalsEpsilon(vec3 left, vec3 right, float epsilon) {
  26. return all(lessThanEqual(abs(left - right), vec3(epsilon)));
  27. }
  28. bool czm_equalsEpsilon(vec2 left, vec2 right, float epsilon) {
  29. return all(lessThanEqual(abs(left - right), vec2(epsilon)));
  30. }
  31. bool czm_equalsEpsilon(float left, float right, float epsilon) {
  32. return (abs(left - right) <= epsilon);
  33. }