2010-05-03 14 views
8

Android SDK'nın GLSurfaceView.Renderer arabirimi bana GL10 tipi bir parametre olarak GL arabirimi verir. Bu arabirim, bazı özel iç jni sarmalayıcı sınıfı tarafından uygulanır. Ancak, tüm GL yöntemlerinin statik yöntemler olarak mevcut olduğu sınıf GLES10 da var. Aralarında önemli bir fark var mı? Yani onDrawFrame'in gl parametresini göz ardı edersem ve bunun yerine her yerde GLES10'un statik yöntemlerini kullanırsam ne olur?Android'de GL10 ve GLES10 arasındaki fark

İşte bir örnek. Bunun yerine bunu yapmanın:

void onDrawFrame(GL10 gl) 
{ 
    drawSomething(gl); 
} 

void drawSomething(GL10 gl) 
{ 
    gl.glLoadIdentity(); 
    ... 
} 

bunu yapabileceğimi:

void onDrawFrame(GL10 gl) 
{ 
    drawSomething(); 
} 

void drawSomething() 
{ 
    GLES10.glLoadIdentity(); 
    ... 
} 

avantajı tüm adlandırılan yöntemlere GL bağlamı geçmek zorunda kalmamasıdır. Ama hatta işe yarıyor (Ve işe yarıyor, ben denedim) Herhangi bir dezavantaj ve bunun böyle bir şey yapmama nedenleri olup olmadığını merak ediyorum.

cevap

6

Bu soruyu yanıtlamaya çalışırken kaynak kodun etrafında dolaşıyorum. Anlayabildiğim kadarıyla, OpenGL uygulamasını çağırmanın her iki yolu da aynı yerel işlev çağrısına gider. Ancak benim anlayışım, Java tarafındaki erişimin sanal yöntem gönderimi yerine statik yöntemlerle daha hızlı olmasıdır (bkz. http://developer.android.com/guide/practices/design/performance.html#prefer_static).

Tradeoff, yalnızca OpenGL'nin sonraki sürümlerinde kullanılabilen aramalara erişirken belirli miktarda bir tür denetimi feda etmenizdir. Aramaya nesne üzerinden eriştiğinizde önce bir oyuncu seçmeniz gerekir ve kullandığınız GL sürümü arayüzünü desteklemiyorsa bu yayın başarısız olur. Statik yöntemle çağrıya erişirken, bence ne olacak OpenGL hata durumunun ayarlanacağı, GLSurfaceView üzerinde hata ayıklama modunu ayarlamadıkça, algılanması zor olabilir.

Şu an için, statik yöntemlerle her şeye erişiyorum ve kod sabit olana kadar GLSurfaceView'da hata ayıklama modunu açık bırakacağım, bu noktada kapatacağım.

  • Kris