blob: 48cd5468d0acf24962d130829b40e25e7784a5a9 [file] [log] [blame]
#version 300
uniform half4 colorGreen, colorRed;
bool test_same_arrays(bool eq, float f1, float f2, float f3) {
float one = colorGreen.r + 1;
float a[3]; a[0] = f1; a[1] = f2; a[2] = f3;
float b[3]; b[0] = f1 * one; b[1] = f2 * one; b[2] = f3 * one;
return eq ? a == b : a != b;
}
bool test_diff_arrays(bool eq, float f1, float f2, float f3) {
float two = colorGreen.r + 2;
float a[3]; a[0] = f1; a[1] = f2; a[2] = f3;
float b[3]; b[0] = f1 * two; b[1] = f2 * two; b[2] = f3;
return eq ? a == b : a != b;
}
vec4 main(vec2 coords) {
float NAN1 = colorGreen.r/colorGreen.b;
float NAN2 = colorGreen.b/colorGreen.r;
float ZP = +colorGreen.r*colorGreen.b;
float ZM = -colorGreen.r*colorGreen.b;
float F42 = colorGreen.g * 42.0;
float F43 = colorGreen.g * 43.0;
float F44 = colorGreen.g * 44.0;
bool EQ = true; // Tests for ==
bool NE = false; // Tests for !=
return true
&& test_same_arrays(EQ, F42, ZM, ZP) // equal, including -0 and +0 values
&& !test_same_arrays(NE, F42, ZM, ZP) // not (not equal)
&& test_same_arrays(NE, F42, NAN1, NAN2) // NA values always not equal
&& !test_same_arrays(EQ, F42, NAN1, NAN2)
&& test_diff_arrays(NE, F42, F43, F44) // one of the normal values not equal
&& !test_diff_arrays(EQ, F42, F43, F44)
&& test_diff_arrays(NE, NAN1, ZM, ZP) // one of the normal values not equal
&& !test_diff_arrays(EQ, NAN1, ZM, ZP)
? colorGreen : colorRed;
}