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

в настоящее время я программирую научное приложение визуализации с помощью OpenGL.

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

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

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

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

3 ответов


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

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

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


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

нет. Не шанс.

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

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


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