Tôi đang phát triển một ứng dụng OpenGL cho iPhone. Trong shader vertex của tôi, tôi cần một cách để thay đổi màu sắc của một số lượng lớn (nhưng không phải tất cả) của các đỉnh của tôi, cùng một lúc, vì vậy tôi quyết định lập chỉ mục màu. Điều này sẽ cho phép tôi để lại VBO tĩnh, và sửa đổi một biến thống nhất duy nhất thay vì lặp qua mỗi đỉnh và sửa đổi thông tin màu sắc giữa mỗi khung.Cung cấp số nguyên cho chỉ mục mảng trong OpenGL ES 2.0?
Kế hoạch của tôi là tạo đồng phục với mảng màu, thêm số nguyên chứa chỉ mục trong thuộc tính. Đây là vertex shader của tôi:
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;
}
Điều này đặt ra một lỗi:
int can't be an in in the vertex shader
tôi đã làm một số nghiên cứu. IPhone hỗ trợ OpenGL ES 2.0 chậm nhất, có nghĩa là nó hỗ trợ GLSL 1.2 mới nhất, và các số nguyên dường như chỉ được hỗ trợ trong GLSL 1.3 trở lên. Tôi đã thử thay đổi a_colorIndex thành một phao. Tôi không mong đợi nó hoạt động, và nó không.
Làm cách nào để chỉ định chỉ mục màu cho mỗi đỉnh?
Có thể xem xét tra cứu kết cấu, trong đó chỉ mục của bạn là hình mờ, thay vì tra cứu mảng? Hoặc bạn có thể đúc/vòng phao vào một int? – Tim
"có nghĩa là nó hỗ trợ GLSL 1.2 mới nhất" Không, không. GL ES 2.0 có nghĩa là nó hỗ trợ ngôn ngữ tô bóng GLSL *** ES ***, có * khác * từ ngôn ngữ GLSL trên máy tính để bàn. GLSL ES dựa trên GLSL 1.2, nhưng chúng * không giống nhau. * –