Как я могу надежно отобразить битовые точные выходные данные в текстуру с плавающей точкой?
Я пытаюсь кодировать uint
значения с помощью функции intBitsToFloat
в шейдере и записать результат в RGBA32F
текстура. Это означает обходной путь для невозможности альфа-смешивания целочисленных текстур, и я позже хочу декодировать значения с плавающей запятой обратно к их начальному uint
значению.
Это используемый код затенения
output_id.r = intBitsToFloat(input_symbol_id);
output_id.g = intBitsToFloat(input_instance_id);
output_id.b = 0.0
output_id.a = alpha > 0.5 ? 1.0 : 0.0;
, где input_symbol_id
и input_instance_id
- это значения int
, которые я хочу кодировать.
Хотя, похоже, это не работает. Вывод для очень маленьких значений (например, intBitsToFloat(1)
) всегда усекается до 0.0
при последующем чтении из выходной текстуры через readPixels
. Большие значения (например, 1.0
), кажется, проходят просто отлично.
Это использует weblg 2.0.
Мне известен этот вопрос , который описывает подобную проблему. Я, однако, уже использую исправление, описанное там, и я все еще получаю только нулевые значения.