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

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

1

04.06.2009, 16:13

Optimales 2D

Was müsste man nach leuter Meinung eine 2D Sprite Klasse(eben was zum bilder anzeigen) für eine leistung erbringen.
Wenn man jetzt z.b. ein Bildrender (in einer schleife: screen leeren,rendern,screen updaten)
Dann schaf ich ohne FPS Bremse so 3780 FPS bei einer Grafik die 320x240 groß ist.(Auflösung 800x600)
Wenn ich die Grafik jetzt 3 mal render dann ist die FPS 3000.
Ist das Normal das die FPS dann so um 700 FPS verringert wird.
(Die Render Funktion besteht bei mir nicht nur aus glBegin()...glEnd() sonder auch noch einige Bedingungen oder das ausrechen von richtigen TexCoord)
Kann man das vll irget Optimieren den ich benutzt:
glBegin(GL_QUADS)
glTexCoord
glColor
glVertex

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

2

04.06.2009, 16:24

3780 FPS == Wahnsinnsbereich

Da ist jegliche Optimierung fehl am Platz, weil der Wert kein echten Performance Index darstellt.

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

3

04.06.2009, 16:25

d.h.? ^^

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

4

04.06.2009, 16:41

Nicht 3mal rendern.. eher eine Million mal rendern.
Je höher die Framerate desto weniger genau kann man sagen, ob eine Änderung jetzt daher rührt, dass was optimiert wurde oder weil gerade irgendetwas anderes Kleines das System beschäftigt.. meinetwegen in so einem exorbitanten Bereich auch nur die Temperatur der Komponenten :D

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

5

04.06.2009, 18:30

Jo, wie gesagt, die 700 FPS, die da verloren gingen können an sonstwas liegen... Wenn Programme so gut wie nichts zu tun haben, fällt der ganze Rest, der parallel noch läuft natürlich viel stärker ins Gewicht. Falls die FPS aber immer weiter um 700 Fallen, wenn du 3x mehr renderst, solltest du dir schon Gedanken machen :D

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

04.06.2009, 18:42

Re: Optimales 2D

Wie schon gesagt sind fps, vor allem bei so hohen Werten nicht unbedingt aussagekräftig. Überleg dir dazu einfach folgendes:

Angenommen du hast 1000 fps dauert ein Frame zu redern 1ms.
Angenommen dein Frame dauert aufgrund einer kleinen Änderung jetzt 2ms bist du schon runter auf 500 fps.
Angenommen du hast 50 fps -> Ein Frame dauert 20ms zu rendern.
Angenommen aufgrund einer kleinen Änderung brauchst du jetzt wieder um 1ms Sekunde mehr, also 21ms pro Frame -> ca. 48 fps.
Du siehst: Zwischen der Zeit die ein Frame zu rendern braucht und der Anzahl der Frames die pro Sekunde gerendert werden können herrscht ein nichtlinearer Zusammenhang!
Bei hohen fps Werten (sehr kurze Renderzeiten) macht eine sehr kleine Änderung schon sehr viel aus während die selbe Änderung bei niedrigen fps Werten fast nicht ins Gewicht fällt.

Da du in einem echten Spiel nicht ein Sprite rendern wirst, sondern viele und dort noch viele andere Faktoren reinspielen, ist es nicht wirklich aussagekräftig zu sagen dass ein Sprite zu rendern mit 3700 fps geht, denn daraus kannst du absolut nicht ableiten wie gut die Performance in einer ernst gemeinten Anwendung der Sprite Klasse sein wird (ernste Anwendung: Viele Sprites mit vielen verschiedenen Bildern und in verschiedensten Größen und Ausrichtungen)

Zitat von »"kiba"«

glBegin(GL_QUADS)
glTexCoord
glColor
glVertex


Diese Funktionen sind zwar sehr einfach und angenehm zu verwenden, kommen aber aus der Steinzeit. Wenn du wirklich eine State of the Art Superüberdrüber Spriteklasse willst solltest du dir mal was in Richtung VertexBuffer Objects und Batching und so Dinge anschauen...

Allerdings: Wenn deine vorhandene Klasse für deine Bedürfnisse ausreicht, warum dann alles kompliziert machen!? ;)

7

04.06.2009, 21:20

Ja wie gesagt, die benutzen Funktionen sind Mist.
Viel interessanter ist es auch, 1000 verschiedene Sprites an verschiedenen Positionen zu rendern und das am besten ohne 1000 Drawcalls, weil die bremsen schon.
Sprich: Du musst z.B. alle Sprites nach Texturen sortieren und dann alle mit der selbe Textur in einem Rutsch rendern.
Und was natürlich noch dabei kommt, ist nur das sichtbare zu rendern, was in großen Levels schon eine Menge bringt. Natürlich muss man hier einen Kompromiss zwischen "viel auf einmal" und "nur das nötigste" finden.

Also: Das rendern eines Sprites ist witzlos und sowieso quasi trivial, das wichtige ist, ein ganzes Level schnell zu rendern.


Ahso und wegen der Linearität: Betrachte einfach den Kehrwert (benötigte Millisekunden pro Frame), das ist dann wieder linear.
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige