Ich will gerne in die Programmierung von OpenGL einsteigen. Eigentlich will ich das mit Freepascal tun, oder eventuell aber mit Unterstützung der Lazarus-IDE... Wie ich zum (ersten) Ziel komme (Grafiken im Vollbild anzeigen lassen), ist mir eigentlich egal...
Eigentlich hab ich bis jetzt aber immer eher in Standard-Pascal programmiert, und zwar nicht allzu aufwändiges Zeugs. Auf diesen Kenntnissen würde ich gerne aufbauen, um unter Windows Grafiken und 3D-Geschichten darzustellen, die über die Fähigkeiten von Graph.TPU hinausgehen.

Dazu habe ich im Internet nach Tutorials gesucht, und bin auf die Seite
http://www.friends-of-fpc.org/" onclick="window.open(this.href);return false;
gestoßen.
Und hierbei auf das Tutorial, von dem die englische Version empfohlen wird.
http://www.friends-of-fpc.org/tutorials ... index.html" onclick="window.open(this.href);return false;
Das Problem: Es wurde offenbar für eine 0.9.x-Version von Freepascal verfasst, und seitdem hat sich wohl einiges geändert! So bekomme ich das Beispielprogramm
http://www.friends-of-fpc.org/tutorials ... ource01.pp" onclick="window.open(this.href);return false;
unter Freepascal nicht zum Laufen. Herausgefunden habe ich, dass es den Typ MSG nicht mehr gibt und dass dieser durch TMSG zu ersetzen ist. Das andere Problem ist der Abschnitt
Code: Alles auswählen
hWindow := CreateWindow('GLWindow',
pcApplicationName,
WS_CAPTION OR WS_POPUPWINDOW OR WS_VISIBLE OR WS_CLIPSIBLINGS OR WS_CLIPCHILDREN,
cw_UseDefault,
cw_UseDefault,
width,
height,
0, 0,
system.MainInstance,
nil);
Das Programm soll nichts weiter tun als ein OpenGL-Fenster zu initialisieren.
Gefunden habe ich im Freepascal-Forum dann diesen Thread:
http://community.freepascal.org:10000/b ... _id=245237" onclick="window.open(this.href);return false;
Der beschreibt genau mein Problem, aber bietet mir - abgesehen von MSG->TMSG - keine funktionierende Lösung. Getestet habe ich zuerst den dort gemachten Vorschlag, die API-Funktion umzubauen:
Code: Alles auswählen
{$ifdef win32}
function SetWindowLong(hWnd:HWND; nIndex:longint; dwNewLong:cardinal):cardinal; stdcall; external 'user32' name 'SetWindowLongA';
{$endif}

Dann hab ich noch mir von Lazarus die CreateWindow-Funktionsdefinition suchen und anzeigen lassen, und alle DWords durch Long ersetzt wie in dem Thread empfohlen. Leider ebenfalls ohne Erfolg.
Was kann ich da noch tun? Ich hab von dieser ganzen Freepascal-WinAPI-Schnittstelle kaum Ahnung!

Ziel ist, irgendwie ein OpenGL-Fenster zu erzeugen.
Interessant war übrigdens auch dass es Lazarus am Ende geschafft hat, das Ding irgendwie zu compilieren. Wo Freepascal "Fehler" gemeldet hat, kam bei Lazarus nur Warning. Allerdings ließ sich das Programm nicht direkt aus Lazarus heraus starten. Da lief zwar irgendwas, aber angezeigt wurde nix! Irgendwann geht dann Lazarus in einen Endlos-Debugger-Modus, und wenn man den über "Debugger zurücksetzen" abbrechen will verreckt die komplette Entwicklungsumgebung.

Die compilierte EXE scheint aber zu laufen. Aber es ist auf die Dauer kein Zustand, nur mit einem instabilen Lazarus und vielen Compiler-Warnungen mit OpenGL anzufangen. Wundern tut mich aber trotzdem, dass sich Lazarus hier so anders verhält als Freepascal! Ist da irgendein fehlertoleranterer Compiler-Switch standardmäßig gesetzt?