Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

controlling FPS limit in OpenGL application

I am trying to find a solid method for being able to set exactly how many FPS I want my OpenGL application to render on screen. I can do it to some extent by sleeping for 1000/fps milliseconds but that doesn't take into account the time needed to render. Which is the most consistent way to limit fps to desired amount?

like image 969
Tsaras Avatar asked Feb 19 '13 22:02

Tsaras


People also ask

How do I limit my FPS to 60?

System Config > Display Settings > Frame Rate > select the 60 fps option.

Does limiting FPS improve performance?

Capping your framerate is especially beneficial to laptops or any other sort of mobile computers as it provides an excellent way to keep a laptop from eating its battery alive and also from burning a hole in your crotch. Keep in mind that capping your framerate isn't the same as using v-sync.


1 Answers

you can sync to vblank by using wglSwapIntervalEXT in opengl. its not nice code, but it does work.

http://www.gamedev.net/topic/360862-wglswapintervalext/#entry3371062

bool WGLExtensionSupported(const char *extension_name) {
    PFNWGLGETEXTENSIONSSTRINGEXTPROC _wglGetExtensionsStringEXT = NULL;

    _wglGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)wglGetProcAddress("wglGetExtensionsStringEXT");

    if (strstr(_wglGetExtensionsStringEXT(), extension_name) == NULL) {
        return false;
    }

    return true;
}

and

PFNWGLSWAPINTERVALEXTPROC       wglSwapIntervalEXT = NULL;
PFNWGLGETSWAPINTERVALEXTPROC    wglGetSwapIntervalEXT = NULL;

if (WGLExtensionSupported("WGL_EXT_swap_control"))
{
// Extension is supported, init pointers.
    wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC)wglGetProcAddress("wglSwapIntervalEXT");

// this is another function from WGL_EXT_swap_control extension
    wglGetSwapIntervalEXT = (PFNWGLGETSWAPINTERVALEXTPROC)wglGetProcAddress("wglGetSwapIntervalEXT");
}
like image 134
bizzehdee Avatar answered Oct 21 '22 01:10

bizzehdee