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:


24 Nisan 2017 Pazartesi

Lazarus Çapraz Derleme (Cross Compile) Linux’ten Windows 64 bit derlemesi ve Ayarlanması



Neden Çapraz Derleme (Cross Compile) ?

Lazarus üzerinde uygulama geliştiren birçoğumuzun yapması gereken bir işlemdir çapraz derleme. Diğer türlü eğer çapraz derleme yapmıyorsanı bir adet windows işletim sisteminin bilgisayarınızda kurulu olması gerekiyor. Ve windows üzerinde ayrıca bir adet “lazarus 64 bit for windows” yazılımının da kurulması gerekmekte. Normal şartlar altında pek sıkıntılı bir durum gibi gözükmesede hem linux hemde windows 64 bit platformuna yazılım geliştiren bir yazılımcı için bunlar epey bir külfet oluşturmakta. Sürekli işletim sistemleri arasında geçiş yapmanız gerekmekte. Bunun yanısıra tabiki birde windows 64 bit işletim sistemi için lisansa ihtiyacınız olacak. Eğer yazılımınızı windows üzerinde denemeniz gerekirse windowsun deneme sürümleriyle bunu yapmanızda bir beis yoktur.

Neden Lazarus?

Delphi 10.2 Berlin sürümünde hem windows hemde linux için çapraz derleme tek adımda yapılabilmekte. Peki neden Lazarus? Cevap elbette çok basit; Delphi 10.2 berlin yeni geliştirici için lisans ücreti 24.04.2017 tarihi itibariyle kdv dahil 22.381,51 TL dir. Eğer bu lisans ücretinden daha çok paralar kazanan kişi yada kurumsanız tabiki Delphi 10.2 Berlin derim. Fakat öbür türlü bu lisansı ödemeden kaçak geliştirme yapmak size ciddi olarak zarar verecektir. Bu riske girmektente Lazarus tamamen ücretsiz olarak üstelik ARM da dahil bir sürü platform için çapraz derleme yapabilmekte ve hatırı sayılır bir kararlılıkta iş yapmakta. Bu yüzden Lazarus diyoruz :)

Çapraz Derleme için Gerekli Ayarlamalar

Ben ubuntu 64 bit 16.04.2 dağıtımını kullanmaktayım. Fakat bu anlatacakların herhangi bir linux dağıtımı için de geçerli olacaktır.

Eğer bilgisayarınızda kurulu değilse ilk önce lazarusu bilgisayarımıza kurmamız gerekiyor. Bunun için bi-dünya anlatım ve video internette mevcuttur. Lazarus’un kurulu olduğunu varsayarak;

Öncelikle bir terminal penceresi açıyoruz. Ubuntu için kısayolu Ctrl+Alt + T.

Daha sonra fpcrsrc nin hangi sürümü kurulduysa o dizine terminalden geçilir. Bende Lazarus 1.6.4 ile birlikte kurulan 3.0.2 sürümü mevcut

cd /usr/lib/fpc/3.0.2/

- Akabinde ilk “make install” işlemi dosyaların oluşturulacağı dizin belirtilerek yapılır. Oluşturma dizini /home/cross olsun. Terminale aşağıdakileri yazıyoruz:

sudo make install OS_TARGET=win64 CPU_TARGET=x86_64 INSTALL_PREFIX=~/cross

- Yukardaki işlemden sonra aşağıdaki “make crossinstall” işlemi yapılır.

sudo make crossinstall OS_TARGET=win64 CPU_TARGET=x86_64

- son olarak /home/cross dizinimize oluşturduğumuz win64 derleyici dosyaları /usr/lib/fpc/3.0.2/units dizini altına kopyalanır.

sudo cp ~/cross/lib/fpc/3.0.2/units/x86_64/ /usr/lib/fpc/3.0.2/units/ -r


Bu son adımdan sonra cross compile için altyapı hazır vaziyettedir. Bundan sonra lazarus ekranından hedef derleyiciyi seçip
derleme işlemini yapabiliriz. Bunun için şunları yapalım:

Lazarusta Çapraz Derleme İşlemi

-Lazarus'u çalıştırıyoruz
-Derlemek istediğimiz projemizi açıyoruz.
-Menuden
* Proje -> Proje Seçenekleri -> Compiler Options -> Config and Target
* Yan taraftaki Hedef İşletim Sistemi kısmını win64 yapıyoruz.
* OK butonun tıklayarak seçim işlemini tamamlıyoruz.

Geriye sadece Run menüsünden Compile’ e tıklayıp derlemek kalıyor. Bu işlemden sonra exe uzantılı bir dosyanın proje dizininde oluştuğunu görebilirsiniz. Hepsi bukadar.


Farklı Platformlar için Ayarlama Farklılıkları

Eğer 32 bit windows için çapraz derlemeye ihtiyacınız varsa
OS_TARGET=win32
CPU_TARGET=i386

olarak ayarlayarak aynı işlemleri yapabilirsiniz. Tabiki bu durumda kopyalama işlemi satırıda şu şekilde olacaktır:

sudo cp ~/cross/lib/fpc/3.0.2/units/i386-win32/ /usr/lib/fpc/3.0.2/units/ -r


Bunu dışında ARM, MacOsX, BSD, Solaris, WinCe, Android, Java bunun gibi bir sürü platform için rahatlıkla çapraz derleme yapabilirsiniz. Aşağıda vereceğim kaynaklarda bunun nasıl yapıldığı orijinal şekliyle anlatılmaktadır. Ayrıca güzel video anlatımından dolayı Sales Oliveira arkadaşıma teşekkürü bir borç bilirim.

Benden bukadar. Allah’a emanet olunuz.

Duralikiraz.blogspot.com
Muvaffakiyet Allahtandır.”

Kaynaklar:

https://www.youtube.com/watch?v=LpicDL-1eV0