Детерминированный рендеринг OpenGL между поставщиками графических процессоров - PullRequest
8 голосов
/ 28 октября 2011

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

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 28 октября 2011

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

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

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

2 голосов
/ 28 октября 2011

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

Нет. Нет шансов.

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

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

0 голосов
/ 28 октября 2011

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

...