2011-09-29 12 views
5

Ben GL10 kullanan bir 3d oyun yazıyorum, ancak mevcutsa GL11 veya GL20'yi desteklemek için uygulamayı istiyorum. 3'ü desteklemek için en iyi tasarım nedir? Yoksa bu bir aptalın işi ve ben sadece bir versiyonu desteklemeye odaklanmalı mıyım?LibGdx'te OpenGL ES GL10, GL11 ve GL20'yi nasıl destekleyebilirim?

Geçerli düşüncem, render() işlevimi renderGL10, renderGL11, renderGL20'ye bölmek ve mevcut GL örneğine göre uygun oluşturma işlevini çağırmaktır. Her render işlevinin içinde GL versiyonu için uygun bir yol; GL10 ve GL11 için muhtemelen üst üste gelecektir. Sorunumu çözmenin uygun bir yolu mu yoksa daha iyi bir yolu var mı?

public render(){ 
    if (Gdx.graphics.isGL20Available()){ 
    renderGL20(); 
    } else if (Gdx.graphics.isGL11Available()){ 
    renderGL11(); 
    } else { 
    renderGL10(); 
    } 
} 

DÜZENLEME: Çözüm: gl1.x varsa, GL10 da mevcuttur (ve Gdx.gl10 boş değil).

public render(){ 
    // Use Gdx.gl for any gl calls common to all versions 
    if (Gdx.graphics.isGL20Available()){ 
    // Use Gdx.GL20 for all gl calls 
    } else { 
    if (Gdx.graphics.isGL11Available()){ 
     // Use Gdx.gl11 for any gl11 call not supported by gl10 
    } 
    // Use Gdx.gl10 for all gl calls 
    } 
} 

cevap

10

gerçekte OpenGL ES 2.0 yolundaki gölgelendiricileri kullanıyor musunuz yoksa SpriteBatch itimat yok ve sizin için kirli ayrıntıları işlemek için eşlerinden şu şekildedir: Yani, benim işlemek kod genellikle yapılandırılmalıdır? Daha sonraki durumda, GLES 2.0'ın (bazı aygıtlarda daha yavaş olabilecek iki dokunun gücü dışında) gerçek bir yararı yoktur.

Genellikle GLES 1.x veya 2.0 arasında seçim yaparsınız. Eğer 1.x ile giderseniz, hiçbir şey yapmanız gerekmez. Eğer 2.0 kullanmak istiyorsanız, bir AndroidApplicationConfig oluşturmalısınız ve useGL20 bayrağını true olarak ayarlamanız gerekiyor. Cihazda GLES 2.0 desteklenmiyorsa, uygulamanızı çalıştırırsanız, libgdx 1.x'e geri döner. Daha sonra, eğer mevcutsa, GLES 2.0'ı kullanacak ve aksi takdirde 1.x'e düşecek olan yukarıdaki render döngüsünü kullanabilirsiniz. Doğrudan GLES çağrıları kullanmadıkça, 1.0 ve 1.x için ayrı yollara sahip olmanız olası değildir.

+1

Henüz kütüphanenin pek çok sanat bölümünü kullanmıyorum; Ben gles2.0 hakkında bilgi sahibi olmadan nasıl tasarlayacağımı veya libgdx'in gl1.x nasıl davranacağını araştırıyorum. Bu oyunu oyun programlama ve GLES bilgimi genişletmek için kullanıyorum, bu yüzden her ikisini de desteklemek istiyorum, böylece GLSL'yi öğrenmeye çalışıyorum. 1.x ile ilgili cevabınıza dayanarak, Android ve Jogl arka planlarının kaynağına hızlıca baktım ve gl11 kullanılabilir olduğunda Gdx.gl10 = Gdx.gl11; Gl11'in ayarlanması durumunda gl10'un boş olacağını umuyorum (2.0 mevcut olduğunda gl10 ve gl11 aynı şekilde null). Bu ve cevabınız gerçekten yardımcı oldu. – Doran