2012-07-08 13 views
6

iPhone için bir OpenGL uygulaması geliştiriyorum. Benim köşe gölgelendiricimde, bir kerede çok sayıda (ama hepsinin değil) renginin rengini değiştirmenin bir yoluna ihtiyacım var, bu yüzden renk dizilemeye karar verdim. Bu, VBO statikini terk etmeme ve her bir köşe boyunca döngü yapmaktan ve her bir çerçeve arasındaki renk bilgisini değiştirmek yerine tek bir değişken değişkeni değiştirmeme izin verecektir.OpenGL ES 2.0'da bir dizi dizini için bir tam sayı sağlayın.

Planım, bir renk dizisi ile bir eşitlik oluşturmak, özniteliklere bir dizin içeren bir tamsayı eklemektir.

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; 
} 

Bu bir hata tutarsa: Ben biraz araştırma yaptım

int can't be an in in the vertex shader

İşte benim tepe tarayıcı olduğunu. IPhone en geç OpenGL ES 2.0'ı destekliyor, bu da en geç GLSL 1.2'yi desteklediği anlamına geliyor ve görünüşte tamsayılar sadece GLSL 1.3 ve sonrasında destekleniyor. A_colorIndex'i bir float'a değiştirmeyi denedim. Çalışmasını beklemiyordum ve yapmadı.

Her köşe için bir renk dizini nasıl belirleyebilirim?

+0

Dizininizin bir dizi arama yerine dizinin nerede olduğu bir doku aramasını düşünebilir misiniz? Ya da şamandırayı bir int için çevirebilir misin? – Tim

+1

"Bu, en son" GLSL 1.2'yi destekliyor "anlamına geliyor. GL ES 2.0, masaüstü GLSL dilinden * farklı * olan GLSL *** ES *** gölgelendirme dilini desteklediği anlamına gelir. GLSL ES GLSL 1.2 dayalı, ancak konum olduğunu * aynı değiller. * –

cevap

4

Özelliği şamandıra olarak belirtin. Şamandıraları diziler halinde diziler halinde kullanabilirsiniz.

+0

Bu hata Söylediklerine yaparsanız "Dizin ifadesi float tipi ancak ayrılmaz türde olmalıdır sahiptir" olsun. Dizi [int (fIndex)] yapmak güvenli midir yoksa hassas hatalara mı girer? – weezor

+0

Weezor ile aynı konuya giriyorum ("... tümleşik tip olmalı") (en azından bazı durumlarda). Netleştirmek güzel olurdu. –

+0

ES2 dili spec diyor ki: "Array öğelerine, türü tamsayı olan bir ifade kullanılarak erişilir." Öyleyse, evet, int için (esnek platformlar kapalı bir oyuncu yaparlar, bu yüzden cevap muhtemelen cevap makinesinin makinesinde çalışır). – kiwibonga