Habe ein Problem und zwar zeichne ich nicht mehr als
Rund 45000 Dreiecke mit Textur
Texture Font (zum FPS angeben)
Geblendetes QUAD als beenden button
Und habe nur 27-30 FPS
Das ist doch nicht normal?
1) Auf jeden Fall VBO benutzen.
2) Zu viele Berechnungen zum Zeichnen. Im Idealfall wird gar nichts mehr berechnet und das Zeichnen beschränkt sich auf glDraw[Range]Elements Aufrufe.
Ja also ich speichere das jetzt alles ab, so wie ich es brauche.
Dann hab ich ja auch nur noch ein glBegin und glEnd.
Das ist wohl das erste was ich mal mache...
Registriert: Mi Aug 17, 2005 13:19 Beiträge: 98 Wohnort: Jahnsdorf
Was soll die Multiplikation mit 1 bringen? IMHO kann man da auch noch mal sparen (auch wenn der Compiler das bei Source-Optimierung sowieso automatisch entfernt). Bei schnellem Code brauch der Compiler nix mehr "optimieren".
Falls das in Zeile 56-63 eine Berechnung andeuten soll, so bitte vorher einmalig ausführen und dann nur noch das Ergebnis Übergeben.
Mal ne Frage am Rande zum Thema VBO:
Ist es schlimm wenn ich eine Größere Anzahl an VBO's habe?
Ich habe eine Spezielle Objektstruktur, wo jedes Objekt selber ein paar VBO's hat!
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Da VBO auf der GraKa liegen, gilt: Allzuviel ist ungesund. Soll heißen: Wenn deine Objekte den ganzen Speicher fressen, werden andere Sachen, eventuell sogar die VBOs selbst in den Clientspeicher ausgelagert. Und das kann dann eine richtig schöne Bremse werden.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Die VBO's sollten nicht zu groß sein, damit sie vom Treiber noch vernünftig verwaltet werden können. Ein 32MB Block kann schlecht verschoben werden. Allerdings kostet der Buffer Wechsel, genauer der Aufruf von glVertexPointer ein wenig und daher sollten schon einige hundert Punkte drin sein. Im OpenGL Forum mal danach suchen. Da gibt's ein paar gute Beiträge. Außerdem ist empfohlen glDrawRangeElements zu verwenden, weil der Speichermanager diese Bereichsangaben irgendwie zur Optimierung der Buffer nutzt.
Ich denke eine gute Lösung ist, Buffer von einer konfigurierbaren Größe von OpenGL anzufordern und den Speicher innerhalb dieser Buffer selber zu verwalten. Nicht alle Objekte haben ja zwangsläufig so viele Punkte und da kann man ja auch mehrere Objekte in einen Buffer packen.
Zitat:
Ich habe eine Spezielle Objektstruktur, wo jedes Objekt selber ein paar VBO's hat!
Die Struktur der Objekte sollte eigentlich keinen Einfluß auf solche Dinge wie Hardware Resourcen haben. Da muß eigentlich eine Abstraktionsschicht zwischen.
Zuletzt geändert von LarsMiddendorf am Mi Aug 24, 2005 18:57, insgesamt 2-mal geändert.
Registriert: Di Dez 02, 2003 12:47 Beiträge: 300 Wohnort: Marburg
Wenn die sachen gegeneinander beweglich sein müssen, gehts ja nicht anders. Aber das wechseln der VBOs kostet natürlich zeit, ich denke dass ist wie bei texturen: weniger wechsel = besser...
Wenn nun verschiedene Dinge aus den selben Einzelteilen bestehen, ist es denke ich eine frage, wie bequem oder schnell man es haben will, ob man für jedes Ding eine VBO macht (sollte schnell sein), oder für jedes sich wiederholende einzelteil eine VBO macht (sollte weniger aufwand sein) und die dann zusammensetzt. Aber dass muss mann wohl je nach anwendung entscheiden.
P.s. Ich setzte bei meiner Physiksimulation auch starre-Kugel-Objekte aus einer Kugel-VBO zusammen, die ich halt öfters zeichne. Dass ist viel variabler und kostet kaum zeit und spart ne menge aufwand und quellcode!
Edit: Mist, eine minute zu lansam! Und etwas unpräziser Naja, ich habs halt versucht
_________________ Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de
Zuletzt geändert von geo am Mi Aug 24, 2005 18:55, insgesamt 1-mal geändert.
Registriert: Sa Nov 13, 2004 11:00 Beiträge: 229 Wohnort: Steinhude
hängt davon ab, wie groß die anzahl ist. allgemein ist es meistens (solange der vbo nicht zu groß wird) besser (schneller) möglichst viele triangle pro drawcall zu bearbeiten, nen paar hundert tris/drawcall solltens dann schon möglichst sein.
dazu kommt dann natürlich der overhead beim wechseln der vbos, insofern sollte man es wohl möglichst weit vermeiden, solange es einem nicht die struktur verhunzt.
Naja, wenn ich jetzt alle Objekte in einen VBO schmeisse muss ich doch falls ein Objekt gelöscht wird, den ganzen VBO neu in den Speicher laden, oder irre ich mich da?
Also um genau zu werden:
Mein Objekt unterstützt einige Zeichenmethoden wie z.b. TriangelStrip, Lines,....
Diese müssen ja soweit ich weiss getrennt voneinander Gespeichert werden, und dann per Funktionsaufruf richtig gezeichnet werden.
Wie groß die einzellnen Objekte werden kann ich bisher nicht sagen, aber es sollten auch kleine Objekte drin sein.
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Registriert: Sa Nov 13, 2004 11:00 Beiträge: 229 Wohnort: Steinhude
Zitat:
Mein Objekt unterstützt einige Zeichenmethoden wie z.b. TriangelStrip, Lines,.... Diese müssen ja soweit ich weiss getrennt voneinander Gespeichert werden, und dann per Funktionsaufruf richtig gezeichnet werden.
wieso müssen die getrennt von einander gespeichert werden?
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wenn du weißt, welches Element wie gezeichnet werden soll, kannst du die auch zusammen speichern. (Also theoretisch. Ich hab mit VBOs noch net gearbeitet)
_________________ Blog: kevin-fleischer.de und fbaingermany.com
wieso müssen die getrennt von einander gespeichert werden?
Dachte aus diesem Grund:
Code:
glDrawArrays(GL_QUADS,0, VBOSize);
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Mitglieder in diesem Forum: 0 Mitglieder und 4 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.