Детерминированный рендеринг OpenGL между поставщиками графических процессоров

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

Я хотел бы знать, должен ли рендеринг OpenGL (с точки зрения извлеченного пикселя из FBO) быть полностью детерминированным, когда мой код (C++/OpenGL и простой GLSL) выполняется на другом оборудовании (ATI против NVidia, различные поколения NVidia и различные ОС). )?

Точнее, мне понадобится точно один и тот же буфер пикселей каждый раз, когда я запускаю свой код на любом оборудовании (которое может запускать базовые GLSL и OpenGL 3.0)...

Это возможно? Есть ли какой-то совет, который я должен учитывать?

Если это невозможно, есть ли видеокарта определенной марки (возможно, Quadro?), Которая могла бы это сделать при изменении хост-ОС?


person softmllx    schedule 27.10.2011    source источник
comment
Детерминированный? Конечно! Инвариантно для драйверов или даже оборудования? Вероятно, нет (по крайней мере, не гарантировано).   -  person Christian Rau    schedule 28.10.2011


Ответы (3)


Из спецификации OpenGL (версия 2.1, приложение A):

Спецификация OpenGL не точна по пикселям. Следовательно, это не гарантирует точного соответствия между изображениями, созданными разными реализациями GL. Однако в некоторых случаях в спецификации указаны точные совпадения для изображений, созданных одной и той же реализацией.

Если вы отключите все сглаживание и текстурирование, у вас будет хороший шанс получить согласованные результаты на разных платформах. Однако, если вам нужно сглаживание или текстурирование или 100%-ная гарантия идеального пикселя, используйте только программный рендеринг: http://www.mesa3d.org/

person user57368    schedule 27.10.2011
comment
Большое тебе спасибо! Как вы думаете, смогу ли я получить пиксельные результаты, используя только карту Quadro (и с теми же настройками)? - person softmllx; 28.10.2011
comment
Даже при одинаковом оборудовании рендеринг может различаться в разных версиях драйверов. Не ожидайте идентичного рендеринга между драйверами NVidia для Windows и драйверами NVidia для Linux или даже между двумя разными версиями одного и того же драйвера. И имейте в виду, что настройки драйвера могут переопределить все, что запрашивает приложение с точки зрения качества сглаживания или фильтрации текстур. Скорее всего, вам не нужен пиксельный рендеринг со скоростью 60 кадров в секунду, поэтому вы, вероятно, можете обойтись аппаратным рендерингом в качестве предварительного просмотра и программным рендерингом для окончательного точного рендеринга, который сохраняется на диск. - person user57368; 28.10.2011

Под «детерминированным» я предполагаю, что вы имеете в виду то, что вы сказали (а не то, что на самом деле означает это слово): что вы можете получить кросс-платформенные результаты, идентичные пикселям.

Нет. Не шанс.

Вы можете изменить результаты рендеринга в пикселях, просто поэкспериментировав с настройками в приложении вашего графического драйвера. Версии драйверов для одного и того же оборудования могут изменить то, что вы получаете.

Спецификация OpenGL никогда не требовала идеальных до пикселя результатов. Сглаживание и фильтрация текстур особенно туманны.

person Nicol Bolas    schedule 27.10.2011

Если вы прочитаете спецификацию OpenGL, то увидите, что существует ряд детерминированных условий, которые должны быть соблюдены для того, чтобы реализация соответствовала стандарту, но есть также значительное количество оставшихся деталей реализации. полностью зависит от поставщика оборудования / разработчика драйвера. Если вы не выполняете рендеринг с невероятно простыми методами, которые подпадают под категории детерминированных/инвариантных (что, как я полагаю, удержит вас от использования фильтрованного текстурирования, сглаживания, освещения, шейдеров и т. д.), стандарт допускает довольно значительные различия между различным оборудованием и даже разными драйверами. на том же оборудовании.

person PfhorSlayer    schedule 27.10.2011