Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Hi, ich melde mich mal wieder. Ich habe das Demo-Programm schon angefangen, aber ich bin noch nicht fertig. Einfach weil heute genau der Tag ist, wo ich fürs Wochenende und auch für Weihnachten die Einkäufe machen musste; kam dann nach Hause und in meiner Küche schaut's immer aus, als ob kurz vorher der Blitz eingeschlagen hätte. Kochen war natürlich auch angesagt.
Also habe ich erst ziemlich spät begonnen.
Und nachdem ich angefangen hatte, fand ich das wäre eine tolle Gelegenheit, endlich einmal ein wasserdichtes Demo-Programm zu basteln - so etwas habe ich nämlich noch nicht -, inklusive Logging. Also, nicht einfach nur ein schnell hingeschludertes Demo, sondern etwas Seriöseres.
Da ich relativ kurz davor stehe, nach OpenGL3 zu wechseln, besteht dann die Möglichkeit, der Lazarus-Community ein Linux-OpenGL3-Tool in die Hand zu geben.
Macht mir gerade einen Riesenspaß. Hab noch ein wenig Geduld mit mir. Du bist die erste Priorität.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Ich bin jetzt mit dem Demo fertig; war doch viel mehr Arbeit, als ich gedacht habe. Mein eigener Benefit ist, dass ich jetzt ein kleines (naja) Basis-Demoprogamm mit Logging habe; so etwas wollte ich schon immer, aber ich war zu faul, mir eins zu schreiben; ich habe für mich selber auch gleich eine Linux-Version davon gemacht.
Speziell für Dich habe ich es mit der Fixed Funktion Pipeline ausgestattet, weil das in Deinem ursprünglichen Programm auch so war.
Der Code folgt - soweit es möglich war - dem Beispiel dieser Website: http://fabiensanglard.net/shadowmapping/index.php; ich habe zwar relativ viele Kommentare dazu geschrieben, aber dort gibt es auch ein paar weiterführende Erklärungen dazu.
Es ist ein Windows Programm für 32 Bit (nur eine einzige Datei) und braucht nur die dglOpenGL.pas. Es sollte eigentlich in Delphi laufen, aber sicher kann man sich nie sein, wenn man's nicht ausprobiert hat. Sicherheitshalber ist es reiner SourceCode, kompilieren musst Du es Dir also selber.
Ganz oben in der Kopfzeile steht noch, was man machen muss, damit es sich ordnungsgemäß beendet.
Registriert: So Sep 26, 2010 16:19 Beiträge: 64
Programmiersprache: Pascal
Hi Traude Danke für deine Mühe. Ich kann die Anwendung trotzdem leider nicht starten :/
Fehler: [DCC Fehler] ShadowMapDemo_Win32.dpr(79): E2007 Konstante oder Typenbezeichner erwartet -> Da mache ich Rect zu TRect [DCC Fehler] ShadowMapDemo_Win32.dpr(153): E2003 Undeklarierter Bezeichner: 'FillByte' -> ??? Da fehlt wohl irgendeine Unit [DCC Fehler] ShadowMapDemo_Win32.dpr(532): E2026 Konstantenausdruck erwartet -> Da schreibe ich das Ergebnis von Wurzel 0.5 rein [DCC Fehler] ShadowMapDemo_Win32.dpr(651): E2195 Lokale Variablen können nicht initialisiert werden -> Da schreibe ich einen Init-Teil in der Prozedure [DCC Fehler] ShadowMapDemo_Win32.dpr(652): E2195 Lokale Variablen können nicht initialisiert werden ->Siehe oben [DCC Fehler] ShadowMapDemo_Win32.dpr(691): E2010 Inkompatible Typen: 'PGLdouble' und 'TMatrix16d' [DCC Fehler] ShadowMapDemo_Win32.dpr(692): E2010 Inkompatible Typen: 'PGLdouble' und 'TMatrix16d' [DCC Fehler] ShadowMapDemo_Win32.dpr(693): E2010 Inkompatible Typen: 'PGLdouble' und 'TMatrix16d' [DCC Fehler] ShadowMapDemo_Win32.dpr(760): E2003 Undeklarierter Bezeichner: 'FillByte' -> Siehe Fehler 2
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Zitat:
[DCC Fehler] ShadowMapDemo_Win32.dpr(79): E2007 Konstante oder Typenbezeichner erwartet -> Da mache ich Rect zu TRect
Höchstwahrscheinlich.
Zitat:
[DCC Fehler] ShadowMapDemo_Win32.dpr(153): E2003 Undeklarierter Bezeichner: 'FillByte' -> ??? Da fehlt wohl irgendeine Unit
Versuch's mal mit "FillChar(DemoRenderContext,SizeOf(TDemoRenderContext),#0);"
Zitat:
[DCC Fehler] ShadowMapDemo_Win32.dpr(532): E2026 Konstantenausdruck erwartet -> Da schreibe ich das Ergebnis von Wurzel 0.5 rein
Vermutlich
Zitat:
[DCC Fehler] ShadowMapDemo_Win32.dpr(651): E2195 Lokale Variablen können nicht initialisiert werden -> Da schreibe ich einen Init-Teil in der Prozedure [DCC Fehler] ShadowMapDemo_Win32.dpr(652): E2195 Lokale Variablen können nicht initialisiert werden ->Siehe oben
Ja
Zitat:
[DCC Fehler] ShadowMapDemo_Win32.dpr(691): E2010 Inkompatible Typen: 'PGLdouble' und 'TMatrix16d' [DCC Fehler] ShadowMapDemo_Win32.dpr(692): E2010 Inkompatible Typen: 'PGLdouble' und 'TMatrix16d' [DCC Fehler] ShadowMapDemo_Win32.dpr(693): E2010 Inkompatible Typen: 'PGLdouble' und 'TMatrix16d'
Ist der aber pingelig!
Also: GLDouble ist ein Double. PGLDouble ist ein Zeiger auf ein Double. Die Matrix ist folgendermaßen definiert (ganz oben auf Zeile 17):
TMatrix16d = Array[0..15] Of Double;
Also ersetze die z.B. die Zeile
"glMultMatrixd(Bias);"
Mit "glMultMatrixd(@Bias[0]);"
Weil nämlich "Bias[0]" ein Double ist, und daher "@Bias[0]" ein Zeiger auf ein Double ist.
Registriert: So Sep 26, 2010 16:19 Beiträge: 64
Programmiersprache: Pascal
Ich habe diese Änderungen nur zwischen Tür und Angel ändern können, deswegen konnte ich die Zugriffsverletztung, die ich immer bekomme, nicht genau herausfiltern können :/
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Wenn ich keine genauen Angaben bekomme, kann ich dazu nichts sagen. Ich kriege keine Zugriffsverletzung, weder im Linux, noch im Windows7 (ich habe es in beiden Betriebssystemen getestet).
Ich habe kein auch kein Delphi mehr, dass ich es dort debuggen könnte.
Das Einzige, das mir dazu einfällt wäre, dass Du ein 64-Bit-System hast. Auf einem 64-Bit System läuft es höchstwahrscheinlich nicht (das habe ich aber dazugesagt). Ich habe kein 64-bit System.
Registriert: So Sep 26, 2010 16:19 Beiträge: 64
Programmiersprache: Pascal
Hi, ich habe das Programm auch auf Win32 getestet. Ohne Erfolg. Bei mir erscheint in Zeile 825 der Fehler (genauer: ,,InternErrorCode:= glGetError;" Zeile 103)
,,OpenGLError:= gsGetErrorString;" Danach bekomme ich die Zugriffsverweigerung. Wenn ich die Zeile in Win64 auskommentiere, dann startet die Anwendung und beendet sich wieder, ohne das ein handle oder eine Fehlermeldung erscheint.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Im 64-Bit System ist das Programm nicht lauffähig.
"OpenGLError:= gsGetErrorString;" sollte eigentlich keine Probleme bereiten; der Fehler muss irgendwo vorher sein. Denn diese Funktion wird schon bereits in der Funktion "Load_OpenGL_Function_Pointers" aufgerufen.
Man könnte diesen Fehler aber mit "parallel Debugging" finden. Das geht so: Jeder von uns beiden geht eine Prozedur nach der anderen mit dem Debugger durch und nach jeder Prozedur vergleichen wir die Ergebnisse. Dazu müsstest Du Dir ein wenig Zeit nehmen.
Falls Du mit dem Debugger noch nicht gearbeitet hast, würde ich das an Deiner Stelle unbedingt mal ausprobieren. Es ist nicht besonders schwer, aber es bringt fürs Programmieren eine Menge.
Ob Du das per PM oder im Forum oder gar nicht machen willst, überlasse ich jetzt einfach Dir.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
end hat geschrieben:
Empfehlung: Lazarus 32 Bit
Hehe, dem kann ich mich nur anschließen.
Aber... mir ist noch etwas anderes eingefallen: ich könnte ins Lazarus-Forum rüberschaun und jemanden, der auch Delphi 2009 hat, bitten, ob er nicht den Bug finden könnte, denn es geht ja offenbar auch im 32-bit System nicht.
Windows7 weigert sich, mein altes Delphi7 zu installieren - daher kann ich es in keiner Delphi-Version ausprobieren.
Registriert: So Sep 26, 2010 16:19 Beiträge: 64
Programmiersprache: Pascal
Ok, nur ich würde meine Anwendungen auch gerne in Delphi programmieren ^^ Und mein Delphi compiler ist ja auch 32Bit, und es läuft wie gesagt auch nicht auf einen 32Bit Vista Computer :/
Mitglieder in diesem Forum: 0 Mitglieder und 7 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.