Registriert: Sa Okt 26, 2002 17:14 Beiträge: 188 Wohnort: Hannover/Lüneburg
Hallo!
Ich hab gerade ein kleines Problem mit Displaylists... Ich erzeuge so meine Displaylists:
Code:
J := glGenLists(FListCount);
for I:=0 to FListCount-1 do
begin
FDisplayLists[I] := J+I;
glNewList(FDisplayLists[I], GL_COMPILE);
glEndList;
end;
Dabei sind I und J einfache Integervariablen (Cardinal ändert auch nichts), FListCount ist die Anzahl der zu erstellenden Listen und FDispaylists ein Array of TGLUInt. Wenn ich jetzt einfach die (noch nicht weiter erstellten) Displaylisten rendere, sehe ich mehrere Quads in einer Reihe gerendert. Wenn ich nun aber das ganze so ändere:
Code:
J := glGenLists(FListCount);
for I:=0 to FListCount-1 do
begin
FDisplayLists[I] := J+I+31;
glNewList(FDisplayLists[I], GL_COMPILE);
glEndList;
end;
Also die 31 hinzufüge, verschwindet der Streifen. :huh: Die 31 lassen sich ja noch damit erklären, dass es sich dabei um die Wurzel aus FListCount handelt. Aber ansonsten verstehe ich das nicht... Ich kann auch FListCount auf 10 setzen, dann kommen halt 10 Quads auf den Schirm, aber trotzdem benötige ich diese +31, mit +10 reicht es nicht.
_________________ Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Also irgendwie versteh ich hier dein Prob nicht ganz, deine Beschreibung ist leider etwas unverständlich.
Mit J := glGenLists(FListCount) erstellst du ja n-Displaylisten, auf die du über glNewList(J..J+FListCount) zugreifen kannst (siehe erser Codeschnippsel, der auch richtig ist).OpenGL gibt dir dann ja in J den Beginn deiner Displaylisten-IDs zurück.
Im zweiten Codeschnippsel willst du allerdings deine Displaylisten erst bei I+J+31 beginnen lassen.Allerdings hat OpenGL da doch gar keinen Platz unter diesen IDs für Displaylisten erstellt, weshalb du da auch keine Displaylisten über glNewList erstellen kannst...letzterer Codeschnippsel kann also gar nicht funktionieren!
Registriert: Sa Okt 26, 2002 17:14 Beiträge: 188 Wohnort: Hannover/Lüneburg
Der Witz ist aber, dass der letzte funktioniert, der erste, der korrekt sein müsste, aber nicht :huh: Wenn ich die 31 weglasse, dann rendert er einfach irgendwelche Quads, die ich nirgends im Code angegeben habe. Füge ich die 31 hinzu, dann rendert er korrekt, bzw. eben diese unerklärlichen Quads nicht, alles andere aber richtig.
_________________ Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3827 Wohnort: Tespe (nahe Hamburg)
Wenn sowas mal mit und mal ohen Darstellungsfehler auftritt, liegt das Problem meist in Un/Gnade der Grafiktreiber. Da diese doch wohl hoffentlich meist korrekt sind, liegt der Fehler häufig in einem Bereichsüberlauf. Diesen unbedingt bei Delphi aktivieren. Habe heute einen ähnlichen Fehler gehabt, den ich auf diesem Wege schnell gefunden habe.
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
Registriert: Sa Okt 26, 2002 17:14 Beiträge: 188 Wohnort: Hannover/Lüneburg
Zitat:
[...] liegt der Fehler häufig in einem Bereichsüberlauf. Diesen unbedingt bei Delphi aktivieren.
Das hatte ich schon selbst probiert, half nichts.
Zitat:
Eigenartig...probiers mal mit folgendem Code, der sollte nämlich auf jeden Fall funzen
Ich bin jetzt soweit gekommen, dass es nicht am generieren der Displaylists liegt, sondern am aufrufen. Wenn ich es mit glCallLists(FListCount, GL_INT, @FDisplayLists[0]); aufrufe klappt es nicht, benutze ich hingegen
Code:
for I:=0 to FListCount-1 do glCallList(FDisplayLists[I]);
dann klappt alles einwandfrei. Der Fehler bei glCallLists() kommt aber nicht, wenn ich besagte 31 dazuaddiere.
[EDIT]Habe den Fehler gefunden. Ein Aufruf von glListBase(FDisplayLists[0]); behebt das ganze Problem.[/EDIT]
_________________ Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?
Mitglieder in diesem Forum: 0 Mitglieder und 19 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.