Ich habe noch etwas probiert, ich habe im Ordner C:\lazarus\fpc\2.6.2\units\i386-win32\opengl die gl.ppu und gl.o durch die dglOpenGL.* ersetzt. Habe aber vorher in der dglOpenGL.pas die Zeile unit dglOpenGL durch GL ersetzt und kompiliert. Ansonsten gab es schon beim Kompilieren des Context-Test schon einen Fehler.
Interessanterweisse, ist die dglOpenGL über 10x grösser als der original Header.
Das Ganze leider ohne Erfolg, das SigSev kommt immer noch.
Das sieht jetzt so aus:
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
mathias hat geschrieben:
Ich habe noch etwas probiert, ich habe im Ordner C:\lazarus\fpc\2.6.2\units\i386-win32\opengl die gl.ppu und gl.o durch die dglOpenGL.* ersetzt.
Nein, das kann gar nicht gehen. Wir sind in Linux, da hat Win32 garnichts zu suchen.
Ich habe gerade jetzt nicht sehr viel Zeit, aber ich kann jedenfalls die Lazarus-Komponente auseinander nehmen, um zu sehen, wo sich der SigSev ereignet. Dauert halt ein wenig; ich melde mich wieder, spätestens am Wochenende.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Da gibts nicht viel zu schreiben. In meinem glCapsViewer hab ich das TOpenGLControl auf der Form liegen und mach dann irgendwo nach dem Create dann dass hier :
Code:
InitOpenGL;
GLControl.MakeCurrent;
ReadExtensions;
ReadImplementationProperties;
Und das wars. In der Linuxversion von Projekt "W" mach ich das afair auch so.
Hab leider aktuell weder Delphi nach Lazarus installiert, kann also nicht kompilieren, aber wie da oben ists in GIT eingecheckt und auch draußen im Einsatz.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Danke Sascha, mit Deinen Erläuterungen funktioniert es. Der Sigsev wurde durch ein Event "Resize" der OpenGL-Komponente erzeugt, da offensichtlich die Lazaruskomponente auf diese Funktion zu einem Zeitpunkt zugreifen möchte, wo noch keine Function Pointers geladen sind. Mit "GL" ist es vorher anstandslos gelaufen - warum, entzieht sich meiner Kenntnis. In der untenstehenden Demo habe ich das Event der Komponente durch eine gewöhnliche "Resize"-Funktion ersetzt.
Anbei ein funktionierendes Lazarus "Main" Programm mit der dglOpenGL und der Lazarus OpenGL-Komponente. Dieses ist ein Linux-Programm aber sollte eigentlich unverändert auch auf MsWindows laufen.
Viele Grüße, Traude
P.S:
Zitat:
Wenn man GL,GLU benutzt, dann zeichnet er was, ist aber offensichtlich im Softwaremodus
Das war kein Softwaremodus sondern ich habe meinen Würfel per Timer mit 1 FPS betrieben. war zu dem Zeitpunkt offenbar etwas verwirrt.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Dieses ist ein Linux-Programm aber sollte eigentlich unverändert auch auf MsWindows laufen.
openglcomp_main.pas läuft auch unter Windows, Ich habe es gerade getestet. Ich habe extra dafür Lazarus gelöscht und neu installiert, weil ich wie oben beschrieben an Lazarus rum gepastelt habe.
Mal gucken, ob ich meine OpenGL 3.3-Programm mit TOpenGLControl zum laufen bringe.
Ich konnte meine OpenGL 3.3 - Pogramme auch unter Linux kompilieren, nur das Problem, es geht sehr lange bis die Anwendung startet, zT. über eine Minute. Wen die Anwendung mal läuft, läuft es recht zügig.
Könnte dies am Grafiktreiber meines SuSE-Linuxes sein ? Läuft OpenGL im Software-Modus ?
Der PC ist ein Intel Atom.
Code:
GL_VENDOR: nouveau
GL_RENDERER: Gallium 0.4 on NVAC
GL_VERSION: 3.0 Mesa 9.2.2
GL_SHADING_LANGUAGE_VERSION: 1.30
Zitat:
In der untenstehenden Demo habe ich das Event der Komponente durch eine gewöhnliche "Resize"-Funktion ersetzt.
Ich konnte bei meinen Programmen keine Probleme mit Resize feststellen, es läuft noch gleich wie es mit der Unit Windows war.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
mathias hat geschrieben:
Ich konnte bei meinen Programmen keine Probleme mit Resize feststellen, es läuft noch gleich wie es mit der Unit Windows war.
Vielleicht habe ich mich missverständlich ausgedrückt.
Ich verwende eigentlich die Lazarus-OpenGL-Komponente garnicht. Aber ich habe sie früher einmal getestet, mit GL und GLU UND einem Event namens "TForm1.OpenglControl1Resize" (das war ein Event der Komponente "OpenglControl1"):
Diesen TestCode - der immer noch funktioniert hat - habe ich jetzt wiederverwendet und habe GL und GLU durch die dglOpenGL ersetzt. Daraufhin ereignete sich dieser Sigsev. Und es hat sich gezeigt, dass sich dieser Sigsev im obigen Resize-Event ereignet. Folglich habe ich dieses Resize-Event in eine gewöhnliche Funktion "Resize" umgewandelt, bei der ich kontrollieren kann, zu welchem Zeitpunkt sie aufgerufen wird. Wenn sie nämlich zu einem Zeitpunkt läuft, wo die Funktions-Pointer noch alle NIL sind, dann gibt es eben einen Crash.
Zu deinem obigen Problem: Ich glaube nicht, dass OpenGL im Softwaremodus läuft. Der Name "Nouveau" deutet darauf hin, dass das ein Linux-Treiber ist, nicht der Original-Treiber der Grafikkarte.
Warum es so lange zum Starten braucht, weiß ich auch nicht. Bei mir startet es sofort. Ich bin hier auf Ubuntu mit einer NVidia Karte und dem original Nvidia Treiber.
Mitglieder in diesem Forum: 0 Mitglieder und 41 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.