22 Mayıs 2017 Pazartesi

Free Pascal / Lazarus ile SDL Grafik OpenGL kullanımı



Simple DirectMedia Layer (SDL), 1998 yılında Sam Lantinga tarafından geliştirilmeye başlanmış açık kaynak bir grafik kütüphanesidir. Linux ve windows gibi birçok platform için kod geliştirebilme yeteneğine sahiptir. Üstelik bir değişiklikte yapmanız gerekmiyor. Bu kütüphane ilk olarak C dili için geliştirilmiş olup daha sonraları C++, Perl, Python ve Pascal için uyarlamaları yapılmıştır. Bizdeş şu anda Free Pascal da kullanımını dilimiz döndüğünce giriş niteliğinde anlatmaya çalışacağız.

Ben ubuntu-linux kullandığım için ubuntu üzerinde anlatımını yapacağım. Ancak windows üzerinde kullanımı hemen hemen aynıdır. Sonuçta indirdiğiniz başlık dosyalarını aynı şekilde fp ide yada lazarus ide ye referans gösteriyorsunuz. Ve kullanıyorsunuz.

1- Lazarus kurulumu:

https://www.lazarus-ide.org/ adresinden 3 adet deb uzantılı dosya indirilir. Sırayla “fpc_*”, “fpc-src-*” ve “lazarus-*” ile başlayan deb dosyaları terminal penceresinde kurulur.

sudo dpkg -i fpc_3.0.2-170225_amd64.deb
sudo dpkg -i fpc-src_3.0.2-170225_amd64.deb
sudo dpkg -i lazarus-project_1.6.4-0_amd64.deb

Bu yukardaki kurulumlarda eğer karşılanamayan bağımlılık hatası verirse hemen aşağıdaki kodu terminalden uygularız.

sudo apt-get -f install

Son komut ile kurum tamamlanmış olur.


2- SDL Yüklemesi:

2.1- SDL Başlık dosyalarının Yüklenmesi:

https://github.com/ev1313/Pascal-SDL-2-Headers adresinden free pascal içerisinde sdl2.dll fonksiyonlarının tanımlarının olduğu başlık dosyaları zip olarak indirilir. Bu zip dosyası örneğin /home/durali/Belgeler dizini içine açılır. Lazarus içinden kullanılmak için “proje->proje seçenekleri->Compiler Options->Paths->Other Unit Fileskısmında bu başlık dosylarının yolu eklenir. Artık sdl başvurularını kod içinde hatasız bir şekilde yapabiliriz.

2.2- SDL Kitaplığının işletim sistemine (Ubuntuya) yüklenmesi:

SDL kitaplığı dediğimiz windows sistemlerinde dll uzantılı dosyaların linuxteki karşılığı olan so uzantılı “dinamik bağlantı kitaplık” dosyalarıdır. Zaten başlık dosyalarımızda bu kitaplık dosyaları ile bir nevi köprü oluşturur. Yüklemesi için terminal penceresi açılarak aşağıdaki satırdaki kodlar uygulanır.

sudo apt-get install libsdl2*

SDL ile ilgili ne kadar geliştirme dosyaları varsa bu komut ile yüklenecektir.


3- SDL ile ilgili kodların lazarusta test edilmesi.

Bunun için aşağıdaki kodu boş bir proje yada pas dosyası içine yapıştırıp derlemeyi yapınız. Eğer düzgün derlendiği mesajını görüyorsanız kod doğru çalışıyor demektir.

program project1;

uses SDL2;

begin

//initilization of video subsystem
if SDL_Init( SDL_INIT_VIDEO ) < 0 then HALT;


//your SDL2 application/game


//shutting down video subsystem
SDL_Quit;

end.


Bu aşamalardan sonra hatasız bir şekilde SDL kitaplığı ile grafik yapmaya başlayabilirsiniz. Grafik programlama ne işimize yarar sorusuna en iyi cevap oyun programcılığı olacaktır. OpenGL in gücünü donanım aygıtlarınıza (grafik, ses, joystick vs.) doğrudan erişim sağlayarak hissetmenizi sağlayacaktır. Hatta diyebilirimki ufaktan oyun programcılığına merakınız varsa bunu SDL kitaplığı iyi bir şekilde sağlayacaktır. Şu da unutulmamalıdır ki bu bahsedilenler küçün oyun programcıkları için geçerlidir. Daha büyük oyunları da SDL ile yapabilirsiniz elbette. Ancak bu işler için oyun motoru dediğimiz devasa ide yapıları mevcuttur. Kısaca benim söyleyebileceklerim bunlardır. Zaten amacımda free pascal da bunun nasıl yapılabildiğiniz başlangıç düzeyinde anlatmaktı.

Size daha anlam ifade etmesi için aşağıdaki mini projeyide sunuyorum.

Bir dizin oluşturun. Misal oyun1 diye. İçine bir adet adı “fpsdl.bmp” olan bir bitmap dosyasını bir resim programıyla(pinta gibi) oluşturun. Lazarusta yeni bir konsol projesi yada boş bir dosya içine şu kodları yapıştırın.

program project1;

uses SDL2, SDL2_image;

var
sdlWindow1 : PSDL_Window;
sdlRenderer : PSDL_Renderer;
sdlTexture1 : PSDL_Texture;

begin

//initilization of video subsystem
if SDL_Init( SDL_INIT_VIDEO ) < 0 then HALT;

sdlWindow1 := SDL_CreateWindow( 'Window1', 50, 50, 500, 500, SDL_WINDOW_SHOWN );
if sdlWindow1 = nil then HALT;

sdlRenderer := SDL_CreateRenderer( sdlWindow1, -1, 0 );
if sdlRenderer = nil then HALT;

sdlTexture1 := IMG_LoadTexture( sdlRenderer, 'fpsdl.bmp' );
if sdlTexture1 = nil then HALT;
SDL_RenderCopy( sdlRenderer, sdlTexture1, nil, nil );
SDL_RenderPresent (sdlRenderer);
SDL_Delay( 2000 );

SDL_DestroyTexture( sdlTexture1 );
SDL_DestroyRenderer( sdlRenderer );
SDL_DestroyWindow ( sdlWindow1 );

//shutting down video subsystem
SDL_Quit;

end.


Bu kod ile oluşturulan bir pencere içersinde resim dosyamızın doğrudan grafik donanımına erişerek gösterilmesi hedeflenmiştir. Oluşturulan bu pencere 2 sn kadar gösterildikten sonra kapatılmaktadır. Bmp uzantılı dosyanız ile kod dosyasının aynı dizin içinde olmasına dikkat edin. Eğer herşeyi doğru yaptıysanız resim dosyanızı 2 sn görebiliyor olmalısınız.

Son olarak bu konuda en baba çalışmayı yapmış youtube rumuzu “badsectoracula” olan kişi tarafından çekilmiş 5 saatlik hızlandırılmış bir video var. Bu video free pascal da bir oyun nasıl yazılır sdl kullanarak anlatmış.



Benden bu kadar. Aşağıdaki kaynaklara göz atmayı unutmayınız. Allah a emanet olunuz..


duralikiraz.blogspot.com
Muvaffakiyet Allahtandır.”


Kaynaklar:


Hiç yorum yok:

Yorum Gönder