OpenGL回调函数的低通话率?(glutDisplayFunc& glutIdleFunc)

时间:2015-04-23 14:57:59

标签: c++ opengl callback

我遇到了一个关于OpenGL的奇怪问题。我下载了一个OpenGL项目(程序),只是用它作为如何设置freeglut和glew的示例代码。

我做的第一件事(在初始化OGL和#34;根据我下载的我的程序中连接"回调之后)是实现FPS计数器。此FPS计数器也被复制到下载的OGL程序,以便能够比较FPS。我已经清空了下载程序中的displayfunc(回调),使其与我实现的那个完全相同(只计算FPS)。

现在这是(我的和下载过的)程序中唯一发生的事情glutDisplayFunc:

int j = 0;
void DisplayCallbackFunc()
{
    CalculateFPS();
    j++;
}

FPS功能如下所示:

int m_frame = 0;
int m_currtime = 0;
int m_timebase = 0;
char* m_title = new char[24];

void CalculateFPS()
{
    /*Calculate FPS values and outputs avg. fps in the titlebar*/
    m_frame++;
    //get the current time..
    m_currtime = glutGet(GLUT_ELAPSED_TIME);
    //check if a second has passed..
    if (m_currtime - m_timebase > 1000) 
    {
        sprintf(m_title, "Smoke   FPS: %4.0f", m_frame*1000.0f/(m_currtime-m_timebase));
        glutSetWindowTitle(m_title);
        m_timebase = m_currtime;
        m_frame = 0;
    }
}

我还有一个只调用glutPostRedisplay()的空闲回调函数。

我的问题是我的帧(m_frame)(在我的程序中的FPS计数器功能中)比下载的程序中的帧慢得多。这也导致较低的FPS。差别很大;

下载的程序打印~10 000 000

我的节目打印~60 000

所以我在DisplayCallback函数中添加了一个计数器(在两个程序中),如果我在一秒钟后断开(断点内部"如果"在FPS函数中),下载程序中的计数器比我大得多柜台(8 000 000 vs 50 000)。

所以我的问题;

这是否意味着下载程序中回调函数的调用率高于我程序中的调用率?

在这种情况下,可能的原因是什么,这并不意味着我的程序的性能会比下载的程序差吗?

0 个答案:

没有答案