2011-10-27 19 views
6

Actualmente estoy programando una aplicación de creación de imágenes científicas utilizando OpenGL.Representación determinística de OpenGL entre el proveedor de la GPU

Me gustaría saber si se supone que el renderizado OpenGL (en términos de píxel recuperado de FBO) es completamente determinista cuando mi código (C++/OpenGL y GLSL simple) se ejecuta en hardware diferente (ATI vs NVidia, varias NVidia generaciones y varios sistemas operativos)?

Más precisamente, necesitaría el cada vez de tampón exactas mismos píxeles corro mi código en cualquier hardware (que se ejecuta GLSL básica y OpenGL 3.0) ...

¿Es posible? ¿Hay algún consejo que debería considerar?

Si no es posible, ¿existe una marca de tarjeta de video específica (¿quizás Quadro?) Que podría hacerlo al variar el sistema operativo host?

+1

Determinista? ¡Por supuesto! Invariante a través de controladores o incluso hardware? Probablemente no (al menos no garantizado). –

Respuesta

4

De la especificación OpenGL (versión 2.1 apéndice A):

especificación OpenGL El pixel no es exacta. Por lo tanto, no garantiza una coincidencia exacta entre las imágenes producidas por diferentes implementaciones GL. Sin embargo, la especificación especifica coincidencias exactas, en algunos casos, para imágenes producidas por la misma implementación.

Si desactiva todo el suavizado y texturizado, tiene buenas posibilidades de obtener resultados uniformes en todas las plataformas. Sin embargo, si necesita un antialiasing o texturizado o una garantía del 100% de píxeles perfectos, use la representación de software únicamente: http://www.mesa3d.org/

+0

¡Muchas gracias! ¿Crees que podría obtener resultados perfectos para píxel utilizando solo una tarjeta Quadro (y usando la misma configuración)? – softmllx

+1

Incluso con hardware idéntico, la representación puede cambiar a través de las versiones del controlador. No espere una representación idéntica entre los controladores de Windows de NVidia y los controladores Linux de NVidia, o incluso entre dos versiones diferentes del mismo controlador. Y tenga en cuenta que la configuración del controlador puede anular cualquier solicitud de la aplicación en términos de antialiasing o calidad de filtrado de textura.Lo más probable es que no necesite un renderizado perfecto a 60 FPS, por lo que probablemente pueda usar el hardware como una vista previa y el procesamiento del software para su procesamiento final y exacto que se guarda en el disco. – user57368

0

Si lee la especificación de OpenGL, hay una serie de condiciones determinísticas que deben cumplirse para que la implementación cumpla con la norma, pero también hay un número significativo cantidad de detalles de implementación que quedan completamente hasta el desarrollador de hardware/proveedor de hardware. A menos que renderice con técnicas increíblemente básicas que caen en las categorías determinista/invariante (que creo que le impedirán usar texturas filtradas, antialiasing, iluminación, sombreadores, etc.), el estándar permite diferencias bastante significativas entre diferentes hardware e incluso diferentes controladores en el mismo hardware.

2

Por "Determinista", voy a suponer que usted quiere decir lo que dijo (en lugar de lo que realmente significa la palabra): que puede obtener resultados idénticos a los de píxeles multiplataforma.

No, no es una oportunidad.

Puede cambiar los resultados de píxeles que obtiene de la representación simplemente jugando con la configuración en la aplicación del controlador de gráficos. Las revisiones de controladores del mismo hardware pueden cambiar lo que obtienes.

La especificación de OpenGL tiene nunca requiere resultados perfectos para el píxel. El antialiasing y el filtrado de textura especialmente son partes nebulosas.

Cuestiones relacionadas