OpenGL ES kullanarak Android için küçük bir oyun motoru yazmayı deniyorum. Oyun nesnelerini güncelleyen bir Oyun Konusu oluşturdum ve GLThread ile sahneyi çiziyorum. Dokularmı GLSurfaceView'ın onSurfaceCreated yönteminde yüklemeniz gerektiğini okudum. Bunu takip ediyorum ama bazı hata ayıklama amaçları için, GLThread yerine Oyun İpliğimden doku yüklemeye çalışıyordum. Hatam olmadı ve doku ekranda görünmüyordu. Tüm günümü problemi çözmeye çalışarak geçirdim ve sonunda aşağıdaki hereOpenGL ES işlevleri neden başka bir iş parçacığından çağrılabilir?
"Sadece OpenGL'yi ana iş parçacığında kullandığınızdan emin olun." Çok önemli. Oyun Motorunuzda (başka bir iş parçacığında olabilir) gl-thread ile senkronize olmayan bir doku yükleme fonksiyonunu arayamazsınız. Yeni bir doku yüklemek için gl-thread'inizi işaretlemek için bir bayrak ayarlayın (örneğin, yeni bir doku yüklü olup olmadığını kontrol eden bir OnDrawFrame (GL gl) işlevini yerleştirebilirsiniz.
Kodumu değiştireceğim Bu yüzden dokular GL Thread'den yüklenecek. Ben sadece neden olduğunu anlayamadım Neden OpenGL fonksiyonları başka bir threadden çalışmıyor?
Konu oluşturmayı biliyorum ama ne olduğunu bilmiyorum Senkronizasyon, yukarıdaki ekstrakttan bahsetmektedir, "Oyun Motorunuzda (ki bu da başka bir iş parçacığında olabilir) gl-thread ile senkronize olmayan bir doku yükleme fonksiyonunu arayamaz." Tahminimce Oyun İpliği senkronize olmayabilir GL Thread ile. GL Thread'e senkronize edilen başka bir iplik oluşturmak mümkün mü? Böylece GL fonksiyonları bundan çağrılabilir mi? Bu kavramları anlamak için nelere dikkat etmeliyim?
Android'de çalışan bir adam değilim, ancak iOS'ta benzer uyarılar için iki neden var: biri şu anki GL bağlamının konuya özel olması, dolayısıyla içerik parasını iş parçacıklarına aktarmanız ve ikinci olmanız gerekir (daha fazlası daha önemlisi, eşzamanlama olmaksızın birden çok iplikten GL durumu ile çatışmanın, sadece GL bağlamı halini bozarak sona ermesidir. HTH. –
Bence bu sadece uyum sağlamayı önlemek –