2011-09-08 31 views
5

OpenGL yeni soru köşe Dizilerin istenilen ömür: Böyle bir şey yaparsanız:OpenGL:

GLfloat vertices[] = { .... }; 
glVertexPointer(3, GL_FLOAT, 0, vertices); 
... set other stuff ... 
glDrawArrays(...); 

'köşeler' dizinin gerekli ömrü nedir? (Veya başka bir deyişle, OpenGL ilgili bölümün bir kopyasını alacaktır ve hangi noktada olacak?) Örneğin, dizinin örtük olarak olabileceği gibi yığında bulunması ya da glDrawArrays'den sonra var olması zorunludur () denir?

[Ne değer, ben özellikle iOS için programlama ve şu anda XCode varsayılan olarak ayarlanan şekilde bir OpenGL projesinde oluşturulan cer makinası yönteminin içine kod ile çalışıyorum için.]

cevap

2

Kişisel dizi gerekir glDrawArrays'e kadar yaşayabilir, daha sonra imha edilebilir ve bunun ima ettiği gibi, yığında bulunabilir. tepe dizisinin

1

içerikleri glDrawArrays/Elements diyoruz ve bu nedenle (artık glDrawArrays/Elements arayabilir veya gl...Pointer çağrısıyla tepe dizisi değişmez olana kadar) hala zaman bu noktada var olmaları gerekir her zaman kopyalanacak.

Vertex (ve diğer) verilerini GPU üzerinde depolamak ve sürücünün belleğini yönetmesine izin vermek (her çizimde veriyi aktarmaya gerek duymamanın performans iyileştirmesiyle birlikte), vertex buffer objects'u kullanabilirsiniz. Verilerinizi böyle bir VBO'ya kopyaladıktan sonra GPU belleğinde (veya sürücünün en uygun olduğunu düşündüğü yerde) bulunur ve aslında artık CPU kopyasına ihtiyacınız yoktur. Ancak bunlar basitleştirilmiş ifadelerdir, daha fazla bilgi için VBO'larda materyallere başvurunuz.

+0

Hmm Tamam, bir noktada arabellek nesnelerine bakacaktır. İlk OpenGL uygulamasında, bir bulmaca uygulaması için ekranda çok az sayıda temel öğe bulmak istiyorum. Ancak bu aşamada çok fazla kanama var, ama daha karmaşık bir şey yaptığımda kesinlikle buna bakacağım. –

+0

@Neil Yine de, küçük bir yan not olarak ifade edildi. Adım adım öğrenmek her zaman iyidir. –