У меня есть пример шейдера на шейдертой, который не ведет себя так, как я ожидал.Он берет координаты фрагментов X и Y, складывает их вместе, вычисляет ULP этого выражения.Ожидается, что значение ULP будет очень маленьким, поэтому я умножу его на очень большое число и выведу его в виде цвета пикселя.Я ожидал бы белые пиксели, но я получаю черный, указывая, что значение было фактически нулем.Это какая-то ошибка из-за ограничений точности в моей реализации WebGL (Google Chrome для Windows)?
float ulp(float f)
{
int i = floatBitsToInt(f);
return abs(intBitsToFloat(i + 1) - f);
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
float f = fragCoord.y + fragCoord.x;
vec3 col = vec3(ulp(f) * 3.4e38);
fragColor = vec4(col, 1.0);
}
РЕДАКТИРОВАТЬ: Из любопытства я загрузил пример шейдерной на свой телефони вот, у меня белый экран, как я и ожидал.