Бит точный рендеринг с плавающей точкой - PullRequest
0 голосов
/ 21 апреля 2020

Как я могу надежно отобразить битовые точные выходные данные в текстуру с плавающей точкой?

Я пытаюсь кодировать 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.

Мне известен этот вопрос , который описывает подобную проблему. Я, однако, уже использую исправление, описанное там, и я все еще получаю только нулевые значения.

...