只执行一次函数

时间:2017-10-15 11:08:07

标签: c++ opengl

我正在玩能够在音乐变化的四轮行(位置)上同步显示两种不同纹理。音乐采用跟踪格式。它由包含行的模式组成。跟踪器的API返回当前播放的行(行)。我只需要在四边形上显示一次第一个纹理,然后在行(位置)改变时仅显示一次第二个纹理。在DrawGLScene()中,每次迭代都会调用drawNoise()函数。一行音乐需要0.09秒。 intPosCurrVal变量对于这些0.09秒具有相同的值。因此,对于相同的drawNoise()值,函数intPosCurrVal会被调用多次,持续时间为0.09秒。播放下一行音乐时,intPosCurrVal变量会递增。我想仅针对drawNoise()变量的相同值调用intPosCurrVal一次。换句话说,在一直调用的主绘图函数中,我只想调用函数drawNoise()作为intPosCurrVal变量的值增加1。

主要绘图功能:

int DrawGLScene(GLvoid)                     
{
    int posCurrVal = Music_GetPosition();

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glClearColor(1.0f, 1.0f, 1.0f, 0.0f);

    drawNoise(intPosCurrVal);
    // some other code

    glFlush();
    return TRUE;    
}

drawNoise功能:

void drawNoise( int x )
{  
    glEnable( GL_TEXTURE_2D );
    glEnable( GL_DEPTH_TEST );

    if( x > prev )
    {
        glBindTexture( GL_TEXTURE_2D, texPosNoise );
        prev = x;
    }
    else
    {
        glBindTexture( GL_TEXTURE_2D, texNegNoise );
    }

    glBegin( GL_QUADS );
    glColor3f( 1.0f, 1.0f, 1.0f );
    glTexCoord2f( 0.0, 0.0 ); glVertex3f( - 15.0, - 15.0, 0.0 );
    glTexCoord2f( 0.0, 1.0 ); glVertex3f( - 15.0, 15.0, 0.0 );
    glTexCoord2f( 1.0, 1.0 ); glVertex3f( 15.0, 15.0, 0.0 );
    glTexCoord2f( 1.0, 0.0 ); glVertex3f( 15.0, - 15.0, 0.0 );
    glEnd();

    glDisable( GL_TEXTURE_2D );
    glDisable( GL_DEPTH_TEST );
}

提前谢谢

1 个答案:

答案 0 :(得分:1)

对我来说,有很多可能的解决方案。一个可能是让DrawGLScene返回posCurrVal的值。也就是说,它将返回它发送到DrawNoise的位置,您可以将其保存在某处。然后,当再次调用DrawGLScene时,将它发送给您之前保存的值(作为需要添加到函数定义的新参数)。现在,您可以将该值与Music_GetPosition()获得的值进行比较,只有在值发生变化时才调用DrawNoise

这只是一种可能的解决方案 - 我相信您可以提出可能更适合您的代码的其他解决方案。