Я разрабатываю приложение OpenGL для iPhone. В моем вершинном шейдере мне нужен способ изменить цвет большого количества (, но не всех )моих вершин одновременно, поэтому я остановился на индексации цвета. Это позволит мне оставить VBO статическим и изменить одну юниформ-переменную, а не перебирать каждую вершину и изменять информацию о цвете между каждым кадром.
Мой план состоит в том, чтобы создать форму с массивом цветов, добавить целое число, содержащее индекс в атрибутах. Вот мой вершинный шейдер:
uniform mat4 u_mvp_matrix;
uniform vec4 u_color_array[];
attribute vec4 a_position;
attribute int a_colorIndex;
varying lowp vec4 v_color;
void main()
{
v_color = u_color_array[a_colorIndex];
gl_Position = u_mvp_matrix * a_position;
}
Это вызывает ошибку:
int can't be an in in the vertex shader
Я провел небольшое исследование.iPhone поддерживает не позднее OpenGL ES 2.0, что означает, что он поддерживает не позднее GLSL 1.2, и, по-видимому, целые числа поддерживаются только в GLSL 1.3 и более поздних версиях. Я попытался изменить _colorIndex на число с плавающей запятой. Я не ожидал, что это сработает, и это не сработало.
Как я могу указать индекс цвета для каждой вершины?