Это пример ограниченной точности с плавающей точкой в ​​шейдерах WebGL? - PullRequest
1 голос
/ 04 июня 2019

У меня есть пример шейдера на шейдертой, который не ведет себя так, как я ожидал.Он берет координаты фрагментов 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);
}

РЕДАКТИРОВАТЬ: Из любопытства я загрузил пример шейдерной на свой телефони вот, у меня белый экран, как я и ожидал.

...