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
- glBindFramebuffer
- robot üzerinde bir şeyler varsayılan framebuffer'ın
- *
- glBindFramebuffer (Sunum 0, genellikle 2 iOS'taki) bağlanan doku kullanılarak
- oluşturulma ilk arabelleðine renk ek olarak doku
- 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?
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. –
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