Укажите целое число для индекса массива в OpenGL ES 2.0?

Я разрабатываю приложение 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 на число с плавающей запятой. Я не ожидал, что это сработает, и это не сработало.

Как я могу указать индекс цвета для каждой вершины?

6
задан genpfault 8 July 2012 в 01:51
поделиться