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:

GLenum glGetError(); 

glGetError\red{glGetError} çağrıldığı an, bir hata bayrağı döndürür veya hiç hata vermez.glGetError\red{glGetError} öğ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