在 OpenGL 应用程序中控制 FPS 限制 [英] controlling FPS limit in OpenGL application

查看:30
本文介绍了在 OpenGL 应用程序中控制 FPS 限制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试找到一种可靠的方法,以便能够准确设置我希望我的 OpenGL 应用程序在屏幕上呈现多少 FPS.我可以在某种程度上通过休眠 1000/fps 毫秒来做到这一点,但这并没有考虑到渲染所需的时间.将 fps 限制为所需数量的最一致方法是什么?

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?

推荐答案

你可以在 opengl 中使用 wglSwapIntervalEXT 同步到 vblank.它不是很好的代码,但它确实有效.

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;
}

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");
}

这篇关于在 OpenGL 应用程序中控制 FPS 限制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆