openGL, doku için ne kadar süre saklar?Android: OpenGL bir dokuyu ne kadar süreyle depolar?
Bir etkinlikten ayrıldığınızda doku belleği geri dönüştürülür mü?
Örneğin ben şu kodu varsa:mGL.glGenTextures(1, mTextures, 0);
mGL.glBindTexture(GL10.GL_TEXTURE_2D, mTextures[0]); // A bound texture is
// an active texture
//mGL.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, bitmap.getWidth(),bitmap.getHeight(), 0, GL10.GL_RGBA, GL10.GL_FLOAT, textures);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0,GL10.GL_RGBA, bitmap, 0);
// create nearest filtered texture
mGL.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
GL10.GL_LINEAR); // This is where the scaling algorithms are
mGL.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
GL10.GL_LINEAR); // This is where the scaling algorithms are
mGL.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S,
GL10.GL_CLAMP_TO_EDGE);
mGL.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T,
GL10.GL_CLAMP_TO_EDGE);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
//bitmap.recycle();
Log.v("GLSurfaceView", "Loading Texture Finished");
return mTextures[0];
ne tür değişiklikler dönüş değeri geçersiz kılar?
Bir faaliyeye geri döndüğümde tüm dokularmı yeniden yüklemek istemiyorum (kişinin bir telefon konuşması olduğunu söyleyin) çünkü bu gerçekten işleri yavaşlatıyor.
Güncelleme:
Bulunan @svdree tarafından aşağıda verilen cevabı onaylar Renderer belgelerinde, bu bilgi:
EGL Bağlam Kayıp EGL render bağlam kaybolur durumlar vardır. Bu genellikle cihaz uykuya geçtikten sonra uyanırsa olur. EGL içeriği kaybolduğunda, o içerikle ilişkili tüm OpenGL kaynakları (dokular gibi) otomatik olarak silinecektir. İşleme işleminin doğru bir şekilde devam ettirilmesi için, bir oluşturucu hala ihtiyaç duyduğu kayıp kaynakları yeniden oluşturmalıdır. OnSurfaceCreated (GL10, EGLConfig) yöntemi, bunu yapmak için uygun bir yerdir. dokular benim faaliyetleri özel GLRenderer bir başvuru olan bir taban etkinliğinden devralan alarak sorunu çözmeye çalıştılar bu soru göndermeden yana EGL Bağlamında
ilgili demektir
. Temel olarak, OpenGLSurface View'ı ileriye doğru iletebilirim (yani, bunu bir etkinlikte başlatıp bir sonraki adımda kullanabilirsiniz), ancak kapatma işleminden geçtikten sonra tekrar başlatılmaz.
Ayrıca, faaliyetlerinizi şeffaf hale getirmenin saydam etkinliğin altındaki openGL içeriğini koruduğunu da fark ettim (bu mantıklıdır, ancak yalnızca menüler ve benzerleri için yardımcı olur). Bununla birlikte, openGL aktivitesinin her zaman biraz daha saydam olmasını, böylece tüm aktivitelerinizde arka planda bulunan dokuları koruduğunu (muhtemelen yapacağım budur) her zaman mümkün olacaktır.
Bağlamı yeni bir aktiviteye geçirebilir veya bir şekilde kaydedebilir. Birinin bir çağrı alması, ardından başvuruma geri döndüğü ve tüm dokuların yeniden yüklenmesi gerektiği durum için endişeleniyorum. – tjb
Kaybedilen bir içerik kayboldu, kaydedilemiyor. Bir bağlamı "kaybetmek" genellikle sistemin başka yapacak bir şeye sahip olduğunu veya bir hata oluştuğunu ve tüm video kaynaklarını yeniden oluşturmanızı gerektirdiğini gösterir. – ssube
Bu, Android'de yaygın bir tasarım desenidür; Başka bir etkinlik ön tarafa geldiğinde, diğer faaliyetlerin bunları kullanabilmesi için kaynaklarınızı boşaltmanız gerekir (sınırlı kaynaklara sahip sistemlerde gerçekten yararlıdır). Bu GLSurfaceView'de yerleşik işlevselliktir. Ben GLSurfaceView kendi sürümü yazarak bu etrafında çalışabilirsiniz şüpheli, ama ben bunu tavsiye etmem. Ayrıca, kaynaklarınızı tekrar yüklerken görünür olan şeylere öncelik verirseniz, bu durumun yavaş olması gerekmez. – svdree