Hata Ayıklama
Last updated
Last updated
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.
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