Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

11

10.10.2010, 00:11

Prizipiell sollte das so schon funktionieren (auch wenn so Dinge wie if (firstTime) jetzt nicht unbedingt die idealste Lösung sind). Zwei Dinge die mir mal auffallen sind: Warum vewendest du GL_DOUBLE für deine Vertex Komponenten? Ich würde auf jeden Fall auf float setzen da double, wenn es die Hardware überhaupt unterstützt, auch auf neuesten Karten signifikant langsamer sind als float. Weiters würde ich 16bit indices verwenden (GL_UNSIGNED_SHORT statt GL_UNSINGED_INT). Was hast du denn eigentlich für eine Grafikkarte? Man hört desöfteren dass manche Karten (z.B. einige Onboard GPUs) nur über sehr schlechte OpenGL Treiber verfügen und VBOs dort große Performanceprobleme haben.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (10.10.2010, 00:16)


n0_0ne

1x Contest-Sieger

  • »n0_0ne« ist der Autor dieses Themas
  • Private Nachricht senden

12

10.10.2010, 08:39

Hab hier eine GeForce 8600M GT mit 512 MB speicher, also kein onboardzeug, sonst hätte ich wahrscheinlich nichtmal gefragt ^^

Was das firstTime angeht, so ist das alles ja noch provisorisch, wenn es mal funktioniert, wollte ich das eh alles nochmal etwas abändern (wie schon gesagt können ja z.B. alle cubes das selbe VBO verwenden). Wobei ein solches if (boolVar) wohl keinen menschlich wahrnehmbaren unterschied machen sollte ^^

Und ja, was DOUBLE und UNSIGNED INT angeht, könnte ich wohl auch FLOAT und UNSIGNED SHORT nehmen, (auch wenn letztes keinen 100MB Torus mehr zulassen würde :D).

Die Frage ist aber doch, wieso die vertex arrays (ohne object ^^) entweder gleich schnell, oder sogar schneller sind, als meine VBOs. Meinst du, dass speziell VBOs mit DOUBLE und den großen indizes Probleme hat, oder war das mehr eine generelle Anmerkung?

Edit: Nach eine Frage bezüglich double und float... ergibt es sinn, wenn ich in meinem programm mit doubles rechne um die zusätzliche präzision zu behalten und nur "am ende" einmal zu casten und opengl dann floats übergeben, oder würde das auch wieder alles zunichte machen? Ich meine, für die CPU macht es ja so gut wie keinen unterschied, ob double oder float.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »n0_0ne« (10.10.2010, 11:56)


Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

13

11.10.2010, 08:24

Nach meinem Wissen emuliert der OpenGL-Treiber einige Sachen, wenn sie in Hardware nicht gehen. Und ein double im Vertex könnte durchaus so ein Fall sein - dann macht der Treiber intern jedes Frame das gleiche, wie Du vorher mit Vertex-Arrays gemacht hast. 32Bit-Indizes sollten dagegen von den allermeisten Grafikkarten akzeptiert werden, solange Du unter einer gewissen Maximalgrenze bleibst. In den D3DCaps steht die auch drin, OpenGL fängt jenseits davon wahrscheinlich wieder stillschweigend an zu emulieren. Die Grenze lag üblicherweise bei >1 Million, wenn ich mich recht erinnere.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

n0_0ne

1x Contest-Sieger

  • »n0_0ne« ist der Autor dieses Themas
  • Private Nachricht senden

14

11.10.2010, 12:46

wooohooow :D Danke für eure Hilfe leute, die doubles waren anscheinend wirklich das Problem für die VBOs ^^
Mein "mega-torus" (die bezeichnung ist relativ treffend, da er knapp über 1 mio vertices hat :D) schafft nun statt 3-6FPS auf einmal 45-60FPS :)

Dier performance hat sich in diesem (spezial-)fall also um gut das 10-fache erhöht :D

Werbeanzeige