glsl fragment-shader opengl-es-1.1

Uniforme versus atributos en GLSL ES



fragment-shader opengl-es-1.1 (1)

Yo voto por los uniformes.

Una de las razones ya se explica en su pregunta: los uniformes son constantes para cada vértice / fragmento.

Otras razones para preferir uniformes contra atributos serían:

  • el número de ranuras disponibles (se le permiten 16 atributos, pero muchos más uniformes)
  • Los compiladores GLSL pueden optimizar el manejo de valor uniforme
  • menos transmisión de datos en arreglos de vértices largos, menos atributo por vértice significa mejor rendimiento.
  • Los uniformes están disponibles en sombreadores de fragmentos, sin definir atributos variables entre sombreadores de vértices y fragmentos
  • Los uniformes pueden ser estructuras y matrices, lo que lleva a un código más legible.

Tengo algunos parámetros que se pasan de la CPU a la GPU que son constantes para todos los fragmentos pero que cambian en cada fotograma (estoy usando GLSL ES 1.1). ¿Debo usar uniformes o atributos para tales valores? Los atributos pueden variar de vértice a vértice, por lo que mi intuición es que el uso de atributos para valores que son constantes en todo el marco sería ineficiente. Sin embargo, he leído que los uniformes son para valores que cambian "con poca frecuencia", lo que sugiere que cambiar los uniformes en cada cuadro puede ser ineficiente.

En términos de hardware, estoy más interesado en la optimización para el iPhone 4S.