2013-02-26 20 views
6

Ben bir standart hale-to-doku kurulum kullanan bir çapraz platform kod tabanını (iOS ve Android) var. Her bir çerçeve (başlatıldıktan sonra), aşağıdaki sekans oluşur: Bir doku renk eki içeren framebuffer'ınRender-to-doku ve senkronizasyon

  1. glBindFramebuffer
  2. robot üzerinde bir şeyler varsayılan framebuffer'ın
  3. *
  4. glBindFramebuffer (Sunum 0, genellikle 2 iOS'taki) bağlanan doku
  5. kullanılarak
  6. oluşturulma ilk arabelleðine renk ek olarak doku
  7. glBindTextureiOS ve (emülatörü dahil) Bazı Android cihazlarda

, bu gayet iyi çalışıyor ve beklendiği gibi. Diğer cihazlarda (şu anda 4.0.4 çalışan bir Samsung Galaxy Note'un önünde oturuyor), doku kullanan ikinci aşamada render "jumpy" görünüyor. Diğer animasyonlar "jumpy" bitlerle aynı ekranda 60 fps hızında çalışmaya devam eder; Benim sonucum, hedef dokudaki değişikliklerin ikinci görüntü geçişinde her zaman görünmeyeceğidir.

bu teorinin test edilmesi için, yukarıda * işaretli adımında() bir glFinish yerleştirin. Artık tüm cihazlarda, bu doğru davranışa sahip. İlginç bir şekilde glFlush() sorunu çözmüyor. Ancak glFinish() pahalıdır ve bunun gerekli olması gerektiğini gösteren herhangi bir belge görmedim.

Yani, işte sorum: bir doku için render bittiğinde en-son-çizilmiş doku daha sonra geçer render kullanılabilir olduğundan emin olmak için ne yapmam gerekir?

+1

Makul OpenGL davranışı gibi gelmiyor. ES uzmanı değilim, ancak eminim ki ES (en azından spekülasyon) bu temel senkronizasyon davranışını değiştirmez. Bu işlem yapmazsa, arabellek yazma işleminin tamamlanmasına dayanmak gibi bir şeye güvenemediniz. Bu işlemler için başka açık senkronizasyon mekanizmaları yoktur, bu yüzden komut sırası sırayla düzgün bir şekilde senkronize edilmelidir. –

+0

Ve onu hiç kimsenin gözlemlemediğini mi anladım? Elbette çok iyi bir cihaz/yapıya sahip olabilir, ama bu hiç de eğlenceli değil. – addaon

cevap

3

açıkladığınız kod ince olmalıdır.

(örneğin EXT_map_buffer_range gibi) eşitleme davranışını dinlenmek uzantılarla etkinleştirerek tek bağlam kullanarak değil gibi, o zaman her komut o belirtilen aynı sırayla idam sanki yürütmek için görünmelidir sürece API ve API kullanımınızda, ondan okumadan önce dokuya görüntü verirsiniz.

muhtemelen bu cihazlara sürücü hataları karşılaşmış, göz önüne alındığında. Hangi cihazların sorunla karşılaştığını listeleyebilir misiniz? Muhtemelen ortak donanım veya sürücüler bulacaksınız.

İlgili konular