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)İlk olarak çağıracak fonksiyonu belirleyen 'glfwSetErrorCallback' fonksiyonunu 'main' fonksiyonu içinde ve pencere nesnesinden sonra tanımlıyoruz. Aynen üsteki gibi.
{
/* 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);
// Olası hataların çıktılandığı callback fonksiyonuArdı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.
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;
}
}
Örnek Hata
/* Pencere modunda, pencere oluşturuluyor */Pencere oluşturan fonksiyonumuzda bir yükseklik parametresine örnek olması açısından 'NULL' değerini girmiş olduk.
// 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
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önder