Hata Ayıklama
Grafik programlama çok eğlenceli olabilir, ancak bir şey doğru görünmediğinde veya belki de hiç sahneleme yapılmadığında büyük bir hayal kırıklığı ile sonuçlanabilir. Yaptığımız şeylerin çoğu pikselleri yönlendirdiğinden, bir şeyin olması gerektiği gibi çalışmadığında hatanın nedenini bulmak zor olabilir. Bu tür görsel hataların ayıklanması (ing. debugging), CPU' da hata ayıklama yaparken alışık olduğumuzdan farklıdır. Konsola yazdırabileceğimiz şeyler yoktur, GLSL kodunda ayarlanacak kesim noktası (ing. breakpoint) yoktur ve GPU yürütme durumunu kolayca kontrol etmenin bir yolu da yoktur.
Bu bölümde OpenGL programınızda hata ayıklamanın çeşitli tekniklerini ve püf noktalarını inceleyeceğiz. OpenGL' de hata ayıklama yapmak çok zor değildir ve tekniklerini kavramak uzun vadede kesinlikle işe yarar.
glGetError()
Yanlış bir şekilde OpenGL çağrısında bulunduğunuz anda (herhangi bir ilk bağlama işlemi olmadan bir arabellek yapılandırmak gibi), bildirimde bulunacak ve sahne arkasında bir veya daha fazla kullanıcı kaynaklı hata bayrağı oluşturacaktır. Hata bayraklarını ayarlayan ve OpenGL yanlış kullanılırsa bir hata değeri döndüren glGetError adlı bir işlevi kullanarak bu hata bayraklarını sorgulayabiliriz:
çağrıldığı an, bir hata bayrağı döndürür veya hiç hata vermez. öğesinin döndüğü hata kodları aşağıda listelenmiştir:
Bayrak | Hata Kodu | Tanım |
GL_NO_ERROR | 0 | glGetError' a son çağrıdan bu yana kullanıcı hatası bildirilmediğini ifade eder. |
GL_INVALID_ENUM | 1280 | Bir numaralandırma (ing. enumeration) parametresi kuralına uygun olmadığında bu hata kodu döndürülür. |
GL_INVALID_VALUE | 1281 | Bir değer (ing. value) parametresi kuralına uygun olmadığında bu hata kodu döndürülür. |
GL_INVALID_OPERATION | 1282 | Bir komutun durumunu, verilen parametreler için kuralına uygun olmadığında bu hata kodu döndürülür. |
GL_STACK_OVERFLOW | 1283 | Yığına ekleme işlemi bir yığın taşmasına neden olduğunda bu hata kodu döndürülür. |
GL_STACK_UNDERFLOW | 1284 | Yığın en düşük noktasındayken, yığın patlama işlemi gerçekleştiğinde bu hata kodu döndürülür. |
GL_OUT_OF_MEMORY | 1285 | Bellek ayırma işlemi sırasında yeterli bellek ayrılamadığında bu hata kodu döndürülür. |
GL_INVALID_FRAMEBUFFER_OPERATION | 1286 | Tamamlanmamış bir framebuffer okurken veya yazarken bu hata kodu döndürülür. |
OpenGL' in işlev dokümantasyonunda, bir işlevin yanlış kullanıldığı anda oluşturduğu hata kodlarını her zaman bulabilirsiniz. Örneğin, glBindTexture işlevinin belgelerine bakarsanız, oluşturabileceği tüm kullanıcı hata kodlarını Hatalar bölümünde bulabilirsiniz.
Bir hata bayrağı döndürüldüğü anda başka hata bayrağı bildirilmez. Ayrıca, glGetError çağrıldığı an tüm hata bayraklarını (veya dağıtılmış bir sistemde yalnızca bir tanesini ) temizler. Bunun anlamı, her karenin sonunda glGetError öğesini bir kez çağırırsanız ve bir hata döndürürse, bunun tek hata olduğu sonucuna varamazsınız ve hatanın kaynağı çerçevenin herhangi bir yerinde olabileceğidir.
Orijinal Kaynak: Debugging
Çeviri: Nezihe Sözen
Last updated