У некоторых графических процессоров или драйверов отсутствуют некоторые встроенные функции glsl? - PullRequest
1 голос
/ 24 марта 2012

Я пытаюсь выполнить запись журнала во время рендеринга на Intel X3100 под Linux (с использованием драйвера Ubuntu по умолчанию). Код выглядит примерно так:

vec4 frag_color;
frag_color.rgb = log(frag_value.rgb);
frag_color.a = frag_value.a
gl_FragColor = frag_color;

где frag_value получено из поиска текстуры. Теперь я могу установить текстуру таким образом, чтобы лог frag_value давал разумный ответ (т. Е. Он находится в разумном диапазоне, чтобы дать frag_color 0.0-> 1.0), но он всегда рендерится как черный (поэтому я предполагаю, что это просто установив его на ноль). Конечно, я могу убедиться, что я разумно установил frag_value, удалив журнал (и установив текстуру frag_value в диапазоне 0.0-> 1.0), что делает то, что я ожидаю, и умножение и другие тривиальные операции работают нормально.

Мой вопрос: это ожидаемое поведение? Я что-то пропустил? У некоторых графических процессоров или драйверов отсутствуют некоторые встроенные функции (например, sqrt, похоже, тоже не работает)?

Ответы [ 3 ]

2 голосов
/ 24 марта 2012

У некоторых графических процессоров или драйверов отсутствует некоторые встроенных функций glsl?

Да.Шумовые функции нигде не реализованы должным образом - неработоспособны на NVidia, значительно снижается производительность или не функционируют на ATI (так было в прошлый раз, когда я проверял).

2 голосов
/ 24 марта 2012

Я почти уверен, что цветовые компоненты находятся в диапазоне 0,0-1,0 для обычных текстур без плавающих элементов.

Я также почти уверен, что gl_FragColor компоненты по умолчанию ограничены до диапазона 0,0-1,0.

log (x) для 0

1 голос
/ 24 марта 2012

Решено:

Загрузка текстур обычно ограничена диапазоном 0.0-> 1.0 (несмотря на то, что может быть выведено из имени типа внутреннего формата), поэтому, конечно, log ничего не дастполезно.Поплавки с полным диапазоном были введены с ARB_texture_float , который расширяет внутренние типы, чтобы включать поплавки с полным диапазоном, такие как LUMINANCE_ALPHA32F_ARB.Использование этого решает проблему.

...