GLKView
yeniden boyutlandırıldığında, bu tamponların ve bu GLKView
bağlamında gerçekleşen bazı sahne arkası işlemleri vardır. Bu sahne arkası işlemleri gerçekleştirmek için gereken süre boyunca, GLKView
çizim doğru sonuçlar üretmiyor. Ben ekranda içeriğini var güncellemeniz gerektiğini her zaman, sadece o GLKView
üzerinde -setNeedsDisplay
çağrı yani benim senaryoda Bir GLKView'ın yeniden boyutlandırılması
setNeedsDisplay
olan bir
GLKView
var. Görüntüleri çizmek için
GLKView
kullanıyorum, bu yüzden farklı bir boyutta bir resim çizmem gerekirse,
GLKView
'un boyutunu da değiştirmem gerekiyor.
Sorun: GLKView
'un boyutunu değiştirdiğimde ve bu görünümde setNeedsDisplay
numaralı telefonu aradığımda, sonuç ekranda doğru değil. Bunun nedeni, GLKView
'un yeni görüntüyü çizmeye çalışmadan önce yeni boyut değişikliği tarafından başlatılan perde arkası işlemleri sonlandırılmamasıdır.
Bunu, GLKView
numaralı telefondan setNeedsDisplay
yerine performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0
arayarak buna bir çalışma buldum. Bu temel olarak ana iş parçacığı, tüm sahne arkası openGL işlemlerinin setNeedsDisplay
numaralı telefonu aramadan önce tamamlanmasını beklemeye zorlar. Bu her ne kadar iyi çalışıyor olsa da, daha iyi bir çözüm olup olmadığını merak ediyorum. Örneğin, devam etmeden önce iş parçacığının tüm openGL işlemlerinin tamamlanmasını beklemesi için bir openGL çağrısı var mı?
Sana sarılabilirim – dxb
Nasıl sıfırladınız? Onu sıfırdan mı yapıyorsun? Veya aramak için belirli bir yöntem var mı. – flainez
Benim durumumda, yeniden boyutlandırıldıktan sonra 'CIContext' nesnesini şöyle ayarlıyordum:' ci_context = [CIContext contextWithEAGLContext: glkView.context] 've sonra' '[glkView display]' yi çağırıyordu. Bunun uzun zaman önce olduğunu ve bunun hakkında öğrenmeyi sürdürmediğimi unutmayın, bu yüzden doğru bir yaklaşım olduğunu düşünmeyin. – spybart