¿Debo distribuir sombreadores en forma compilada o en texto plano?

13

Con una aplicación que utiliza sombreadores que se han escrito en GLSL, ¿cuál es la mejor estrategia para la distribución en el mundo real y para el escritorio y los dispositivos móviles?

Estoy tratando de distribuir esto en forma binaria o como texto serializado simple, me gustaría una buena sugerencia al respecto.

usuario827992
fuente

Respuestas:

15

La razón principal para usar sombreadores binarios es si compilar los sombreadores de texto es una carga de trabajo demasiado grande para su dispositivo de destino. Los sombreadores GLSL binarios no tienen un formato estandarizado, por lo que necesitaría diferentes para cada GPU / controlador que planea admitir. Recomiendo que distribuya los sombreadores en forma de origen y luego, en la primera ejecución, almacénelos en forma binaria y luego cargue desde allí. Por otra parte, primero probaría si realmente tiene un cuello de botella en el rendimiento para justificar el uso de los binarios.

Una cosa a considerar es también un optimizador de sombreador de texto fuera de línea que puede tener un gran efecto con los compiladores de sombreadores móviles.

Tapio
fuente
De hecho, me sorprendería si pudiera encontrar algún dispositivo donde la compilación de sombreadores sea un cuello de botella. La cantidad de código, incluso en sombreadores grandes, es una cantidad trivial de código en términos de compilación.
edA-qa mort-ora-y
1
Los grandes motores por ahí generalmente compilan sombreadores fuera de línea y / o los almacenan en caché en la primera ejecución, como sugiere Tapio. Tal vez haya una cantidad trivial de código por sombreador, pero puede tener muchos de ellos.
Laurent Couvidou
entonces tengo que comprar una tarjeta de video ATI aleatoria y otra al azar de Nvidia, compilar mis sombreadores y distribuir solo la versión compilada. ¿Cómo puedo verificar en tiempo de ejecución cuál es la marca de la tarjeta de video específica? ¿Hay algo confiable para eso?
user827992
1
@ user827992 El formato binario puede ser diferente para diferentes generaciones de GPU / controladores, incluso si el proveedor es el mismo. Y no olvide que también hay muchas GPU Intel, por no hablar de todas las móviles, como Qualcomm y PowerVR. Así que de nuevo: le sugiero que no distribuya sombreadores compilados, sino que los almacene en caché en la primera ejecución en el dispositivo del usuario. Con respecto a la detección de GPU, puede intentar analizar las cadenas GL_VENDOR, GL_VERSION y GL_RENDERER de glGetString (), pero su formato varía de un proveedor a otro.
Tapio