Registriert: Do Mär 05, 2009 20:17 Beiträge: 284 Wohnort: Kaiserslautern
Hallo,
ich hab bislang immer nur Anwendungen gemacht, bei denen OpenGL auf ein Panel gerendert wurde und nix mit Vollbild. Da ich für ein neues Projekt aber auch mal im Vollbild sein will habe ich mir hier das Template nochmal angeschaut:
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
@Mathias Ahhh da sehe ich schon gleich etwas das mir Bauchschmerzen macht. ChangeDisplaySettings hat mehrere Rückgabewerte halt je nachdem welchen Fehler es gibt. Wenn du es kurz machen willst überprüfe lieber nach DISP_CHANGE_SUCCESSFUL. Ansonsten hier einmal die Werte die es geben kann:
DISP_CHANGE_SUCCESSFUL: The settings change was successful. DISP_CHANGE_BADDUALVIEW: The settings change was unsuccessful because the system is DualView capable. DISP_CHANGE_BADFLAGS: An invalid set of flags was passed in. DISP_CHANGE_BADMODE: The graphics mode is not supported. DISP_CHANGE_BADPARAM: An invalid parameter was passed in. This can include an invalid flag or combination of flags. DISP_CHANGE_FAILED: The display driver failed the specified graphics mode. DISP_CHANGE_NOTUPDATED: Unable to write settings to the registry. DISP_CHANGE_RESTART: The computer must be restarted for the graphics mode to work.
Registriert: Do Mär 05, 2009 20:17 Beiträge: 284 Wohnort: Kaiserslautern
Hallo,
erstmal danke für die Antworten..
Also das Template stürzt mit penetranter Wiederholgenauigkeit mit einer Access Violation bei 00000 00000 ab. Auch wenn ich wie yunharla beschreibt das FALSE in TRUE ändere. Dann ändert sich vor dem Absturz nur kurz die Auflösung in vermutlich 800x600 dann kommt die access violation.
wenn ich mit Einzelschritten an den Fehler springe, dann sieht es in der VariablenListe zu dem Zeitpunkt seltsam aus:
die selben chinesischen Zeichen stehen auch nochmal bei dmFormName...
der eigentliche Absturz kommt dann beim Aufruf von beispielsweise
Code:
glViewport(0, 0, Width, Height); // Setzt den Viewport für das OpenGL Fenster
ich habe 2 Bildschirme aber auch wenn ich einen in Windows deaktiviere kommt es zum Absturz im Template.
Registriert: Do Mär 05, 2009 20:17 Beiträge: 284 Wohnort: Kaiserslautern
Also ich steh mit dem Template total auf dem Schlauch, in den Projekteinstellungen habe ich paar Sachen ausprobiert, aber das hat alles nichts genutzt. Also dachte ich, vielleicht liegts an Delphi XE und habe ein altes Turbo Delphi ausgegraben, aber auch damit kommt die Access Violation..
Normalerweise bedeutet eine Access Violation bei 0000 doch das versucht wird auf etwas zuzugreifen, was noch nicht erstellt wurde.. Aber ich find die Ursache nicht.
Bekommt denn von euch jemand das Template zum laufen? Ich meine bei mir läuft ja nichtmal die beiliegende .exe
Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2067
Programmiersprache: C++
Die OpenGL-Initialisierung schlägt fehl. glViewport ist ein Funktionspointer und wird 0 sein. Kannst du mal in der Richtung schauen? Versuch mal das Template auf die dglOpenGL.pas umzubauen. Diese müsste sich die Funktionspointer nach der Erstellung des Fensters holen. Leider kann ich dir da aber nicht weiterhelfen
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
Ja genau was i0n0s sagte. Wobei es halt nur fuer die neueren Sachen gilt, das du erst nach dem Fenster laden darfst. Die alten 1.x Funktionen kannst du jederzeit laden. Stell dir die ganzen OpenGL Funktionen am besten als Variablen vor die zur Laufzeit aus der DLL gezogen werden. Meine Vermutung wäre halt gewesen das er irgendwie die ANSI und Unicode bei den entsprechenden Windows Funktionen hier vermischt. So zwecks Buchstabensalat usw.
Du kannst ja aber mal probieren ob du per Hand rankommst:
Code:
HINSTANCE ogl = LoadLibrary("opengl32.dll");//wenn ogl NULL ist existiert die DLL nicht auf deinen Rechner ... wie auch immer du das geschafft hast
void* test = GetProcAddress(ogl,"glClear");//wenn test NULL hast du ein Problem, denn dann existiert OpenGL aber du bekommst keine Funktionen
//alternativ geht auch
void* testb = wglGetProcAddress("glClear");
FreeLibrary(ogl);
//beachte das LoadLibrary und GetProcAddress nur Macros auf die eigentlichen Funktionen sind. Falls Encoding Probleme macht hier noch einmal die
//speziellen Versionen dafuer.
LoadLibraryW //Unicode
LoadLibraryA //Ansi
GetProcAddressW//Unicode
GetProcAddressA//Ansi
So wie ich das sehe müsste aber OpenGL fest in Delphi enthalten sein. Von daher kannst du ja noch einmal das folgende Form ausprobieren: http://edn.embarcadero.com/article/26401
Sind ja nur Wrapper fuer den Windows Kram, man kann es also noch einmal umbauen so das du ne richtige EventLoop usw. bekommst.
Registriert: Do Mär 05, 2009 20:17 Beiträge: 284 Wohnort: Kaiserslautern
yunharla hat geschrieben:
So wie ich das sehe müsste aber OpenGL fest in Delphi enthalten sein. Von daher kannst du ja noch einmal das folgende Form ausprobieren: http://edn.embarcadero.com/article/26401
Also das Beispiel läuft bei mir einwandfrei is ja aber nur fenster und nicht fullscreen. Und Fenster bzw auf Panel rumrendern funktioniert ja sowieso schon in meinen anderen Projekten... nur Fullscreen hab ich bislang nichts hinbekommen. ich denke das Template ausm Wiki funktioniert einfach nicht, hast du mal die exe ausprobiert?
[EDIT] Das "Einwandfrei" stimmt so dann doch nicht, hab grad gemerkt das es mit
Code:
uses OpenGL,...
funktioniert aber wenn ich das ersetze durch
Code:
uses dglOpenGL,...
bekomme ich eine Access Violation bei 000000....
Zuletzt geändert von Wölfchen am Mi Sep 23, 2015 18:35, insgesamt 1-mal geändert.
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.