为什么我的GLFW窗口这么慢?

时间:2014-07-25 12:06:10

标签: performance opengl

由于某种原因,以下代码会生成如下结果:enter image description here

我不知道为什么渲染每一帧需要一两秒钟。代码对我来说似乎很正常,但我不知道为什么它会如此缓慢地呈现它。

#define GLFW_INCLUDE_GLU
#define GLEW_STATIC
#include"GL/glew.c"
#include"GLFW/glfw3.h"
#include<cmath>
#include<ctime>
#include<stdlib.h>
using namespace std;

int main( ) {
    // init glfw
    if ( !glfwInit( ) ) return 0;

    // create window and set active context
    GLFWwindow* window = glfwCreateWindow( 640, 480, "Test", NULL, NULL );
    glfwMakeContextCurrent( window );

    // init glew
    if ( glewInit( ) != GLEW_OK ) return 0;

    // set swap interval
    glfwSwapInterval( 1 );

    // render loop
    while ( !glfwWindowShouldClose( window ) ) {
        srand( time( NULL ) );
        float r = ( rand( ) % 100 ) / 100.0;

        float ratio;
        int width, height;
        glfwGetFramebufferSize( window, &width, &height );
        ratio = width / ( float ) height;
        glViewport( 0, 0, width, height );

        // render
        glClear( GL_COLOR_BUFFER_BIT );
        glClearColor( r, 0, 0, 1 );

        // swap
        glfwSwapBuffers( window );

        // events
        glfwPollEvents( );
    }

    // terminate glfw
    glfwTerminate( );

    return 0;
}

1 个答案:

答案 0 :(得分:5)

您的GLFW代码是正确的,并且执行速度比您想象的要快得多。

randsrand使用不正确。更具体地说,每次渲染时,srand都会显示当前时间(以秒为单位),这将在同一秒内每次为r生成完全相同的值。

因此,您每秒将屏幕清除几百次。这个看起来像它只能以每秒一帧的速度呈现,但它确实不是。

您的代码还存在一些其他问题(例如使用rand()%100会产生偏差分布。并冗余地使用一些OpenGL命令),但您需要解决的问题是:{{ {1}}只有一次,而不是每次渲染。