SFML Frame Per Second feedback
#1 Members - Reputation: 121
Posted 31 October 2012 - 07:38 AM
I wanted to add an FPS visual in my game so I converted a script I saw in the XNA 3.0 book to SFML. I'm bascially just wondering if there's any way to optimize the performance as it sometimes eats up more CPU than I would have thought it should. Here's the code:
Main.cpp
[source lang="cpp"]#include <SFML/Graphics.hpp>#include <iostream>#include "FPS.h"#define ScreenWidth 500#define ScreenHeight 300int main(){ sf::RenderWindow window(sf::VideoMode(ScreenWidth, ScreenHeight, 32), "SFML Template"); window.SetFramerateLimit(200); FPS fps; fps.Initialize(); while(window.IsOpened()) { sf::Event Event; while(window.GetEvent(Event)) { if(Event.Type == sf::Event::Closed || Event.Key.Code == sf::Key::Escape) window.Close(); } window.Clear(); // Draw Game Components fps.Draw(window, (ScreenWidth / 2) - 25); window.Display(); } return 0;}[/source]
FPS.h
[source lang="cpp"]#pragma once#include <SFML/Graphics.hpp>#include <iostream>#include <sstream>class FPS{private:float fps;float updateInterval;float timeSinceLastUpdate;float frameCount;sf::String string;std::stringstream ss;public:FPS(void);~FPS(void);void Initialize();void Update(sf::RenderWindow &window);void Draw(sf::RenderWindow &window, float cameraX);};[/source]
FPS.cpp
[source lang="cpp"]#include "FPS.h"FPS::FPS(void){}FPS::~FPS(void){}void FPS::Initialize(){float updateInterval = 1.0f;float timeSinceLastUpdate = 0.0f;float frameCount = 0.0f;string.SetSize(12);string.SetColor(sf::Color::White);}void FPS::Update(sf::RenderWindow &window){}void FPS::Draw(sf::RenderWindow &window, float cameraX){frameCount++;timeSinceLastUpdate = window.GetFrameTime();if(timeSinceLastUpdate > updateInterval){ fps = frameCount / timeSinceLastUpdate; ss << "FPS: " << fps; string.SetText(ss.str()); string.SetPosition(cameraX, 20); window.Draw(string); ss.str(""); frameCount = 0; timeSinceLastUpdate -= updateInterval;}}[/source]
#2 Moderators - Reputation: 5061
Posted 31 October 2012 - 10:08 AM
What amount of CPU usage were you expecting, and why? Generally, it is a good thing that no one tries to pre-emptively throttle your program - that way when you need to use the maximum available system resources you can (more or less). The OS is usually happy for your game to soak up any remaining CPU time. If your game knows that it doesn't need to use all the CPU, it can tell the OS this by issuing blocking calls.I'm bascially just wondering if there's any way to optimize the performance as it sometimes eats up more CPU than I would have thought it should
I'm not overly familar with SFML, but some places to start include:
- SetFramerateLimit - does reducing this value to 60 change anything?
- Have you tried UseVerticalSync()?
Edited by rip-off, 31 October 2012 - 10:10 AM.
#3 Members - Reputation: 121
Posted 31 October 2012 - 10:18 AM
What amount of CPU usage were you expecting, and why? Generally, it is a good thing that no one tries to pre-emptively throttle your program - that way when you need to use the maximum available system resources you can (more or less). The OS is usually happy for your game to soak up any remaining CPU time. If your game knows that it doesn't need to use all the CPU, it can tell the OS this by issuing blocking calls.
I'm bascially just wondering if there's any way to optimize the performance as it sometimes eats up more CPU than I would have thought it should
I'm not overly familar with SFML, but some places to start include:
- SetFramerateLimit - does reducing this value to 60 change anything?
- Have you tried UseVerticalSync()?
Reducing the value to 60 doesn't change much in terms of CPU usage and I have used vertical sync with the same result.
The amount of CPU it's using is a similar amount to the amount that World of Warcraft runs on the same computer!! My CPU meter basically goes from 0% to 12-17%.
Anyway, if it's not something to worry too much about then I won't. I'm still new to low level programming and am trying to learn best practices.
thanks for you feedback.
#4 Members - Reputation: 1566
Posted 31 October 2012 - 11:06 AM
What amount of CPU usage were you expecting, and why? Generally, it is a good thing that no one tries to pre-emptively throttle your program - that way when you need to use the maximum available system resources you can (more or less). The OS is usually happy for your game to soak up any remaining CPU time. If your game knows that it doesn't need to use all the CPU, it can tell the OS this by issuing blocking calls.
I'm bascially just wondering if there's any way to optimize the performance as it sometimes eats up more CPU than I would have thought it should
I'm not overly familar with SFML, but some places to start include:
- SetFramerateLimit - does reducing this value to 60 change anything?
- Have you tried UseVerticalSync()?
Reducing the value to 60 doesn't change much in terms of CPU usage and I have used vertical sync with the same result.
The amount of CPU it's using is a similar amount to the amount that World of Warcraft runs on the same computer!! My CPU meter basically goes from 0% to 12-17%.
Anyway, if it's not something to worry too much about then I won't. I'm still new to low level programming and am trying to learn best practices.
thanks for you feedback.
What is the cpu % if you don't make the FPS call in your loop?
---(Old Blog, still has good info): 2dGameMaking
-----
"No one ever posts on that message board; it's too crowded." - Yoga Berra (sorta)
#6 Members - Reputation: 270
Posted 01 November 2012 - 02:59 AM
I would also personally assess the performance of the function of the time that you are spending within it rather than CPU %. You can do this again with the clock class, reset it at the beginning of your draw function and then get the time at the end to see how long you spent there. You can then decide from this if you are spending too long in this function.






