Приложение Android использует форму для передачи вектора цвета в шейдеры. Передача в шейдер выполняется один раз:
private final int colorLink;
private final float[] color;
public Object3D(float[] color) {
this.color = color;
colorLink = GLES20.glGetUniformLocation(program, "u_color");
}
public void onDrawFrame(GL10 glUnused) {
if(objectJustCreated) { // check will be performed anyway
objectJustCreated = false;
GLES20.glUniform4f(colorLink, color[0], color[1],
color[2], color[3]);
...
}
}
Фрагмент шейдера:
#version 300 es
uniform vec4 u_color;
out vec4 fragColor;
...
void main()
{
...
fragColor = u_color * texColor;
}
Другой вариант - использовать константу:
out vec4 fragColor;
const vec4 c_color = vec4(1.0, 0.7, 0.1, 1.0);
...
void main()
{
...
fragColor = c_color * texColor;
}
Но тогда понадобится создать несколько разных шейдеров с разными цветами.
Какой вариант лучше использовать с точки зрения производительности или нет большой разницы? Был бы благодарен за любой ответ / комментарий.