2012-06-22 23 views
28

Tengo algunos parámetros que pasan de la CPU a la GPU que son constantes para todos los fragmentos pero que cambian en cada cuadro (estoy usando GLSL ES 1.1). ¿Debo usar uniformes o atributos para esos valores? Los atributos pueden variar de vértice a vértice, así que mi intuición es que usar 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 relativa poca frecuencia", lo que sugiere que cambiar uniformes en cada cuadro puede ser ineficaz.Uniforme versus atributos en GLSL ES

En términos de hardware, estoy más interesado en optimizar para el iPhone 4S.

+0

¿Puede enumerar algunas de sus lecturas? – Luca

+1

"OpenGL Shading Language" de Rost y Licea-Kane y "OpenGL ES 2.0" de Munchi, Ginsburg y Shreiner. (Obviamente, el primero no es específico de ES) –

Respuesta

32

Voto por uniformes.

Una de las razones ya se explicó 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 permite 16 atributos, pero muchos más uniformes)
  • 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 un mejor rendimiento.
  • uniformes están disponibles en sombreadores de fragmentos, sin definir atributos variables entre los sombreadores de vértices y fragmentos
  • uniformes pueden ser estructuras y matrices, lo que lleva a un código más legible.
Cuestiones relacionadas