#ifdef TWO_SIDED_BXDF
return UNIT;
#else
- return mix (UNIT, ZERO, theWo.z <= 0.f);
+ return UNIT * step (0.f, theWo.z);
#endif
}
float aTimeLeave = min (aTimeMax.x, min (aTimeMax.y, aTimeMax.z));
float aTimeEnter = max (aTimeMin.x, max (aTimeMin.y, aTimeMin.z));
- aHitTimes.x = mix (MAXFLOAT, aTimeEnter,
- aTimeEnter <= aTimeLeave && aTimeEnter <= theHit.Time && aTimeLeave >= 0.f);
+ aHitTimes.x = (aTimeEnter <= aTimeLeave && aTimeEnter <= theHit.Time && aTimeLeave >= 0.f) ? aTimeEnter : MAXFLOAT;
aTimeMax = max (aNodeMin1, aNodeMax1);
aTimeMin = min (aNodeMin1, aNodeMax1);
aTimeLeave = min (aTimeMax.x, min (aTimeMax.y, aTimeMax.z));
aTimeEnter = max (aTimeMin.x, max (aTimeMin.y, aTimeMin.z));
- aHitTimes.y = mix (MAXFLOAT, aTimeEnter,
- aTimeEnter <= aTimeLeave && aTimeEnter <= theHit.Time && aTimeLeave >= 0.f);
+ aHitTimes.y = (aTimeEnter <= aTimeLeave && aTimeEnter <= theHit.Time && aTimeLeave >= 0.f) ? aTimeEnter : MAXFLOAT;
aTimeMax = max (aNodeMin2, aNodeMax2);
aTimeMin = min (aNodeMin2, aNodeMax2);
aTimeLeave = min (aTimeMax.x, min (aTimeMax.y, aTimeMax.z));
aTimeEnter = max (aTimeMin.x, max (aTimeMin.y, aTimeMin.z));
- aHitTimes.z = mix (MAXFLOAT, aTimeEnter,
- aTimeEnter <= aTimeLeave && aTimeEnter <= theHit.Time && aTimeLeave >= 0.f && aData.z > 1);
+ aHitTimes.z = (aTimeEnter <= aTimeLeave && aTimeEnter <= theHit.Time && aTimeLeave >= 0.f && aData.z > 1) ? aTimeEnter : MAXFLOAT;
aTimeMax = max (aNodeMin3, aNodeMax3);
aTimeMin = min (aNodeMin3, aNodeMax3);
aTimeLeave = min (aTimeMax.x, min (aTimeMax.y, aTimeMax.z));
aTimeEnter = max (aTimeMin.x, max (aTimeMin.y, aTimeMin.z));
- aHitTimes.w = mix (MAXFLOAT, aTimeEnter,
- aTimeEnter <= aTimeLeave && aTimeEnter <= theHit.Time && aTimeLeave >= 0.f && aData.z > 2);
+ aHitTimes.w = (aTimeEnter <= aTimeLeave && aTimeEnter <= theHit.Time && aTimeLeave >= 0.f && aData.z > 2) ? aTimeEnter : MAXFLOAT;
ivec4 aChildren = ivec4 (0, 1, 2, 3);
float aTimeLeave = min (aTimeMax.x, min (aTimeMax.y, aTimeMax.z));
float aTimeEnter = max (aTimeMin.x, max (aTimeMin.y, aTimeMin.z));
- aHitTimes.x = mix (MAXFLOAT, aTimeEnter,
- aTimeEnter <= aTimeLeave && aTimeEnter <= theDistance && aTimeLeave >= 0.f);
+ aHitTimes.x = (aTimeEnter <= aTimeLeave && aTimeEnter <= theDistance && aTimeLeave >= 0.f) ? aTimeEnter : MAXFLOAT;
aTimeMax = max (aNodeMin1, aNodeMax1);
aTimeMin = min (aNodeMin1, aNodeMax1);
aTimeLeave = min (aTimeMax.x, min (aTimeMax.y, aTimeMax.z));
aTimeEnter = max (aTimeMin.x, max (aTimeMin.y, aTimeMin.z));
- aHitTimes.y = mix (MAXFLOAT, aTimeEnter,
- aTimeEnter <= aTimeLeave && aTimeEnter <= theDistance && aTimeLeave >= 0.f);
+ aHitTimes.y = (aTimeEnter <= aTimeLeave && aTimeEnter <= theDistance && aTimeLeave >= 0.f) ? aTimeEnter : MAXFLOAT;
aTimeMax = max (aNodeMin2, aNodeMax2);
aTimeMin = min (aNodeMin2, aNodeMax2);
aTimeLeave = min (aTimeMax.x, min (aTimeMax.y, aTimeMax.z));
aTimeEnter = max (aTimeMin.x, max (aTimeMin.y, aTimeMin.z));
- aHitTimes.z = mix (MAXFLOAT, aTimeEnter,
- aTimeEnter <= aTimeLeave && aTimeEnter <= theDistance && aTimeLeave >= 0.f && aData.z > 1);
+ aHitTimes.z = (aTimeEnter <= aTimeLeave && aTimeEnter <= theDistance && aTimeLeave >= 0.f && aData.z > 1) ? aTimeEnter : MAXFLOAT;
aTimeMax = max (aNodeMin3, aNodeMax3);
aTimeMin = min (aNodeMin3, aNodeMax3);
aTimeLeave = min (aTimeMax.x, min (aTimeMax.y, aTimeMax.z));
aTimeEnter = max (aTimeMin.x, max (aTimeMin.y, aTimeMin.z));
- aHitTimes.w = mix (MAXFLOAT, aTimeEnter,
- aTimeEnter <= aTimeLeave && aTimeEnter <= theDistance && aTimeLeave >= 0.f && aData.z > 2);
+ aHitTimes.w = (aTimeEnter <= aTimeLeave && aTimeEnter <= theDistance && aTimeLeave >= 0.f && aData.z > 2) ? aTimeEnter : MAXFLOAT;
ivec4 aChildren = ivec4 (0, 1, 2, 3);
"#ifdef TWO_SIDED_BXDF\n"
" return UNIT;\n"
"#else\n"
- " return mix (UNIT, ZERO, theWo.z <= 0.f);\n"
+ " return UNIT * step (0.f, theWo.z);\n"
"#endif\n"
"}\n"
"\n"
" float aTimeLeave = min (aTimeMax.x, min (aTimeMax.y, aTimeMax.z));\n"
" float aTimeEnter = max (aTimeMin.x, max (aTimeMin.y, aTimeMin.z));\n"
"\n"
- " aHitTimes.x = mix (MAXFLOAT, aTimeEnter,\n"
- " aTimeEnter <= aTimeLeave && aTimeEnter <= theHit.Time && aTimeLeave >= 0.f);\n"
+ " aHitTimes.x = (aTimeEnter <= aTimeLeave && aTimeEnter <= theHit.Time && aTimeLeave >= 0.f) ? aTimeEnter : MAXFLOAT;\n"
"\n"
" aTimeMax = max (aNodeMin1, aNodeMax1);\n"
" aTimeMin = min (aNodeMin1, aNodeMax1);\n"
" aTimeLeave = min (aTimeMax.x, min (aTimeMax.y, aTimeMax.z));\n"
" aTimeEnter = max (aTimeMin.x, max (aTimeMin.y, aTimeMin.z));\n"
"\n"
- " aHitTimes.y = mix (MAXFLOAT, aTimeEnter,\n"
- " aTimeEnter <= aTimeLeave && aTimeEnter <= theHit.Time && aTimeLeave >= 0.f);\n"
+ " aHitTimes.y = (aTimeEnter <= aTimeLeave && aTimeEnter <= theHit.Time && aTimeLeave >= 0.f) ? aTimeEnter : MAXFLOAT;\n"
"\n"
" aTimeMax = max (aNodeMin2, aNodeMax2);\n"
" aTimeMin = min (aNodeMin2, aNodeMax2);\n"
" aTimeLeave = min (aTimeMax.x, min (aTimeMax.y, aTimeMax.z));\n"
" aTimeEnter = max (aTimeMin.x, max (aTimeMin.y, aTimeMin.z));\n"
"\n"
- " aHitTimes.z = mix (MAXFLOAT, aTimeEnter,\n"
- " aTimeEnter <= aTimeLeave && aTimeEnter <= theHit.Time && aTimeLeave >= 0.f && aData.z > 1);\n"
+ " aHitTimes.z = (aTimeEnter <= aTimeLeave && aTimeEnter <= theHit.Time && aTimeLeave >= 0.f && aData.z > 1) ? aTimeEnter : MAXFLOAT;\n"
"\n"
" aTimeMax = max (aNodeMin3, aNodeMax3);\n"
" aTimeMin = min (aNodeMin3, aNodeMax3);\n"
" aTimeLeave = min (aTimeMax.x, min (aTimeMax.y, aTimeMax.z));\n"
" aTimeEnter = max (aTimeMin.x, max (aTimeMin.y, aTimeMin.z));\n"
"\n"
- " aHitTimes.w = mix (MAXFLOAT, aTimeEnter,\n"
- " aTimeEnter <= aTimeLeave && aTimeEnter <= theHit.Time && aTimeLeave >= 0.f && aData.z > 2);\n"
+ " aHitTimes.w = (aTimeEnter <= aTimeLeave && aTimeEnter <= theHit.Time && aTimeLeave >= 0.f && aData.z > 2) ? aTimeEnter : MAXFLOAT;\n"
"\n"
" ivec4 aChildren = ivec4 (0, 1, 2, 3);\n"
"\n"
" float aTimeLeave = min (aTimeMax.x, min (aTimeMax.y, aTimeMax.z));\n"
" float aTimeEnter = max (aTimeMin.x, max (aTimeMin.y, aTimeMin.z));\n"
"\n"
- " aHitTimes.x = mix (MAXFLOAT, aTimeEnter,\n"
- " aTimeEnter <= aTimeLeave && aTimeEnter <= theDistance && aTimeLeave >= 0.f);\n"
+ " aHitTimes.x = (aTimeEnter <= aTimeLeave && aTimeEnter <= theDistance && aTimeLeave >= 0.f) ? aTimeEnter : MAXFLOAT;\n"
"\n"
" aTimeMax = max (aNodeMin1, aNodeMax1);\n"
" aTimeMin = min (aNodeMin1, aNodeMax1);\n"
" aTimeLeave = min (aTimeMax.x, min (aTimeMax.y, aTimeMax.z));\n"
" aTimeEnter = max (aTimeMin.x, max (aTimeMin.y, aTimeMin.z));\n"
"\n"
- " aHitTimes.y = mix (MAXFLOAT, aTimeEnter,\n"
- " aTimeEnter <= aTimeLeave && aTimeEnter <= theDistance && aTimeLeave >= 0.f);\n"
+ " aHitTimes.y = (aTimeEnter <= aTimeLeave && aTimeEnter <= theDistance && aTimeLeave >= 0.f) ? aTimeEnter : MAXFLOAT;\n"
"\n"
" aTimeMax = max (aNodeMin2, aNodeMax2);\n"
" aTimeMin = min (aNodeMin2, aNodeMax2);\n"
" aTimeLeave = min (aTimeMax.x, min (aTimeMax.y, aTimeMax.z));\n"
" aTimeEnter = max (aTimeMin.x, max (aTimeMin.y, aTimeMin.z));\n"
"\n"
- " aHitTimes.z = mix (MAXFLOAT, aTimeEnter,\n"
- " aTimeEnter <= aTimeLeave && aTimeEnter <= theDistance && aTimeLeave >= 0.f && aData.z > 1);\n"
+ " aHitTimes.z = (aTimeEnter <= aTimeLeave && aTimeEnter <= theDistance && aTimeLeave >= 0.f && aData.z > 1) ? aTimeEnter : MAXFLOAT;\n"
"\n"
" aTimeMax = max (aNodeMin3, aNodeMax3);\n"
" aTimeMin = min (aNodeMin3, aNodeMax3);\n"
" aTimeLeave = min (aTimeMax.x, min (aTimeMax.y, aTimeMax.z));\n"
" aTimeEnter = max (aTimeMin.x, max (aTimeMin.y, aTimeMin.z));\n"
"\n"
- " aHitTimes.w = mix (MAXFLOAT, aTimeEnter,\n"
- " aTimeEnter <= aTimeLeave && aTimeEnter <= theDistance && aTimeLeave >= 0.f && aData.z > 2);\n"
+ " aHitTimes.w = (aTimeEnter <= aTimeLeave && aTimeEnter <= theDistance && aTimeLeave >= 0.f && aData.z > 2) ? aTimeEnter : MAXFLOAT;\n"
"\n"
" ivec4 aChildren = ivec4 (0, 1, 2, 3);\n"
"\n"