Zeit für gl...Pointer
-
hellihjb schrieb:
ohne weiteres spart dir gl...Pointer nur die einzelnen api-aufrufe des glbegin-blocks.
die vertex-daten werden aber weiterhin aus dem hauptspeicher uebertragen.
dagegen helfen die extensions fuer vertex-buffer-objects.Oder Displaylists...
Naja, manchmal will man die Vertex-Daten ja auch vom Hauptspeicher haben...
-
durito schrieb:
hellihjb schrieb:
ohne weiteres spart dir gl...Pointer nur die einzelnen api-aufrufe des glbegin-blocks.
die vertex-daten werden aber weiterhin aus dem hauptspeicher uebertragen.
dagegen helfen die extensions fuer vertex-buffer-objects.Oder Displaylists...
Naja, manchmal will man die Vertex-Daten ja auch vom Hauptspeicher haben...
Ne, nimm lieber VBOs.
grüße
-
David_pb schrieb:
durito schrieb:
hellihjb schrieb:
ohne weiteres spart dir gl...Pointer nur die einzelnen api-aufrufe des glbegin-blocks.
die vertex-daten werden aber weiterhin aus dem hauptspeicher uebertragen.
dagegen helfen die extensions fuer vertex-buffer-objects.Oder Displaylists...
Naja, manchmal will man die Vertex-Daten ja auch vom Hauptspeicher haben...
Ne, nimm lieber VBOs.
grüße
Wieso?
-
Ja Danke,
ich hab immer gehdacht mit gl...Pointer gehts auch so schon einiges schneller.
Und dann noch mal schneller mit glInterleavedArrays(was ich mittlerweile auch benutze).
Ist des etz doch net so?Und zu den VBOs:
Ich will nur pures OpenGL programmieren, ohne Extensions (nee, nicht nur wegen meiner alten Grafikkarte).Ich weiss,Extension des is ne feine Sache, aber net für mich.
-
Simmon schrieb:
Ja Danke,
ich hab immer gehdacht mit gl...Pointer gehts auch so schon einiges schneller.
Und dann noch mal schneller mit glInterleavedArrays(was ich mittlerweile auch benutze).
Ist des etz doch net so?Und zu den VBOs:
Ich will nur pures OpenGL programmieren, ohne Extensions (nee, nicht nur wegen meiner alten Grafikkarte).Ich weiss,Extension des is ne feine Sache, aber net für mich.
Ne, so richtig viel holst Du erst raus, wenn Du Deine Geometrie auf die Karte lädst. Wieso keine Extensions? Egal, dann probier eben DisplayLists, sind sehr simpel in der Anwendung, und Du wirst sehr viel rausholen...
-
display-listen sind inhaltlich das gleiche wie vbos, nur das man keine moeglichkeit hat dabei irgendwie einzugreifen - dafuer pfuscht der treiber vorher nochn bischen in den daten rum. nur sobald man dynamische daten hat, nuetzen die display-listen leider gar nichts mehr...
-
hellihjb schrieb:
display-listen sind inhaltlich das gleiche wie vbos, nur das man keine moeglichkeit hat dabei irgendwie einzugreifen - dafuer pfuscht der treiber vorher nochn bischen in den daten rum. nur sobald man dynamische daten hat, nuetzen die display-listen leider gar nichts mehr...
Yep, aber dank dem "pfuschen" ist die DL manchmal schneller (kommt wiederum ganz auf die Treiber-Version an :(). Z.B. bietet der nvidia-linux-Triber zusätzlich nen netten Frustum-culling-Algo in seiner DL.
Ist ein VBO für dynamische Daten ab dem Hauptspeicher eigentlich schneller als Vertex Arrays?
-
Z.B. bietet der nvidia-linux-Triber nen netten Frustum-culling-Algo
der nvidia-treiber hat einige gimmicks die "schlechten" code wieder ziemlich glatt buegeln. allerdings sollte man sich auf sowas nicht unbedingt verlassen, denn leider haben noch nicht alle hersteller "gute" treiber

ist ein VBO für dynamische Daten ab dem Hauptspeicher eigentlich schneller als Vertex Arrays?
das reine rendering eines vbo-buffers ist circa um faktor 10 schneller als das rendering eines gl...Pointer-Buffers aus dem hauptspeicher.
der vbo-buffer laesst sich parallel zum rendering updaten und kostet so kaum performance - allerdings sind dabei etwas andere caching-regeln zu beachten.
-
hellihjb schrieb:
das reine rendering eines vbo-buffers ist circa um faktor 10 schneller als das rendering eines gl...Pointer-Buffers aus dem hauptspeicher.
der vbo-buffer laesst sich parallel zum rendering updaten und kostet so kaum performance - allerdings sind dabei etwas andere caching-regeln zu beachten.Versteh ich das richtig, so viel schneller auch wenn Du nen stream-VBO mit Vertex-Daten ab dem Hauptspeicher hast? Und mit jedem Frame alle Vertex-Daten ab dem Hauptspeicher aktualisierst? Oha, das wär ja was... Danke für den Tip!
Jo, mit den Treibern hast Du natürlich recht.
-
Kann man dann das Rendern mit gl...Pointer bzw. glInterleavedArrays beschleunigen, wenn man Displaylisten benutzt?
-
nein
-
Das is etz aber ärgerlich
-
Hm, was ist ärgerlich? Nimm ne DisplayList, dann gibts nix mehr zu beschleunigen. Lies mal, was ne DL ist, und was gl..Pointer macht, dann erübrigt sich Deine Frage sowieso...
-
Jo, weiss ich schon was des is, ich hab des von hellihjb beim ersten Lesen so verstanden, dass DLs die Geschwindigkeit nicht erhöhen, mein Fehler.
-
Noch was:
Display Listen brauchen ja viel Speicher, und man kann ja nicht jeden Frame mehrere Male gl...Pointer() aufrufen. Wäre es dann nicht schlauer, es doch über glBegin()...glEnd() abzuwickeln?
So wird es ja auch in Quake2 gemacht.
-
Display Listen brauchen ja viel Speicher
warum?
man kann ja nicht jeden Frame mehrere Male gl...Pointer() aufrufen
warum?
-
zu Warum Nummer 1:
Weil die ganzen Vertexdaten ja auch in die Liste einkompiliert werden, was bei vielen Vertices ja ganz schön Speicher frisst.zu Warum Nummer 2:
Hab ich mal gemacht, dann hats aber geruckelt wie Currywurst. Deswegen.
-
1. die display-liste enthaellt die selben vertex-daten die du rein getan hast.
davon liegt eine "kopie" im grafikspeicher und eine, fuer den fall dass die grafikkarte mal voll ist, im hauptspeicher - fuer gewoehnlich kein besonderes problem.2. alle daten die du in einem begin-end-block angibst, werden sowieso erstmal in einem buffer gesammelt. wenn du diesen buffer selber zur verfuegung stellst und per gl...Pointer() uebergibst, hast du dadurch nur vorteile.
wenn's dadurch langsamer geworden ist, hast du irgendwas grundlegendes falsch gemacht - oder ne ati-karte.
-
Ok, gut, wenn Speicher kein Problem darstellen sollte benutze ich DLs
und mach ich es einfach ohne gl...Pointer-Aufrufen jeden Frame.
Danke!
-
hellihjb schrieb:
ohne weiteres spart dir gl...Pointer nur die einzelnen api-aufrufe des glbegin-blocks.
die vertex-daten werden aber weiterhin aus dem hauptspeicher uebertragen.
dagegen helfen die extensions fuer vertex-buffer-objects.Ich habe mal die exe davon gestartet. Das läuft so ca. eine Sekunde lang schön flüseig und dann gibt es nen Aussetzer für ne viertel Sekunde usw.
Woran liegt das? Wenn dfas meine Hardware überfordern würde, müste es doch "gleichmäßig" ruckeln und nicht schön laufen und dann ganz aussetzten?
Getestet mit :
AMD Athlon 3000+
Geforce 4200
(Ich habe neueste Treiber und sonst nie Probleme mit Ruckeln)Edit. Im Fenstermodus sieht man die FPS und da habe ich 85