Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Also … Das kommt jetzt darauf an, was du vor hast.
Willst du:
Mit SDL arbeiten um wenig overhead zu haben und plattformunabhängigst zu werden. Das ist ratsam, wenn du z.B. ein Spiel programmieren willst.
Mit der LCL arbeiten. Das bietet eventuell mehr Komfort für eine GUI drumherum (nicht jedoch innerhalb deiner Szene, also nicht für HUD oder so), hat aber deutlich mehr (Speicher-)overhead. Das ist ratsam, wenn du zu dem Spiel einen Editor programmieren willst und nicht alles in OpenGL gemacht werden soll sondern du auch Buttons etc. um das OpenGL herum hast.
Zu b kann ich dir leider kaum Tipps geben. Da hoffen wir mal, dass Traude uns ein paar Sachen von dem erzählt, was sie bei ihrer Recherche dazu herausgefunden hat. Es gibt auf jeden Fall eine OpenGLControl oder so was in der Art für Lazarus, unabhängig von GLScene.
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Zitat:
Da hoffen wir mal, dass Traude uns ein paar Sachen von dem erzählt, was sie bei ihrer Recherche dazu herausgefunden hat.
Naja, da gibts nicht soviel zu erzählen. Es gibt eine Lazarus-OpenGL-Komponente, die man ad hoc benutzen kann um Dinge auszuprobieren, die ich aber nicht wirklich für ernsthafte Projekte empfehlen kann, denn man kann nicht selbst bestimmen, wie der Rendering Context erzeugt wird. Langfristig würde ich daher auch raten, auf SDL oder Ähnliches umzusteigen.
procedure TForm1.SetupGL; begin glClearColor(0.3, 0.4, 0.7, 0.0); //Hintergrundfarbe: Hier ein leichtes Blau glEnable(GL_DEPTH_TEST); //Tiefentest aktivieren glEnable(GL_CULL_FACE); //Backface Culling aktivieren end;
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject); begin DC:= GetDC(Handle); if not InitOpenGL then Application.Terminate; RC:= CreateRenderingContext( DC, [opDoubleBuffered], 32, 24, 0,0,0, 0); ActivateRenderingContext(DC, RC); SetupGL; end;
initialization {$I unit1.lrs}
end.
Und hier die Fehler und Warnungen:
C:\Programme\dglsdk\lib\dglOpenGL.pas(209,14) Hint: Type "PPointer" redefinition C:\Programme\dglsdk\lib\dglOpenGL.pas(11462,63) Hint: Local variable "MinorVersion" does not seem to be initialized C:\Programme\dglsdk\lib\dglOpenGL.pas(11462,49) Hint: Local variable "MajorVersion" does not seem to be initialized C:\Programme\dglsdk\lib\dglOpenGL.pas(11895,35) Hint: Local variable "PFDescriptor" does not seem to be initialized C:\Programme\dglsdk\lib\jedi-sdl.inc(237,4) Warning: Illegal compiler directive "$THREADING" C:\Programme\dglsdk\lib\jedi-sdl.inc(237,4) Warning: Illegal compiler directive "$THREADING" C:\Programme\dglsdk\lib\jedi-sdl.inc(237,4) Warning: Illegal compiler directive "$THREADING" C:\Programme\dglsdk\lib\glu.pas(140,14) Hint: Type "PPointer" redefinition C:\Programme\dglsdk\lib\jedi-sdl.inc(237,4) Warning: Illegal compiler directive "$THREADING" C:\Programme\dglsdk\lib\glut.pas(74,14) Hint: Type "PInteger" redefinition C:\Programme\dglsdk\lib\glut.pas(75,12) Hint: Type "PPChar" redefinition unit1.pas(64,45) Error: Incompatible types: got "<procedure variable type of function:DWord;StdCall>" expected "LongWord" unit1.pas(67,23) Error: class identifier expected unit1.pas(73,35) Error: Identifier not found "ClientWidth" unit1.pas(73,48) Error: Identifier not found "ClientHeight" unit1.pas(87,17) Error: Identifier not found "DC" unit1.pas(100,14) Error: Identifier not found "IdleHandler" unit1.pas(131) Fatal: There were 6 errors compiling module, stopping
Registriert: Di Okt 13, 2009 17:25 Beiträge: 365
Programmiersprache: C++
So, ich mach zwar normalerweise nix mit Delphi, aber ich vermute mal folgendes:
Zeile 64: gluErrorString liefert einen PChar als Rückgabewert. Das musst du wahrscheinlich einfach zu einem String konvertieren. Zeile 67: Es muss heißen: TForm1.Render Zeile 100: weiß ich nicht.
Alles andere sind wohl Folgefehler.
Zuletzt geändert von mrtrain am Mi Aug 31, 2011 19:45, insgesamt 1-mal geändert.
unit1.pas(100,14) Error: Identifier not found "IdleHandler"
kann auch gar nicht gefunden werden. Wurde nämlich nirgends definiert. Außerdem gehört der IdleHandler normalerweise sowieso nicht in FormResize. Irgendwo in die Initialisation (FormCreate oder SetupGL) gehört dann noch
Code:
Application.OnIdle:= IdleHandler;
Der Sinn vom IdleHandler ist normalerweise, dass er immer dann aufgerufen wird, wenn die Anwendung nichts zu tun hat. Steht übrigens auch so ähnlich im Tutorial.
Du scheinst aber ohnehin die Version mit Timer zu benutzen. Dann brauchst du auch gar kein Idle. Also einfach die Zeile, in der IdleHandler aufgerufen wird, weggeben.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Nein das geht nicht. Das Quickstart-Tutorial wurde für die VCL geschrieben, und keiner von uns hat das je mit Lazarus probiert. Delphi ist nicht gleich Lazarus.
Ich habe aber vor einiger Zeit die Lazarus-Komponente mal ausprobiert. Soweit ich mich erinnern kann, läuft sie auf Windows, Linux und angeblich auch auf dem Mac. Ich hänge Dir hier die Anwendung in meinen Beitrag rein. Sollte einen rotierenden Würfel in einem kleinen Fenster zeigen. Das sollt Dir ermöglichen, jetzt gleich OpenGL-Code ausprobieren zu können.
ACHTUNG!
1) Damit die Anwendung auch funktioniert, musst Du die Lazarus-OpenGL-Komponente bei Dir installieren. Das ist allerdings ein Thema, bei dem ich nicht ganz sattelfest bin. Es gibt aber dazu eine Doku: http://wiki.lazarus.freepascal.org/Install_Packages/de, im Zweifel im Lazarusforum nachfragen
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ja das stimmt. Das Quickstart Tutorial ist VCL basiert und VCL ist die "Visual Component Library" von Delphi.
Unter Lazaras, vor Allem wenn du für Linux UND Windows programmieren willst, ist SDL (siehe den Beitrag von Lord Horazont) eine gute Idee.
Traude, die hier auhc schon geschrieben hat, ist wiederum eine Verfechterin des "direkten Programmieren". D.h. Sie programmiert auch plattformübergreifend, kapselt aber die systemspezifischen Sachen so weg, dass sie per recompile einfach auch für ein anderes OS Binaries erstellen kann. (Soweit ich weiß). Vielleicht kann ja auch Traude nochmal ein Beispiel geben, wie sie das Fenstermanagement angeht.
Allerdings weiß ich nicht unter welchem OS du (flix) arbeitest.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Mitglieder in diesem Forum: 0 Mitglieder und 17 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.