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

Aktuelle Zeit: Fr Jul 18, 2025 00:14

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: VBO wird nicht gerendert
BeitragVerfasst: Mo Feb 08, 2010 20:14 
Offline
DGL Member
Benutzeravatar

Registriert: So Jan 07, 2007 21:26
Beiträge: 130
Wohnort: mal hier mal da mal irgendwo
Hi Leute,

ich hab ein Problem mit VBOs und zu gleich noch eine Frage dazu, also erstmal die Frage, weil durch die sich mein Problem erübrigen könnte:

Macht es Sinn mit VBOs zu rendern, wenn in den VBOs nur ca. 20 Quads (bzw. 80 Vertices) enthalten sind?

Wenn ja:

Also beim VBO erstellen habe ich keine Probleme, es kommt auch keine Fehlermeldung, mein VBO wird halt nur nicht dargestellt... :(
Ich hab mir 'nen kleines Objekt dafür erstellt:

Code:
  1.   TVBO = object
  2.     private
  3.       Handle: Integer;
  4.       VBO: GLuint;
  5.       VertexCount: Integer;
  6.       procedure Bind();
  7.     public
  8.       procedure Init(const VertexData: TVertexDataArray);
  9.       procedure Render();
  10.       procedure Final();
  11.   end;


Dann für die Vertex-Daten noch eine Struktur:

Code:
  1.   TVertexData = packed record
  2.     U,V,
  3.     X,Y,Z: GLfloat;
  4.   end;
  5.   TVertexDataArray = Array of TVertexData;


Nun zu den einzelnen Prozeduren des VBO-Objektes:

Code:
  1. procedure TVBO.Bind;
  2. begin
  3.   if BoundVBO<>Handle then
  4.   begin
  5.     glBindBuffer(GL_ARRAY_BUFFER, VBO);
  6.     BoundVBO:=Handle;
  7.   end;
  8. end;
  9.  
  10. procedure TVBO.Final;
  11. begin
  12.   glDeleteBuffers(1, @VBO);
  13.   Handle:=-1;
  14. end;
  15.  
  16. procedure TVBO.Init(const VertexData: TVertexDataArray);
  17. begin
  18.   Handle:=VBOHandles;
  19.   Inc(VBOHandles);
  20.   glGenBuffers(1, @VBO);
  21.  
  22.   glBindBuffer(GL_ARRAY_BUFFER, VBO);
  23.   glEnableClientState(GL_VERTEX_ARRAY);
  24.  
  25.   VertexCount:=Length(VertexData);
  26.   glBufferData(GL_ARRAY_BUFFER, VertexCount*SizeOf(TVertexData), @VertexData, GL_STATIC_DRAW);
  27. end;
  28.  
  29. procedure TVBO.Render;
  30. begin
  31.   Bind;
  32.   glInterleavedArrays(GL_T2F_V3F, SizeOf(TVertexData), nil);
  33.   glDrawArrays(GL_QUADS, 0, VertexCount);
  34. end;


Findet ihr irgendeinen Fehler bei der ganzen Angelegenheit?
Für die Init-Prozedur die Daten das Arrays sind 100%ig richtig, aber es geht trotzdem irgendwie nicht :(

cuz bubble

EDIT:

Ich arbeite mit OpenGL 2.0 - da gehören ja VBOs schon zum Kern, sodass ich nich mehr die ARBs verwenden muss ;)

_________________
Wenn Worte nichts als Worte sind,
dann müssen's Steine sein!
Solange - bis sie pleite sind - schmeißt Fensterscheiben ein!

- Fidl Kunterbunt -


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO wird nicht gerendert
BeitragVerfasst: Mo Feb 08, 2010 20:29 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Macht es Sinn mit VBOs zu rendern, wenn in den VBOs nur ca. 20 Quads (bzw. 80 Vertices) enthalten sind?

Aber natürlich. Wenn du mehrere VBOs dieser Art verwendest kannst du überlegen ob du nicht alles in einen großen VBO wirfst du und immer nur den entsprechenden Bereich renderst. Das spart das switchen des Buffers. Deine Methode Bind ist übrigens eigentlich überflüssig, der Treiber dürfte intern genau das gleiche machen.

Warum das ganze jetzt aber nicht rendert kann ich nicht sagen, sieht alles gut aus.... :?

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO wird nicht gerendert
BeitragVerfasst: Mo Feb 08, 2010 20:33 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Ah, versuch mal das hier:
Code:
  1. glInterleavedArrays(GL_T2F_V3F, 0, nil);

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO wird nicht gerendert
BeitragVerfasst: Mo Feb 08, 2010 21:07 
Offline
DGL Member
Benutzeravatar

Registriert: So Jan 07, 2007 21:26
Beiträge: 130
Wohnort: mal hier mal da mal irgendwo
Funktioniert trotzdem nicht ... :(

Aber daran das ich nur 2D arbeite (also mit glOrtho), kann es nicht liegen oder?

cuz bubble

_________________
Wenn Worte nichts als Worte sind,
dann müssen's Steine sein!
Solange - bis sie pleite sind - schmeißt Fensterscheiben ein!

- Fidl Kunterbunt -


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO wird nicht gerendert
BeitragVerfasst: Di Feb 09, 2010 08:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Zitat:
Code:
  1.   glBufferData(GL_ARRAY_BUFFER, VertexCount*SizeOf(TVertexData), @VertexData, GL_STATIC_DRAW);

Dein VertexDataArray ist ein dynamisches Array. Dynamische Arrays sind im tiefsten Inneren ihrere Seele aber auch nur Pointer. Und wenn du bei einem Pointer den @ Operator benutzt, dann bekommst du nicht die Adresse der Daten zurück sondern die der Variable.

Bei so etwas kann ich dir nur raten grundsätzlich IMMER die erste Stelle des Arrays anzugeben. Also @VertexData[0]. Damit ist sichergestellt, dass du auch wirklich die Daten meinst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO wird nicht gerendert
BeitragVerfasst: Di Feb 09, 2010 16:20 
Offline
DGL Member
Benutzeravatar

Registriert: So Jan 07, 2007 21:26
Beiträge: 130
Wohnort: mal hier mal da mal irgendwo
Daran hatte ich garnicht mehr gedacht .... Jetzt gehts einwandfrei :mrgreen:

_________________
Wenn Worte nichts als Worte sind,
dann müssen's Steine sein!
Solange - bis sie pleite sind - schmeißt Fensterscheiben ein!

- Fidl Kunterbunt -


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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.008s | 14 Queries | GZIP : On ]