Pracuję nad aplikacją OpenGL na iPhone'a. W moim vertexowym shaderze potrzebuję sposobu na zmianę koloru dużej liczby (ale nie wszystkich) moich wierzchołków naraz, więc zdecydowałem się na indeksowanie kolorów. Pozwoli mi to opuścić statyczny VBO i zmodyfikuje pojedynczą zmienną jednolitą, zamiast przechodzić przez każdy wierzchołek i modyfikować informacje o kolorach między każdą klatką.Podaj liczbę całkowitą dla indeksu tablicy w OpenGL ES 2.0?
Mój plan to stworzenie uniformu z tablicą kolorów, dodanie liczby całkowitej zawierającej indeks w atrybutach. Oto moja vertex shader:
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;
}
Pojawia się błąd:
int can't be an in in the vertex shader
Zrobiłem rozeznanie. IPhone obsługuje najpóźniej OpenGL ES 2.0, co oznacza, że obsługuje on GLSL 1.2 najpóźniej i najwyraźniej liczby całkowite są obsługiwane tylko w GLSL 1.3 i nowszych wersjach. Próbowałem zmienić a_colorIndex na float. Nie spodziewałem się, że to zadziała, a tak się nie stało.
Jak określić indeks koloru dla każdego wierzchołka?
Może rozważyć wyszukiwanie tekstur, gdzie indeks jest float uv, zamiast wyszukiwania tablicy? Czy możesz rzucić/zaokrąglić float do int? – Tim
"co oznacza, że obsługuje on GLSL 1.2" Nie, nie robi tego. GL ES 2.0 oznacza, że obsługuje język cieniowania GLSL *** ES ***, który jest * inny * od języka GLSL na pulpicie. GLSL ES jest oparty na GLSL 1.2, ale to nie jest to samo. * –