Glfw ile Hata Kontrol - Mustafa Sabri OĞUZ

Duyurular

30 Mayıs 2014 Cuma

Glfw ile Hata Kontrol


Glfw ile programlama sırasında küçük bir yanlışlık sonucu hatalı programlama yapmış olabiliriz yada sistemden kaynaklanan hatalarda olabilir.
Peki hatanın nerede veya neyden kaynaklandığını nasıl tespit edebiliriz? Bunun için Glfw kütüphanesi harika bir fonksiyon sunmuş bize, gelin birlikte inceleyelim.


glfwSetErrorCallback Fonksiyonu

// Prototipi
GLFWerrorfun glfwSetErrorCallback(GLFWerrorfun cbfun)

// Kullanımı
glfwSetErrorCallback(GLFWerrorfun cbfun)

Bu fonksiyon, programımızda olası hata(lar) gerçekleştiğinde, geri çağrılacak fonksiyonu belirlemeye yarar.

Fonksiyon Parametresi;
  • [in] GLFWerrorfun cbfun - Geri çağırım fonksiyon adı.

Geri Çağırım Fonksiyonu

// Prototip
typedef void(* GLFWerrorfun )(int, const char *)

// Kullanımı
static void error_callback(int error, const char* description)
{
// Genel Açıklama
cout << "GLFW -> HATA : " << description << endl;

// Detaylı Açıklama
if(error == GLFW_NOT_INITIALIZED){
cout << "GLFW -> ERROR CODE : GLFW_NOT_INITIALIZED" << endl;
cout << "GLFW -> HATA SEBEBI : Glfw kutuphanesi baslatilmadi..." << endl << endl;
}
}

Bu geri çağırım fonksiyon, sağladığı iki değişken sayesinde hataların neden nasıl ve nereden kaynaklanmış olabileceğini anlatan, bir çıktı elde etmemizi sağlar.

Fonksiyon Parametreleri;
  • [out] int error - Hatanın sebebini ayrıştıran hata kodu
  • [out] const char* description - Hatanın genel ingilizce açıklaması

Not : 'error' parametresinin alabileceği değerler aşağıda ki tanımlanmış macrolardan biri olabilir.

Tanımlanmış Macrolar

  • GLFW_NOT_INITIALIZED - Glfw Kütüphanesi başlatılmadı.
  • GLFW_NO_CURRENT_CONTEXT - Varsayılan OpenGL içeriği bulunamadı.
  • GLFW_INVALID_ENUM - Fonksiyon parametrelerinden bir numeratör değer eksik girilmiş.
  • GLFW_INVALID_VALUE - Fonksiyon parametrelerinden bir değer eksik girilmiş.
  • GLFW_OUT_OF_MEMORY - Bellekte yeterli alan yok.
  • GLFW_API_UNAVAILABLE- Bilinmeyen bir api.
  • GLFW_VERSION_UNAVAILABLE - Sistem versiyonu bilinmiyor.
  • GLFW_PLATFORM_ERROR - Bilinmeyen işletim sistemi.
  • GLFW_FORMAT_UNAVAILABLE - Bilinmeyen format.

Örnek

int main(void)
{

/* GLFWwindow yapı (struct) türünden,
window pointer nesnesi tanımlanıyor. */
GLFWwindow* window;

// Hata gerçekleştiğinde çağırılacak fonksiyon (callback)
glfwSetErrorCallback(error_callback);
İlk olarak çağıracak fonksiyonu belirleyen 'glfwSetErrorCallback' fonksiyonunu 'main' fonksiyonu içinde ve pencere nesnesinden sonra tanımlıyoruz. Aynen üsteki gibi.

// Olası hataların çıktılandığı callback fonksiyonu
static void error_callback(int error, const char* description)
{
// Genel Açıklama
cout << "GLFW -> HATA : " << description << endl;

// Detaylı Açıklama
if(error == GLFW_NOT_INITIALIZED){
cout << "GLFW -> ERROR CODE : GLFW_NOT_INITIALIZED" << endl;
cout << "GLFW -> HATA SEBEBI : Glfw kutuphanesi baslatilmadi..." << endl << endl;
}
else if(error == GLFW_NO_CURRENT_CONTEXT){
cout << "GLFW -> ERROR CODE : GLFW_NO_CURRENT_CONTEXT" << endl;
cout << "GLFW -> HATA SEBEBI : Varsayilan OpenGL icerigi bulunamadi..." << endl << endl;
}
else if(error == GLFW_INVALID_ENUM){
cout << "GLFW -> ERROR CODE : GLFW_INVALID_ENUM" << endl;
cout << "GLFW -> HATA SEBEBI : Fonksiyon parametrelerinden bir numerator deger eksik girilmis..." << endl << endl;
}
else if(error == GLFW_INVALID_VALUE){
cout << "GLFW -> ERROR CODE : GLFW_INVALID_VALUE" << endl;
cout << "GLFW -> HATA SEBEBI : Fonksiyon parametrelerinden bir deger eksik girilmis..." << endl << endl;
}
else if(error == GLFW_OUT_OF_MEMORY){
cout << "GLFW -> ERROR CODE : GLFW_OUT_OF_MEMORY" << endl;
cout << "GLFW -> HATA SEBEBI : Bellekte yeterli alan yok..." << endl << endl;
}
else if(error == GLFW_API_UNAVAILABLE){
cout << "GLFW -> ERROR CODE : GLFW_API_UNAVAILABLE" << endl;
cout << "GLFW -> HATA SEBEBI : Bilinmeyen bir api..." << endl << endl;
}
else if(error == GLFW_VERSION_UNAVAILABLE){
cout << "GLFW -> ERROR CODE : GLFW_VERSION_UNAVAILABLE " << endl;
cout << "GLFW -> HATA SEBEBI : Sistem versiyonu bilinmiyor..." << endl << endl;
}
else if(error == GLFW_PLATFORM_ERROR){
cout << "GLFW -> ERROR CODE : GLFW_PLATFORM_ERROR" << endl;
cout << "GLFW -> HATA SEBEBI : Bilinmeyen isletim sistemi..." << endl << endl;
}
else if(error == GLFW_FORMAT_UNAVAILABLE){
cout << "GLFW -> ERROR CODE : GLFW_FORMAT_UNAVAILABLE" << endl;
cout << "GLFW -> HATA SEBEBI : Bilinmeyen format..." << endl << endl;
}
}
Ardından, olası hataları ayrıştırmayı ve konsol penceresine çıktı almak için tanımladığımız fonksiyonumuzu, diğer geri çağırım fonksiyonları gibi 'main' fonksiyonunun dışına tanımlayın.

Örnek Hata

/* Pencere modunda, pencere oluşturuluyor */
// glfwCreateWindow = Pencere yaratma fonksiyonu.
window = glfwCreateWindow(WIDTH, NULL, TITLE, NULL, NULL);
// Yükseklik değeri olmadığından parametre eksik değeri çıktılayacak.
// Error Code : GLFW_INVALID_VALUE
Pencere oluşturan fonksiyonumuzda bir yükseklik parametresine örnek olması açısından 'NULL' değerini girmiş olduk.

 Bitbucket: main.cpp dosyasını indirmek için tıklayın.

Referans:
http://www.glfw.org/docs/latest/group__error.html
http://www.glfw.org/docs/latest/group__errors.html

Hiç yorum yok:

Yorum Gönderme