Registriert: Mo Sep 02, 2002 15:41 Beiträge: 867 Wohnort: nahe Stuttgart
Hi,
beim Versuch eines meiner OpenGL-Proggies zu kompilieren, stoße ich, nachdem ich eine Textur hinzugefügt habe, auf einmal auf
Zitat:
Project tacho.exe raised exception class EListError with Message 'List index out of bounds (142882039)'. Process stopped. Use Step or Run to continue.
Die Fehlermeldung tritt bei
Code:
SwapBuffers(DrawHandle);
auf. Ich verwende als DrawHandle
Code:
GetDC(Form1.Handle);
Ich hab keine Ahnung, woher die Fehlermeldung kommt und was sie mir eigentlich sagen will...
Zu sehen bekomme ich ein untexturiertes Quad und werde (dank SwapBuffers) dauernd mit der Meldung bombadiert.
Großen Dank im Vorraus.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Eigentlich gehört dein Problem ja nicht ins OpenGL-Forum, denn es hat rein garnix mit OpenGL zu tun.
Ein EListError wird nur im Zusammenhang mit Listen wie z.B. TList oder TStrings aufgerufen, und tritt dann auf, wenn z.B. nicht mehr genug Speicher vorhanden ist um die Liste zu erweitern, oder weit häufiger dann, wenn man versucht auf ein nicht existentes Item dieser Liste zuzugreifen.
Dein Fehler liegt also definitiv an einer anderen Stelle deines Quellcodes.
Registriert: Mo Sep 02, 2002 15:41 Beiträge: 867 Wohnort: nahe Stuttgart
Zitat:
Ein EListError wird nur im Zusammenhang mit Listen wie z.B. TList oder TStrings aufgerufen, und tritt dann auf, wenn z.B. nicht mehr genug Speicher vorhanden ist um die Liste zu erweitern, oder weit häufiger dann, wenn man versucht auf ein nicht existentes Item dieser Liste zuzugreifen.
Das ist ja das Komische.... vielleicht bin ich ja auch nur übermüdet, aber ich entdecke nirgends eine Liste...
Falls sich jemand so nett ist:
<a href='http://encorex.no-ip.com/hosted_sites/bluetoby/ext/tacho.zip' target='_blank'>Hier </a>findet ihr das Projekt. (33,8 KB)
(Und falls es wirklich nicht hierhin gehört, verschieb es bitte)
Ich hab grad Windows frisch aufgezogen und noch kein Delphi installiert - wenn du win9x/me verwendest, kann es leicht passieren, dass dein Debugger wegen ein Paar dummen Bugs in diesem OS an der falschen stelle eine falsche Exception auslöst. Das wäre meine Direkte Vermutung, warum diese Exception an gerade dieser Stelle auftritt.
Registriert: Mo Mai 06, 2002 10:50 Beiträge: 42 Wohnort: [Auch diese Steine können Sie klauen...]
Hi Toby,
nimm den glBindTexture im ApplicationOnIdle raus, dann sollte es funktionieren.
Grundsätzlich weiß ich nicht, wo der Fehler liegt, denn normalerweise spricht eigentlich nichts dagegen, glBindTexture im Renderloop aufzurufen. Ich schätze deshalb mal, dass bei dir bei der Initialisierung bereits etwas schiefläuft.
Ich habe mir deine glInit mal etwas genauer angeschaut, und da ist mir aufgefallen, dass du einen Typ namens PForm deklarierst. Das ist aber nicht nötig, denn in Delphi sind sowieso alle Objekte Zeiger. D.h. du kannst auch Objekte als Parameter übergeben, ohne dass du sie ausdrücklich als Zeiger deklarierst. Alle Manipulationen geschehen jetzt am Objekt selbst (call-by-reference), nicht an einer Kopie(call-by-value). Mit PForm erreichst du lediglich, dass du einen Zeiger auf einen Zeiger hast...
Ich würde mir deshalb nochmal deine glInit genauer anschauen, möglicherweise "verzeigerst" du dich irgendwo.
Gruß
Übrigens: Bau in deinen Renderloop unbedingt noch eine Abfrage auf glGetError ein. Du wirst sehen, dass du, sobald du den glBindTexture im Loop hast, die Meldung "Invalid Enumerant" bekommst, was natürlich Schwachsinn ist, weil der Befehl an und für sich ja richtig ist. Also steckt der Fehler irgendwo anders, wie gesagt, ich tippe auf die Initialisierung...
Registriert: Mo Jan 20, 2003 20:10 Beiträge: 424 Wohnort: nähe Starnberg
Hi,
Du erstellt die Texture, bevor Du OpenGL initialisiert hast. Ist mir aufgefallen, weil deine Variable Back einen utopischen Wert hat und nicht, wie ich es gewohnt war, mit 1 startet.
Dein Problem ist die glBindTexture. Wie man im CPU - Fenster sehen kann, wird nach dem Aufruf dein Stack-Pointer nicht auf den Wert zurück gesetzt, wie vor dem Aufruf, so das die Rücksprungadresse aus der Methode falsch ist.
Gefunden!!!! Du hast deine glBindTexture falsch deklariert. Da fehlt ein stdcall; hinter deiner Funktionsdeklarations.
Registriert: Mo Mai 06, 2002 10:50 Beiträge: 42 Wohnort: [Auch diese Steine können Sie klauen...]
Zitat:
Gefunden!!!! Du hast deine glBindTexture falsch deklariert. Da fehlt ein stdcall; hinter deiner Funktionsdeklarations.
KidPaddle
Stimmt, ist mir gar nicht aufgefallen...
Fragt sich nur, warum BlueToby die Proc neu deklariert hat. Schließlich ist glBindTexture bereits mit der Unit OpenGL mit eingebunden...
Registriert: Mo Sep 02, 2002 15:41 Beiträge: 867 Wohnort: nahe Stuttgart
Hmm... hmm... hmm... bislang hat alles eigentlich immer richtig funktioniert... nur eben jetzt kam der Fehler... weil ich die OpenGL12 warscheinlich immer erst nach glInit eingebunden hab und die dann die
Falsche durch die Richtige ersetzt hat.
Aber jetzt gehts... Danke Im Übrigen funktioniert das ohne PForm nicht, da bekomm ich 'ne AccessViolation.
Mitglieder in diesem Forum: 0 Mitglieder und 3 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.