Od jakiegoś czasu przyglądam się rozwojowi Castle Game Engine. Jest to silnik do tworzenia gier napisany w języku Object Pascal. Programowałem wiele lat w tym języku więc mam do niego pewien sentyment. Prosta, czytelna składnia oraz krótkie czasy kompilacji powinny być bardzo pomocne w tworzeniu gier.
Problem z linuksem (Nvidią)
Niestety, uruchamiając kolejne przykłady, natrafiłem na mały problem, zamknięcie okna każdej aplikacji kończyło się wyjątkiem. Nie sądziłem aby twórcom umknął taki problem, więc stwierdziłem, że trzeba przyjrzeć się problemowi dokładniej. Wykonałem testy na wielu komputerach z różnymi systemami operacyjnymi.
Okazało się że problem występuje tylko na komputerach z linuksem z kartami graficznymi Nvidii (przetestowałem GTX 1060, GTX 650, GT 710). Na kartach Intela czy AMD wszystko było w porządku. W przypadku Nvidii zmiana sterowników z wersji 390 na 396, czy 430 nie pomagała.
Kolejne testy wykazały, że problem dotyczy także przykładów użycia OpenGL’a w Lazarusie (np. openglcontrol_demo) co oznaczało, że błąd nie leży w silniku.
Winnym okazała się jednak użyta wersja kompilatora Free Pascal. Do testów używałem kompilatora w wersji stabilnej 3.0.4. Na dzień 18.05.2019 nie działała także kompilacja z gałęzi fixes_3_0. Problem zniknął po aktualizacji kompilatora do wersji z gałęzi fixes_3_2. Jeżeli więc planujesz napisać jakąś grę lub aplikację korzystającą z OpenGL dla systemu Linux. Użyj nie opublikowanej jeszcze wersji 3.2. Więcej na temat gałęzi fixes_3_2 można poczytać tutaj.
Jak zaktualizować kompilator
Do aktualizacji kompilatora najlepiej użyć programu fpcupdeluxe, który automatyzuje cały proces do kilku kliknięć (gdy mamy zainstalowane zależności).
Zależności
Twój system operacyjny musi mieć zainstalowane subversion, oraz biblioteki GTK2, GtkGLExt z paczkami dla programistów(-dev). W systemach bazujących na debianie/ubuntu można to zrobić tak:
sudo apt install subversion libgtk2.0-dev libgtkglext1-dev
W twoim systemie nie musi być zainstalowany żaden kompilator pascala, wszystkie potrzebne pliki pobierze narzędzie fpcupdeluxe. Jeżeli masz już zainstalowany kompilator FPC możesz go spokojnie usunąć (łącznie z Lazarusem).
Foldery
Narzędzie fpcupdeluxe po użyciu stworzy obok pliku wykonywalnego kilka plików konfiguracyjnych, więc warto skopiować go do jakiegoś folderu. Osobiście preferuję folder fpc w katalogu domowym. Program fpcupdeluxe pozwala na instalację wielu różnych wersji kompilatora/Lazarusa obok siebie. Każdą taką wersję instaluje się jako osobny podfolder. Bez problemu możemy mieć wersję stabilną i fixes obok siebie np.:
- ~/fpc/stable – stabilne wersje FPC i Lazarusa
- ~/fpc/fixes32 – FPC z gałęzi fixes_3_2 i stabilną wersję Lazarusa
Instalacja kompilatora i Lazarusa
Po uruchomieniu fpcupdeluxe pojawi się następujące okno:
W oknie wybieramy folder instalacji (np. /home/uzytkownik/fpc/fixes32), wersję kompilatora (fixes3.2) oraz Lazarusa (stable) i klikamy „Install/update FPC+Laz”.
Po instalacji na pulpicie pojawi się ikona Lazarus_nazwa_podfolderu (w naszym przypadku jest to Lazarus_fixes32). Jest to link, z którego należy uruchamiać lazarusa.
Dostęp do kompilatora z konsoli
Aby uzyskać dostęp do kompilatora z konsoli należy dodać foldery plików wykonywalnych do zmiennej PATH oraz folder konfiguracji kompilatora do zmiennej PPC_CONFIG_PATH:
export PATH="/home/uzytkownik/fpc/fixes32/fpc/bin/x86_64-linux:${PATH}" export PPC_CONFIG_PATH="/home/uzytkownik/fpc/fixes32/fpc/bin/x86_64-linux"
Powyższe linijki możemy dodać do pliku .profile. Zmiany będą dostępne po przelogowaniu użytkownika.
Jeżeli chcemy używać wielu wersji kompilatora możemy zrobić sobie odpowiedni skrypt bash:
#!/bin/sh export PATH="/home/uzytkownik/fpc/fixes32/fpc/bin/x86_64-linux:${PATH}" export PPC_CONFIG_PATH="/home/uzytkownik/fpc/fixes32/fpc/bin/x86_64-linux"
I to wszystko, przykłady skompilowane za pomocą tej wersji kompilatora (fixes3.2) będą działać poprawnie na wszystkich komputerach z systemem Linux.