2016-03-24 18 views
4

Her yerde çalışan, ancak kendimi çok fazla kısıtlamayan bazı opengl kodları yazmaya çalışıyorum.
Opengles2'yi sadece onu destekleyen aygıtlarda ve desteklenen yerlerde opengl core kullanmak istedim.OpenGL OpenGLES2 ile uyumluluk

Ayrıca, çalışma zamanında (kullanılabiliyorsa tabii ki) hangisini kullanacağımı seçmek istedim.

Sorularım şunlardır: Sonra OpenGL kütüphanesi ile sunulur sunulmaz her zaman kodumu bağlamak ve eğer
ya bir GLES2 veya GL çekirdek bağlamı oluşturmak, GLES2 bağlam GLESv2 kütüphanesinde tam olarak aynı davranacaktır? Bunun yansımaları ne olacak? Örneğin, GLESv2 BGRA doku formatlarını tanımlamıyor, bu yüzden hepsini RGBA'ya dönüştürmem gerekiyor. Bu bir zorluk değil, ama alternatifleri bilmekle ilgileniyorum.

Kitaplığı dinamik olarak yüklemeyi ve kullanılan tüm işlevler işaretleyicilerini yüklemeyi düşündüm, ancak bu daha kolay bir cevaba sahip olabilecek bir şey için çok büyük bir iş. Bu durumda, glext.h dosyasını dahil eder ve kullanılan işlevler için tüm işlev işaretleyicilerini bildirir ve bunları doldururdum. Burada sorun, glext'in herhangi bir veri türü tanımlamamasıdır (glenum, vb), bu yüzden her zaman gl.h. Her ikisini de dahil ederek, gl.h işlev bildirimini VE işlev işaretçisi bildirimi alıyorum, bu nedenle işlev işaretçileri için genel ad alanını kullanamadım ... Ve hatta bazı işlevler (glGetError gibi) görünmüyor onların işlev işaretçisi için ilişkili bir typedef sahip olmak.

GLEW hakkında biliyorum, ancak maalesef, çoğu linux dağıtımı hala GLES2 uyumlu olmayan bir GLEW sürümünü dağıtır (debian, sana bakıyorum). Sadece segfaultlar.

Bunu nasıl yaparsınız? Opengl işlevi bağlantı için başka herhangi bir yaklaşım?

cevap

1

Her donanım sağlayıcısı kendi sürümü olduğundan her türlü OpenGL alt kümesinde çalışacağım havacılık sektöründe çalışıyorum. (Tam olarak belgelenmiş bir profille çalışmayı çok isterim ... iyi ... bir şey.) Benzer sorunlarımız var gibi görünüyor. Sana şu ana kadar öğrendiklerimi vereceğim.

Her şeyden önce, elde edebileceğiniz tüm profillerin en büyük ve en üst sıralarına doğru geliştirmek isteyeceksiniz. Donanım satıcınız tarafından sağlanan OpenGL başlıklarının en son sürümünü kullanın. Bu şekilde programınız en azından derleme kısmını çözecektir.

BGRA macro/enum, GLESv2 çalışma zamanınızın bir parçası olacak, ancak platformunuz yalnızca RGBA'yı desteklemesi koşuluyla çalışma zamanında kullanamayacağınızdan emin olabilirsiniz.

Platform yeteneklerine dayalı çalışma zamanı kararları, OpenGL uzantı listesine dayalı olarak yapılır. Uzatma listesini, uygulama ne olursa olsun karşılaştırın, desteklenmeyen dalları devre dışı bırakın ve desteklenen dalları etkinleştirin. OpenGL ve GLES'i bu şekilde ayırt edebiliyorsunuz.