42 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#include <algorithm>
 | 
						|
#include <chrono>
 | 
						|
#include <thread>
 | 
						|
 | 
						|
#include <SDL.h>
 | 
						|
#include "timing.h"
 | 
						|
 | 
						|
 | 
						|
namespace Timing
 | 
						|
{
 | 
						|
    bool _frameUpdate = false;
 | 
						|
    uint64_t _frameCount = 0;
 | 
						|
    double _frameTime = 0.0;
 | 
						|
    double _timingAdjust = VSYNC_TIMING_60;
 | 
						|
 | 
						|
 | 
						|
    bool getFrameUpdate(void) {return _frameUpdate;}
 | 
						|
    uint64_t getFrameCount(void) {return _frameCount;}
 | 
						|
    double getFrameTime(void) {return _frameTime;}
 | 
						|
    double getTimingHack(void) {return _timingAdjust;}
 | 
						|
 | 
						|
    void setFrameUpdate(bool update) {_frameUpdate = update;}
 | 
						|
    void setTimingHack(double hack) {_timingAdjust = hack;}
 | 
						|
 | 
						|
 | 
						|
    void synchronise(void)
 | 
						|
    {
 | 
						|
        static uint64_t prevFrameCounter = 0;
 | 
						|
 | 
						|
        do
 | 
						|
        {
 | 
						|
            _frameTime = double(SDL_GetPerformanceCounter() - prevFrameCounter) / double(SDL_GetPerformanceFrequency());
 | 
						|
        }
 | 
						|
        while(_frameTime < _timingAdjust);
 | 
						|
        prevFrameCounter = SDL_GetPerformanceCounter();
 | 
						|
 | 
						|
        _frameCount++;
 | 
						|
 | 
						|
        // Used for updating non critical render elements at a constant N times per second independently of the main windowed FPS
 | 
						|
        _frameUpdate = ((_frameCount % int((NON_CRITICAL_TIMING)/std::min(_frameTime, (NON_CRITICAL_TIMING)))) == 0);
 | 
						|
    }
 | 
						|
} |