Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Apr 18, 2024 23:09

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 28, 2003 16:37 
Offline
DGL Member
Benutzeravatar

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:
  1.   J := glGenLists(FListCount);
  2.   for I:=0 to FListCount-1 do
  3.   begin
  4.     FDisplayLists[I] := J+I;
  5.     glNewList(FDisplayLists[I], GL_COMPILE);
  6.     glEndList;
  7.   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:
  1.   J := glGenLists(FListCount);
  2.   for I:=0 to FListCount-1 do
  3.   begin
  4.     FDisplayLists[I] := J+I+31;
  5.     glNewList(FDisplayLists[I], GL_COMPILE);
  6.     glEndList;
  7.   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?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 28, 2003 16:49 
Offline
DGL Member
Benutzeravatar

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!

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 28, 2003 16:56 
Offline
DGL Member
Benutzeravatar

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?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 28, 2003 17:39 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Eigenartig...probiers mal mit folgendem Code, der sollte nämlich auf jeden Fall funzen :
<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre><span class='reserved'>for</span> i :=<span class='integer'>0</span> <span class='reserved'>to</span> FListCount-<span class='integer'>1</span> <span class='reserved'>do</span>
<span class='reserved'>begin</span>
FDisplayLists[i] := glGenLists(<span class='integer'>1</span>);
glNewList(FDisplayLists[i], GL_COMPILE);
[...]
glEndList;
<span class='reserved'>end</span>;</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 28, 2003 17:47 
Offline
Fels i.d. Brandung
Benutzeravatar

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..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 28, 2003 18:24 
Offline
DGL Member
Benutzeravatar

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:
  1. 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?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.123s | 17 Queries | GZIP : On ]