¿Por qué una sola multiplicación Vec4 ralentiza tanto mi sombreador de fragmentos ogl es 2?

Estoy escribiendo un juego 2D OpenGL para dispositivos iOS. En este momento, estoy viendo el rendimiento en iPad (primera generación). El juego tiene rutas de código para ogl 1.1 y 2.0, y puedo cambiar cuál se está usando con un#define.

Cuando uso ogl 2.0, el generador de perfiles me dice que mi% de utilización de Renderer es un 100% bastante estable, y mi velocidad de fotogramas es de aproximadamente 30 fps. Cuando uso ogl 1.1, el generador de perfiles me dice que mi% de utilización del procesador es ~ 60% y mi velocidad de fotogramas es 60 fps.

Quiero mejorar el rendimiento con ogl 2.0, y como la velocidad de llenado es limitada, sospeché que el sombreador de fragmentos. Aquí está el sombreador de fragmentos que se estaba utilizando:

precision highp float;
uniform vec4 u_color;
uniform sampler2D u_sampler0;
varying vec2 v_texCoord;

void main()
{
    gl_FragColor = u_color * texture2D( u_sampler0, v_texCoord );
}

Puedes ver que el sombreador es bastante simple. Simplemente multiplica el color de la geometría por el color de la textura. Como experimento, eliminé la multiplicación, de modo que el color de salida era solo el color de la textura, así:

precision highp float;
uniform vec4 u_color;
uniform sampler2D u_sampler0;
varying vec2 v_texCoord;

void main()
{
    gl_FragColor = texture2D( u_sampler0, v_texCoord );
}

Perfilar el código con este sombreador modificado proporcionó un% de utilización del procesador de ~ 60% y una velocidad de fotogramas de 60 fps, el mismo rendimiento alcanzado por el codepath de ogl 1.1.

Mi pregunta

1) ¿Debería una simple multiplicación Vec4 en el sombreador de fragmentos realmente tener un efecto negativo tan grande en el rendimiento?

2) He oído decir que en los dispositivos ogl es 2, la funcionalidad 1.1 se implementa con sombreadores. Obviamente, estos sombreadores logran lograr de manera eficiente el efecto que busco (mezclar el color de la geom en el color de la textura). ¿Cómo puedo lograr este efecto de manera eficiente en mi ogl 2 shader?

Respuestas a la pregunta(1)

Su respuesta a la pregunta