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

08.12.2010, 14:45

Problem mit SFML

Tag Leute,

ich habe heute mal versucht etwas Dalliklick ähnliches mit der SDL zu proggen.
Soweit läuft auch alles ganz gut, aber die Performance ist wirklich zum schreien.
Auf meinem PC (Phenom II @ 3,8, GTX 470) schafft das Programm beim Startscreen gerademal 29FPS, was ~34ms pro Frame entspricht.
Da keine bewegten Objekte vorkommen ist es nicht ganz so schlimm, aber alles fühlt sich sehr träge an (Mauszeiger z.B.).
Dargestellt werden zu diesem Zeitpunkt nur 1 Hintergrund, der den gesamten Screen ausfüllt (1800x1080) und 15 schwarze Flächen (je 360x360), die den Hintergrund bedecken, sowie etwas Text. Wenn man dann nach und nach die schwarzen Flächen wegklickt und nur noch das eigentliche Bild (Hintergrund) sichtbar ist, liegt die FPS rate bei ca. 50. (ca. 20ms pro Frame)
Auf einem Laptop mit C2D läuft das ganze genauso schrecklich - es liegt also nicht am PC.
Selbstverständlich habe ich auch den Release Mode mit sämtlichen Optimierungen benutzt. Das brachte aber kaum Besserung. (nur ca. 2-3 FPS)

Mein Code ist meiner Meinung nach auch nicht schuld. Es ist sicherlich nicht der sauberste, aber meiner Meinung nach ganz akzeptabel.
Das Framework samt Spriteklasse habe ich vom SDL Spiel aus "C++ für Spielepr.." übernommen.

Kommt die SDL nicht mit so vielen großen Sprites klar oder woran liegt es?

Danke im Voraus :)

lg Chaia

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Chaia*« (09.12.2010, 18:47)


NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

08.12.2010, 16:12

die sdl ist nicht hardwarebeschleunigt. schau dir die sfml an. die ist leichter zu bedienen, umfangreicher und sowieso komfortabler und damit dürftest du so schnell keine performanceprobleme bekommen wenn du keine großen fehler machst.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

3

08.12.2010, 17:24

Hallo Chaia*,

benutzt du Hard- oder Software-Surfaces? (also SDL_HWSURFACE oder SDL_SWSURFACE ) Daran könnte es eventuell liegen. Probier einfach mal aus was für deinen Fall (also dein Programm und dein PC) schneller ist.

Gruß
SaRu_

4

08.12.2010, 19:08

Ich benutze HWSURFACE, aber mit SW ist es genauso schnell.
Werde mir die SFML mal anschauen.

ich1994

Treue Seele

Beiträge: 164

Wohnort: Erlangen(nähe Nuernberg)

Beruf: Bald Abiturient(kein job eig...)

  • Private Nachricht senden

5

08.12.2010, 19:27

ach warte doch solange, bis SDL 2.0 released wird^^ soll um eineiges(500-1200%) schneller sein:

http://wiki.libsdl.org/moin.cgi/Roadmap

6

08.12.2010, 19:49

Wieso warten, wenn es den SDL-Funktionsumfang und vieles mehr, die Performance sowieso, schon bei SFML gibt? ;)

ich1994

Treue Seele

Beiträge: 164

Wohnort: Erlangen(nähe Nuernberg)

Beruf: Bald Abiturient(kein job eig...)

  • Private Nachricht senden

7

09.12.2010, 10:17

Ich mag es halt eben mehr, wenn ich selber auch noch eigene Sachen muss, wie zum Beispiel meine eigenen tollen Klasse XD:D

8

09.12.2010, 12:50

So, habe mir jetzt heute morgen ein kleines Framework mit der SFML zusammengebastelt und werde meine Anwendung jetzt mal portieren.
Mal schaun wie die Performance ist :D

9

09.12.2010, 14:50

Okay, also ich habe mir wie gesagt ein kleines Framework geschrieben mit Klassen für Sprites, Text usw.
Um Sprites etc. zu rendern muss man ja folgendes tun:

C-/C++-Quelltext

1
2
sf::RenderWindow App (.....);
App.Draw(Sprite);


Da ich das Fenster namens App allerdings nicht in der Sprite Klasse erstelle kann ich nicht mehr so einfach darauf zugreifen, wenn ich
das Sprite rendern will. Also habe ich mir eine Funktion geschrieben, die so aussieht:

C-/C++-Quelltext

1
sf::RenderWindow GetRenderWindow () {return App;}


Wenn ich dann kompilieren will, erscheint allerdings folgender Fehler in allen Dateien, die irgendwie diese Funktion verwenden oder includen:

sfml-1.6\include\sfml\window\window.hpp(321): error C2248: "sf::NonCopyable::NonCopyable": Kein Zugriff auf private Member, dessen Deklaration in der sf::NonCopyable-Klasse erfolgte.
1> \sfml-1.6\include\sfml\system\noncopyable.hpp(57): Siehe Deklaration von 'sf::NonCopyable::NonCopyable'
1> \sfml-1.6\include\sfml\system\noncopyable.hpp(41): Siehe Deklaration von 'sf::NonCopyable'
1> Diese Diagnose trat in der vom Compiler generierten Funktion "sf::Window::Window(const sf::Window &)" auf.

Wenn ich die Funktion rausnehme, erscheint kein Fehler, allerdings kann ich dann natürlich nicht mehr darauf zugreifen.
Muss ich "App" global deklarieren, oder wie löse ich das Problem?

lg chaia

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

10

09.12.2010, 15:03

du gibst eine kopie zurück. das ist nicht besonders sinnvoll. versuchs mal mit einer referenz ;)
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Werbeanzeige