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

1

06.02.2007, 16:04

SDL schafft nur 25 Bilder/Sekunde ?

Moin,

ich habe mir ein kleines Spiel geschrieben. Dazu habe ich die SDL Bibliothek verwendet. Ich lasse dabei sooft wie möglich den bildschirm neuzeichnen. Nun habe ich mir mal ausgeben lassen wie oft er es schafft den bildschirm zu beschreiben. Das programm schafft es den bildschirm alle 40ms zu beschreiben. Das heißt das spiele läuft nur mit 25 bildern in der sekunde. Egal ob ich gerade was zeichne oder alles ganz normal läuft. Normale 3d spiele schaffen ja auch 40-70 Frames/Sekunde daher schockiert mich dieser wert etwas. Ich arbeite mit einer auflösung von 1280x1024. Mache ich etwas falsch oder ist das normal? Das kann ja eigentlich nicht sein oder?

Gruß, Prophet

EDIT: Wenn ich PNGs zeichne (Mit alpha kanal) komme ich sogar nur auf eine aktualisierungsrate von 150ms, also 7 bilder die sekunde. Das kann doch nicht sein. Spiele wie "Battel For Wesnoth" bestehen nur aus PNG Grafiken und laufen schneller....

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

06.02.2007, 17:17

SDL benutzt nicht die Hardware zum Bilder-Zeichnen, sondern macht das alles in Software. Von daher kannst du nicht mehr erwarten.

3

06.02.2007, 23:27

Oh,...

Dann mache ich mich mal an OpenGL ran...

Beneroth

Alter Hase

Beiträge: 969

Wohnort: Schweiz

Beruf: Software Entwickler

  • Private Nachricht senden

4

07.02.2007, 09:33

Ich arbeite an einem kleinen GUI-Framework für SDL, und da hab ich also keinerlei Probleme (Framerate minimum bei 70 auf nem schlechten PC und bis über 300 auf guter/aktuellen Hardware).

Klar, bei mir wird noch nicht soviel gemacht, aber ich denke du kannst sicherlich noch einiges Optimieren und dann läufts auch brauchbar.

@David: Unter Windows wird ja auch normal DirectDraw verwendet, also nix von wegen alles in Software..oder kannst du mri das genauer erklären? :D

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

07.02.2007, 13:08

Zitat von »"Beneroth"«

@David: Unter Windows wird ja auch normal DirectDraw verwendet, also nix von wegen alles in Software..oder kannst du mri das genauer erklären? :D

Ich weiß nicht genau, wie SDL das macht. Aber DirectDraw unterstützt vieles nicht, z.B. Transparenz mit Alpha-Kanal.

Beliah

Treue Seele

Beiträge: 115

Wohnort: Söhlde - LK Hildesheim

Beruf: FI-Anwendungsentwicklung

  • Private Nachricht senden

6

07.02.2007, 18:37

Zitat von »"David Scherfgen"«

SDL benutzt nicht die Hardware zum Bilder-Zeichnen, sondern macht das alles in Software. Von daher kannst du nicht mehr erwarten.


Auch wenn man die Surfaces mit HW_SURFACE erstellt?
Debuggers don't remove bugs, they only show them in slow motion.

Google Suche ohne Werbung und Cookies: Scroogle

Derzeitige(s) Freizeitprojekt(e)

7

08.02.2007, 15:42

Also ich habe wie gesagt immer den gesammten Bildschirm neugezeichnet.

Meine Bildschirm-Surface habe ich folgendermaßen initialisiert:

C-/C++-Quelltext

1
SDL_SetVideoMode(1280, 1024, 16, SDL_HWSURFACE | SDL_FULLSCREEN | SDL_DOUBLEBUF | SDL_RLEACCEL);


Und dann habe ich mit diesem Code immer wieder alle gezeichnet:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
SDL_BlitSurface(Background, NULL, Screen, NULL);
        
PaintUnit(Player, Screen);
        
for(int i = 0; i < EnemyNumber; i++)
{
    PaintUnit(EnemyUnits[i], Screen);
    MoveUnit(EnemyUnits[i], Screen);
}
        
SDL_Flip(Screen);


Ich habe also nur Blits durchgeführt (auch in den Funktionen). Es waren immer genau zehn einheiten und meine die ich in den bildschirm kopiert habe. Wie gesagt habe ich nie mehr als 25 Bilder die sekunde erreicht. Wenn ich pngs mit alphatransparenz verwendet habe sogar nut 7 bilder die sekunde...

Ich bin selbst dann nicht zu einer höheren frequenz gekommen wenn ich gar nichts gezeichnet habe....

Beliah

Treue Seele

Beiträge: 115

Wohnort: Söhlde - LK Hildesheim

Beruf: FI-Anwendungsentwicklung

  • Private Nachricht senden

8

08.02.2007, 16:40

Hmm... ich hab höhere FPS-Raten - aber ich hab auch noch nie pngs benutzt.

Ich nehm auch an das du die Bilder nicht immer neu von der Festplatte lädst?
Debuggers don't remove bugs, they only show them in slow motion.

Google Suche ohne Werbung und Cookies: Scroogle

Derzeitige(s) Freizeitprojekt(e)

Pit

Frischling

Beiträge: 42

Wohnort: Luxemburg

  • Private Nachricht senden

9

08.02.2007, 18:32

Mit wieviel FPS läuft es, wenn Du die Auflösung etwas runterschraubst? Hab gerade einmal ganz schnell bei mir getestet und da liegt zwischen 800x600 und 1024x800 (höchste die ich erreiche) bereits ein ziemlicher Unterschied.
Und ändert sich was, wenn Du die SDL_RLEACCEL weglässt?

10

08.02.2007, 18:41

Zitat von »"Beliah"«

Ich nehm auch an das du die Bilder nicht immer neu von der Festplatte lädst?

Nein alle Bilder die ich verwende lade ich nur einmal und binde sie dann immer über ein surface ein. Wie gesagt verwende ich nur Blits für den bildaufbau.

Zitat von »"Beliah"«

Hmm... ich hab höhere FPS-Raten - aber ich hab auch noch nie pngs benutzt.

So wie es für mich aussieht liegt es ja noch nicht einmal an den pngs. Selbst wenn ich normale bmps mit transparenter farbe verwende oder sogar gar nichts zeichne bekomme ich keine höhere rate.

Zitat von »"Pit"«

Mit wieviel FPS läuft es, wenn Du die Auflösung etwas runterschraubst? Hab gerade einmal ganz schnell bei mir getestet und da liegt zwischen 800x600 und 1024x800 (höchste die ich erreiche) bereits ein ziemlicher Unterschied.

Hier die werte:
> 1280x1024: 40ms = 25 Bilder/Sekunde
> 1024x768: ca. 25ms = 40 Bilder/Sekunde
> 800x600:ca. 15 ms = 67 Bilder/Sekunde
Aber das ist ja auch eigentlich logisch.

Zitat von »"Pit"«

Und ändert sich was, wenn Du die SDL_RLEACCEL weglässt?

Es ändert sich nichts.

Werbeanzeige