2011-07-28 20 views
8

iphone için opengl es 2.0'daki arazim için bir köşe arabellek nesnesini nasıl kullanacağımı anlayamıyorum. Statik veriler bu yüzden VBO kullanarak hız artışı bekliyorum. Düzenli OpenGL'de, ekran listelerini shader'larla birlikte kullanıyorum. Ancak, opengl es 2.0'da vertex verilerini bir öznitelik olarak gölgelendiriciye göndermek zorundayım ve bunun VBO ile nasıl çalıştığını bilmiyorum. Köşe tamponu, arandığında vertex verilerini bağlamak için hangi özniteliğe sahip olduğunu nasıl bilir? Bu opengl es 2.0'da bile mümkün mü? Aksi halde, arazimin statik olmasını optimize etmenin başka yolları var mı?OpenGL ES 2.0 ve köşe arabellek nesneleri (VBO)

cevap

12

Tabii, bu özellik bir konuma sahiptir, aslında oldukça basittir ve köşe verileri bu gibi düz Vertex dizileri için glVertexAttribPointer ile beslenir:

VBOS için
float *vertices = ...; 
int loc = glGetAttribLocation(program, "position"); 
glVertexAttribPointer(loc, 3, GL_FLOAT, GL_FALSE, 0, vertices); 

, aynı, ama var arabellek GL_ARRAY_BUFFER hedefine bağlanır ve glVertexAttribPointer öğesinin son parametresi artık arabellek belleğinin belleğine kaydırılır. Ofset Bu durumda

glBindBuffer(GL_ARRAY_BUFFER, buffer); 
int loc = glGetAttribLocation(program, "position"); 
glVertexAttribPointer(loc, 3, GL_FLOAT, GL_FALSE, 0, 0); 

tepe veri tampon başlangıcında yüklenen olduğu varsayılarak, 0: işaretçi değeri kendisi ofset olarak yorumlanır. Ofset, bayt cinsinden ölçülerdir. Çizim daha sonra glDrawArrays/glDrawElements ile gerçekleştirilir. Bu yardımcı olur umarım!

+0

Evet, ihtiyacım olanı yapmalıyım. Yarın deneyeceğim. Teşekkürler! – Nitrex88

+0

İkinci örnekte "vertices" ile ne yapacağımı bulabilirsem belki bana yardımcı olabilirdi. Bir fikir? –

+1

@Sanphane köşeleri glBufferData kullanılarak bir VBO'ya yüklenmelidir. –