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

21.10.2012, 17:28

SFML 2.0 - Sehr wenige FPS

Hi,

ich habe ein Problem mit SFML 2.0.
Ich bin vor kurzem mit SFML angefangen (habe vorher mit SDL gearbeitet) und wollte jetzt ein kleines Spiel beginnen.
Das einzige was bisher passiert, ist dass man einen noch imaginären Character bewegt, der aber immer in der Mitte des Bildschirms bleibt. D.h. der Hintergrung bewegt sich.

Da ist nun aber schon mein Problem. Es funktioniert zwar alles, aber obwohl nur der Hintergrund gerendert wird habe ich nur etwa 5-10 Frames in der Sekunde.

Hier erstmal der relevante Code:


Main-Loop

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
while (App.isOpen())
    {
        
        /*
        Event Schleife
        */

        App.clear();

        //Position des Hintergrundes und des Characters updaten
        game.update();

        //Hintergrund rendern (ruft CBackground::render() auf
        game.render(&App);  
        
        App.display();

    }



Dann die Render-Funktion des Hintergrunds

C-/C++-Quelltext

1
2
3
4
5
6
7
void CBackground::render(sf::RenderWindow * window)
{
    window->draw(*background1);
    window->draw(*background2);
    window->draw(*background3);
    window->draw(*background4);
}


Anm: Der Hintergrund besteht aus 4 einzelnen Sprites mit einer Größe von jeweils 1024*1024. Wenn der Hintergrund später größer werden sollte, werde ich es so lösen, das nur die Sprites gerendert werden, die auch zu sehen sind, Aber im Moment sollte es ja auch noch so gehen


Das ist auch schon fast alles wichtige, was passiert. Ich habe mal die Zeit zwischen den einzelnen Funktionen in der Main-Loop gestoppt und da kam heraus, das die App.display() Funktion mit Abstand am meisten Zeit benötigt und zwar ca. 0.05 bis 0.1 Sekunden. Die Update und Render Funktionen brauchen weniger als 0.001 Sekunden.
Weiß einer von euch, was hier falsch laufen könnte? Weil so eine schlechte Performance kann ja eigentlich nicht sein.
Falls ihr noch mehr Informationen oder Code braucht, sagt Bescheit.

michi_95

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

21.10.2012, 17:42

Wie steht es um Deinen OpenGL-Treiber?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

21.10.2012, 17:45

Wie steht es um Deinen OpenGL-Treiber?
Keine Ahnung. Wo findet man die Infos darüber?

EDIT: Ich glaube, daran liegt es aber nicht, weil die SFML Beispiel Programme alle normal funktionieren.

eXpl0it3r

Treue Seele

Beiträge: 386

Wohnort: Schweiz

Beruf: Professional Software Engineer

  • Private Nachricht senden

4

21.10.2012, 18:02

Deine Grafikkarte ist evtl. zu alt. Was hast du denn für eine?
4x1024x1024 ist jetzt nicht grad wenig zu verarbeiten.

Wenn du ein komplettes und minimales Beispiel gibst könnten wir es testen... ;)
Blog: https://dev.my-gate.net/
—————————————————————————
SFML: https://www.sfml-dev.org/
Thor: http://www.bromeon.ch/libraries/thor/
SFGUI: https://github.com/TankOs/SFGUI/

5

21.10.2012, 18:14

Meine Grafikkarte ist eine 2 Jahre alte ATI Radeon HD5570

EDIT: So, habe jetzt die Release-exe und die Source Dateien mal hochgeladen. Eventuell braucht ihr noch die SFML-DLLs.
»michi_95« hat folgende Datei angehängt:
  • Projekt.zip (263,01 kB - 55 mal heruntergeladen - zuletzt: 22.12.2023, 22:22)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »michi_95« (21.10.2012, 18:24)


6

21.10.2012, 18:47

Hast du mal das std::cout aus deine Main-Loop raus genommen?
In die Konsole rein zuschreiben ist nicht sehr schnell.

Edit: Ansonsten würde ich dir mal raten RAII, Smart-Pointer, Referenzen und Const-Correctness anzuschauen. Die Pointer sind nämlich alle nicht nötig.

7

21.10.2012, 19:27

Hast du mal das std::cout aus deine Main-Loop raus genommen?
In die Konsole rein zuschreiben ist nicht sehr schnell.
Das weiß ich. Es lief ja vorher schon langsam, deshalb hab ich sie nur benutzt um die Fps anzuzeigen.

eXpl0it3r

Treue Seele

Beiträge: 386

Wohnort: Schweiz

Beruf: Professional Software Engineer

  • Private Nachricht senden

8

21.10.2012, 19:32

Hast du mal das std::cout aus deine Main-Loop raus genommen?
In die Konsole rein zuschreiben ist nicht sehr schnell.
Naja es sollte aber auch nicht auf 10fps runter bremsen, es wird ja schliesslich nur einmal per Frame aufgerufen.

Ansonsten würde ich dir mal raten RAII, Smart-Pointer, Referenzen und Const-Correctness anzuschauen. Die Pointer sind nämlich alle nicht nötig.
Da kann ich nur völlig zu stimmen. Auch kann ich nur von der CKlasse Bezeichnung abraten. Das wurde vor langer Zeit mal von Microsoft verwendet, aber macht mit generischem C++ keinen Sinn, da es einem eigentlich nicht interessieren muss ob dies nun eine Klasse (Class), ein Struct oder ein Typdef, etc ist, sondern es ist wichtig, dass man die Signaturen kennt. ;)

Ich bekomme überigens schöne 150-250 FPS, also liegt es wohl wirklich entweder an deinem veralteten Treiber oder der Hardware selbst. Überprüf einfach mal ob es einen neuen Treiber gibt.
Was genau ist der Sinn von den vier Backgrounds? Wenn du deinen Spieler an einer Position halten willst, dann empfehle ich dir die Verwendung von sf::View. Falls du nicht weisst wie damit um zu gehen ist, kannst du mal mein Tutorial lesen.
Blog: https://dev.my-gate.net/
—————————————————————————
SFML: https://www.sfml-dev.org/
Thor: http://www.bromeon.ch/libraries/thor/
SFGUI: https://github.com/TankOs/SFGUI/

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

21.10.2012, 19:35

4x1024x1024 ist jetzt nicht grad wenig zu verarbeiten.

Äh, was? Das rechtfertigt auf keinen Fall 10 FPS. Ich tippe noch immer auf Treiberprobleme. Die Beispielprogramme laufen vermutlich mit deutlich kleineren Samples oder weniger Transparenz, was selbst in Software nicht so langsam läuft.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

eXpl0it3r

Treue Seele

Beiträge: 386

Wohnort: Schweiz

Beruf: Professional Software Engineer

  • Private Nachricht senden

10

21.10.2012, 19:39

Äh, was? Das rechtfertigt auf keinen Fall 10 FPS.
Kommt ganz auf die Grafikkarte drauf an, aber so alte Dinger hat heute wohl wirklich niemand mehr. ;)
Aber es gab schon einmal einen Fall im offiziellen Forum, bei welchem jemand einfach zu viel Information verarbeiten wollte und das alles irgendwo nicht mehr gepasst hat. Da der Code Anfangs ja nur sehr spärlich beschrieben wurde, konnte ich sowieso nur etwas rumraten. :)
Blog: https://dev.my-gate.net/
—————————————————————————
SFML: https://www.sfml-dev.org/
Thor: http://www.bromeon.ch/libraries/thor/
SFGUI: https://github.com/TankOs/SFGUI/

Werbeanzeige