Belirli ATI kartlarında (Radeon X1650, X1550 + ve diğerleri) zor bir sorun yaşıyorum.GlGetTexImage (atioglxx.dll) çağrılırken hata oluştu
mesajı şöyledir: "adresinin 00000000 arasında okuyun 'atioglxx.dll' modülünde adresinde 6959DD46 de Erişim ihlali"
Bu hat üzerinde olur:
glGetTexImage(GL_TEXTURE_2D,0,GL_RGBA,GL_FLOAT,P);
Not:
- En son grafik sürücüleri yüklüdür.
- Diğer kartlarda mükemmel çalışır. işaretçi P geçerlidir
- Bu ve
- Tekstüre etkinleştirildiğinde görüntü tutmak için yeterli bellek tahsis: Burada
I (kodunda iddialar ile) şimdiye kadar denedim budur: glIsEnabled (GL_TEXTURE_2D) güncel bağlanmış doku beklemek biri olduğunu
- Testi: glGetIntegerv (GL_TEXTURE_2D_BINDING) güncel bağlanmış doku beklemek boyutlara sahip olduğu
- Testi: glGetTexLevelParameteriv (GL_TEXTURE_WI DTH/YÜKSEKLİK) hiç hata rapor edildiğini
- Testi: glGetError'da
Tüm bu testi geçer ve daha sonra hala iletiyle başarısız olur.
Her şeyi denediğimi ve daha fazla fikrim olmadığını hissediyorum. Umarım burada bazı GL-guru yardımcı olabilir!
DÜZENLEME: http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=295137#Post295137
Ben de GL_PACK_ALIGNMENT çalıştı ve yardım etmedi:
sonra muhtemelen ben de burada bu konuda yayınlanan bir sürücü hata olduğunu sonucuna vardı.
Daha fazla araştırma yaparak, yalnızca daha önce glCopyTexSubImage2D çağrısı kullanarak piksellerle doldurduğum dokularda olduğunu gördüm. Bu nedenle glCopyTexSubImage2d çağrısını glReadPixels ve ardından glTexImage2D çağrıları ile değiştirerek bir geçici çözüm üretebilirim. Sen GL_PACK_ALIGNEMENT özen olabilir
{
glCopyTexSubImage2D cannot be used here because the combination of calling
glCopyTexSubImage2D and then later glGetTexImage on the same texture causes
a crash in atioglxx.dll on ATI Radeon X1650 and X1550.
Instead we copy to the main memory first and then update.
}
// glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, PixelWidth, PixelHeight); //**
GetMem(P, PixelWidth * PixelHeight * 4);
glReadPixels(0, 0, PixelWidth, PixelHeight, GL_RGBA, GL_UNSIGNED_BYTE, P);
SetMemory(P,GL_RGBA,GL_UNSIGNED_BYTE);
Sürücü hatası gibi görünüyor. ATI'nin OpenGL sürücüleri istikrar açısından kötü bir üne sahiptir. Birçok program tarafından kullanılmayan özellikler bozulabilir. Doku görüntüsünü almak, nadiren kullanılan bir özelliktir. Başarısızlığın olası tüm nedenlerini zaten ortadan kaldırdığınıza göre, bunu AMD/ATI'ye bir hata olarak bildirmenizi öneririm. – datenwolf
Teşekkürler, opengl.org forum forumuna mesaj göndereceğiz. Orada birkaç AMD mühendisinin faaliyeti var gibi görünüyor. Tüm doğru şeyleri denemek ve bunları sorunuzda listelemek için –
+1. Sürücü hatası gibi geldiğini kabul ediyorum. Bir ATI geliştiricisinden bir şey duyarsanız bu soruyu güncellediğinizden emin olun :) – luke