Skip to content
  • English
  • Polski
Digital Karabela
Digital Karabela
Primary Navigation Menu
Menu
  • Strona główna
  • Produkty
  • DevBlog
  • Castle Engine
  • Kurs bash
  • O firmie

Free Pascal i OpenGL – wyjątek przy zamknięciu okna

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:

Narzędzie fpcupdeluxe

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.

2019-05-18
Poprzedni wpis: Godot 3.1.1 – Ważne poprawki dla gier mobilnych i sieciowych oraz nowe funkcje audio
Następny wpis: Mingw-w64: Jak naprawić błąd „File too big/too many sections”

Wypróbuj moją nową grę! Zupełnie za darmo!

Logo Bricks Color Pick

Bricks Color Pick to zupełnie nowe podejscie do klasycznego arkanoida! Brak dolnej belki! Zasady gry są bardzo proste: Twoim zadaniem jest zmienianie koloru piłki na kolor cegły, z którą piłka się zderzy. Gdy kolor będzie taki sam cegła zostanie zniszczona, w przeciwnym wypadku stracisz życie.

Pobierz z Google Play

Zrzut ekranu pozimu 37/40 5-6 kolorów

Dodatkowo można zmienić kierunek ruchu piłki, przez co nie musimy czekać wieczność aż trafi w ostatni blok.

QR Code Google Play Bricks Color Pick

Zrzut ekranu poziom 62/80 (Tryb relaks)

Ostatnie wpisy

  • Jak skompilować bibliotekę OpenAL z Oboe dla systemu Android
  • Lazarus 2.0.12 wydany
  • Jak naprawić zamrażanie GUI LMMS w systemie Linux?
  • Jak zaktualizować wine do wersji 5.0.0 w Linux Mint 19 / Ubuntu 18
  • Agile Commander 1.2.3 wydany!

Kategorie

  • DevBlog
  • Linux
    • Kurs bash
    • Narzędzie WoeUSB
  • Programowanie
    • Język D (dlang)
      • Kontrolki DlangUI
    • Język Object Pascal
      • Lazarus (pl)
    • Narzędzie make
  • Promocja
  • Tworzenie gier
    • Castle Engine (pl)
    • Godot
  • Windows 10
    • Narzędzie WoeUSB

Produkty:
Agile Commander
Bricks Color Pick

 

 

Digital Karabela – Andrzej Kilijański
76-015 Wyszebórz 32, Poland
https://digitalkarabela.com
Kontakt
Polityka prywatności