iPhone 용 OpenGL 응용 프로그램을 개발 중입니다. 내 버텍스 쉐이더에서는 많은 수의 (그러나 전부는 아님) 꼭지점의 색을 한꺼번에 바꿀 수있는 방법이 필요하므로 색상 색인화에 착수했습니다. 이렇게하면 VBO를 정적으로두고 각 꼭지점을 반복하고 각 프레임 사이의 색상 정보를 수정하는 대신 단일 균일 변수를 수정할 수 있습니다.OpenGL ES 2.0에서 배열 인덱스에 정수를 제공합니까?
내 계획은 색상 배열을 사용하여 유니폼을 만들고 속성에 색인이 포함 된 정수를 추가하는 것입니다.
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 이상에서만 지원됩니다. a_colorIndex를 float로 변경해 보았습니다. 나는 그것이 작동한다고 기대하지 않았고, 그렇게하지 않았다.
각 꼭지점마다 색상 색인을 어떻게 지정할 수 있습니까?
어쩌면 배열 조회 대신 인덱스가 uv float 인 텍스처 조회를 고려해야할까요? 또는 float를 int로 캐스팅/반올림 할 수 있습니까? – Tim
"입니다. 이는 GLSL 1.2를 지원한다는 것을 의미합니다. GL ES 2.0은 데스크톱 GLSL 언어와 다른 * GLSL *** ES *** 쉐이딩 언어를 지원한다는 것을 의미합니다. GLSL ES는 GLSL 1.2를 기반으로 합니다만, 같은 것이 아닙니다. * –