#include <GLFW/glfw3.h>"main.cpp" dosyamıza program için temel olarak gerekli başlık (h, header) dosyalarını projemize dahil etmekle başlayalım. Eklediğimiz kodları satır satır olarak sırayla açıklamaya çalışayım.
#include <iostream>
using namespace std;
1. satır; Glfw kütüphanesini programa dahil ediyoruz. Böylece Glfw ve OpenGL fonksiyonlarını kullanabileceğiz. (OpenGL kütüphanesi, glfw3.h başlık içinde include edilmiş, olduğundan tekrar include etmenize gerek yoktur.)
2. satır; Öğrenme maksadıyla kullandığımız konsol penceresine gerekli girdi & çıktı (input & output) fonksiyonlarını eklemiş olduk. Böylece kodumuzda neler olup bittiğini takip edebiliriz.
4. satır; Std kütüphanesi aşırı yükleme fonksiyonlarını (overloading functions) kısaltma maksadıyla tanımlamış olduk. Böylece her cout, cin, endl ..vs fonksiyonları için std::cout şeklinde uzun uzun yazmak zorunda kalmamış olacağız.
Std kütüphanesi kullanım örneği :
// Normalde
std::cout << "Merhaba Dünya" << std::endl;
// Kısaltma sayesinde
using namespace std;
cout << "Merhaba Dünya" << endl;
Başlık dosyalarını tanımladıktan sonra;
int main(void)Her program için standart olan main fonksiyonumuzu tanımlıyoruz.
{
GLFWwindow* window;Oluşturacağımız her pencere için gerekli bilgileri tutacak, GLFWwindow yapı (struct) türünden bir gösterici (pointer) nesne tanımlamak zorundayız.
Resmi dökümanlarda GLFWwindow yapı türü hakkında fazla bilgi verilmemiş, Kısaca açıklamak gerekirse; Id, başlık, genişlik ve yükseklik gibi pencere bilgilerini tutan bir kalıp.
if (glfwInit())glfwInit: Glfw kütüphanesinin kullanımı için gerekli ilk değerleri atayan (kurulumu yapan, başlatan) fonksiyon diyebiliriz. Glfw fonksiyonlarını kullanmadan önce mutlaka tanımlanmış olması gerekir. Aksi halde hata mesajı alırsınız.
cout << "GLFW -> OK : Kutuphane basariyla baslatildi." << endl;
else{
cout << "GLFW -> HATA : Kutuphane baslatilamadi." << endl;
return -1;
}
Not: Proje sonunda Glfw kütüphanesini, glfwTerminate() fonksiyonu ile sonlandırmaya dikkat ediniz.
Yukarıda ki örneğimizde; fonksiyonu test ederek, sonucu konsol penceremize yazdırıyoruz. Böylece fonksiyondan kaynaklanabilecek hataları tespit edebiliriz.
window = glfwCreateWindow(640, 480, "Game2Lab : GLFW_Deneme Projesi", NULL, NULL);glfwCreateWindow: İşletim sistemlerinde pencere oluşturmaya yarayan fonksiyondur. Her 3D Grafik uygulamasında tanımlanması gereklidir.
if (window)
cout << "GLFW -> OK : Pencere olusturuldu." << endl;
else{
cout << "GLFW -> HATA : Pencere olusturulamadi." << endl;
glfwTerminate();
return -1;
}
Fonksiyon Parametreleri:
- int width - Genişlik, ekran üzerinde ki genişliğini belirler. 0'dan büyük bir değer almak zorundadır.
- int height - Yükseklik, ekran üzerinde ki yüksekliği belirler. 0'dan büyük bir değer almak zorundadır.
- const char * title - Pencere Başlığı, utf-8 karakter setini desteklemektedir.(Eğer IDE'niz destekliyorsa.)
- GLFWmonitor *monitor - Monitor ID'ye göre pencereyi Tam ekran (Fullscreen) yada NULL ile pencere modu tanımlayabilirsiniz.
- GLFWwindow *share - Pencere içeriğini diğer kaynaklarla paylaşmak
glfwMakeContextCurrent(window);glfwMakeContextCurrent: Bu fonksiyon içerik için tahsis edilen iş parçacığını (thread), oluşturduğumuz pencereyle bağlantısını kurar. Fonksiyon her bağlantıda bir iş parçacığı kullanabilir. glfwCreateWindow() fonksiyonundan sonra tanımlanması gerekmektedir.
Fonksiyon Parametresi :
- GLFWwindow *window - Önceden oluşturduğumuz ve kullanacağımız pencere nesnesi
while (!glfwWindowShouldClose(window))Bu kodda uygulamanın sonlanmaması ve değişen değerleri, işleme sokmak için bir döngü tanımladık. Pencere varlığını koruduğu sürece döngü çalışmaya devam edecektir.
{
/* Render Alani */
/* glfwSwapBuffers = Pencere içeriğindeki
ön ve arka bufferı değiştiren fonksiyon */
glfwSwapBuffers(window);
/* Pencere ve işlem mesajlarını,
mesaj kuyruğuna alan fonksiyon */
glfwPollEvents();
}
glfwWindowShouldClose: "Eğer pencere kapanmışsa" anlamını taşıyan fonksiyon. Kullanıcı pencereyi kendi isteğiyle sonlandırdığında geri dönüş(return) değeri "TRUE" olarak döner.
Fonksiyon Parametresi :
- GLFWwindow *window - Önceden oluşturduğumuz ve kullanacağımız pencere nesnesi
glfwSwapBuffers: Ön tamponu (front buffer) ve arka tamponla (back buffer) yer değiştiren fonksiyon. Bu açıklama ileri ki zamanlarda OpenGL dersleri ile daha da detaylandırılacak.
Fonksiyon Parametresi :
- GLFWwindow *window - Önceden oluşturduğumuz ve kullanacağımız pencere nesnesi
// Pencere nesnesi sonlandırılıyor.Son kodda, Pencere nesnesini sonlandırmak, glfwInit() fonksiyonu ile oluşturulan değerleri silmek ve programın başarılı bir şekilde sonuçlandığını ifade ediyoruz.
glfwDestroyWindow(window);
// Glfw Kütüphane Sonlandırılıyor.
glfwTerminate();
return 0;
glfwDestroyWindow: Bu fonksiyon pencere nesnesini ve içeriği sonlandırmaktadır. Bu fonksiyon tanımlandık dan sonra geriçağrım (callback) fonksiyonları çalışmayacaktır.
Fonksiyon Parametresi :
- GLFWwindow *window - Önceden oluşturduğumuz ve kullanacağımız pencere nesnesi
glfwTerminate: glfwInit() fonksiyonunun tersi işlem görmektedir. Sonlanan programın sistem hafızası (memory) üzerinde kalan nesne(leri) sonlandıran fonksiyon. Böylece sistem hafızasında ayrılan yeri, sisteme geri iade etmektedir.
Bitbucket: main.cpp dosyasını indirmek için tıklayın.
Referans:
http://www.glfw.org/documentation.html
Eline sağlık :)
YanıtlaSil