glReadPixels
sizin için çok yavaşsa, o zaman glCopyTexImage2D
ve glCopyTexSubImage2D
çok daha hızlı olmayacaktır. IOS gibi framebuffer nesnelerini destekleyen platformlarda, GPU tarafından oluşturulan görüntü verilerinin bir dokuya alınması için önerilen (yani daha hızlı) yol, bu dokuyu bir framebuffer nesnesinin renk eki olarak kullanması ve doğrudan ona işlenmesidir. Bununla birlikte, eğer hala bu yöntemi takip etmek istiyorsanız, bunu düzeltmek için yapmanız gerekenler aşağıda belirtilmiştir:
İlk olarak, kötü argümanlar glCopyTexImage2D
'a geçiyorsunuz. Üçüncü bağımsız değişken olan internalformat
, 0
yerine GL_RGBA
olmalıdır. glCopyTexImage2D
'u aradıktan sonra glGetError
'u aradıysanız, muhtemelen GL_INVALID_OPERATION
'u kazanmış olursunuz. glCopyTexImage2D ve glCopyTexSubImage2D için OpenGL ES 1.1 sayfalarına bakın.
İkincisi, daha önce gözlemlediğiniz gibi, glCopyTexImage2D
, genişlik ve yükseklik bağımsız değişkenlerinin de ikisinin birden olmasını gerektirir. Bununla başa çıkmanın doğru yolu, glTexImage2D
kullanarak bir doku görüntüsünü ayırmaktır (pixels
için NULL
'u buradan geçirebilirsiniz), daha sonra, çerçevebuffer içeriğinizi bir dikdörtgene kopyalamak için glCopyTexSubImage2D
kullanın. glCopyTexSubImage2D
'un internalformat
argümanını almamasına dikkat edin; çünkü dokunun bir alt dikdörtgenini güncellediği için, dokunun mevcut biçimini kullanır.
Kayıt için glGetTexImage, OpenGL ES 1.1 veya 2.0'da mevcut değil, bu nedenle örtülü bir bildirim alıyorsunuz.
Sorun, doku oluştururken mi yoksa daha sonra oluşturuluyor mu, biliyor musunuz? "GlGopyTexImage2D" ve ardından "glGetTexImage" ifadesi "glReadPixels" ile aynı sonucu veriyor mu? (performans nedenleriyle uzun vadeli bir çözüm olarak değil, dokuda neler olduğunu görmek için bir sorun giderme adımı olarak önerilir) –
2'ye kadar güç kısıtlaması için, doku bir güçle ayırmak için 'glTexImage2D 'özelliğini kullanabilirsiniz. -o-2 boyutu ve veri için 'NULL' iletme, sonra gç-of-2 boyutlarına izin veren' glCopyTexSubImage2D'. –