从GLFW + AntTweakBar迁移到SDL2 + ImGui性能问题

时间:2016-08-02 17:09:27

标签: opengl sdl-2 glfw

我刚刚将它从GLFW + AntTweakBar迁移到一个动画应用程序(只有一个模型)到SDL2 + ImGui。

OpenGL代码是相同的,但我似乎经历了超过一半的FPS下降
使用SDL2 + ImGui。

在GLFW上我的平均fps为100,在SDL2上我的平均值为30-40。 SDL / GL初始化代码如下:

    SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);

    SDL_DisplayMode current;
    SDL_GetCurrentDisplayMode(0, &current);

    gWindow = SDL_CreateWindow("", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, windowWidth, windowHeight, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
    if (gWindow == NULL)
    {
        std::cout << "Window could not be created! SDL Error: " << SDL_GetError() << std::endl;
        success = false;
    }
    else
    {
        std::cout << std::endl << "Yay! Created window sucessfully!" << std::endl << std::endl;
        //Create context
        gContext = SDL_GL_CreateContext(gWindow);
        if (gContext == NULL)
        {
            std::cout << "OpenGL context could not be created! SDL Error: " << SDL_GetError() << std::endl;
            success = false;
        }
        else
        {
            //Initialize GLEW
            glewExperimental = GL_TRUE;
            GLenum glewError = glewInit();
            if (glewError != GLEW_OK)
            {
                std::cout << "Error initializing GLEW! " << glewGetErrorString(glewError) << std::endl;
            }

            //Use Vsync
            if (SDL_GL_SetSwapInterval(1) < 0)
            {
                std::cout << "Warning: Unable to set Vsync! SDL Error: " << SDL_GetError << std::endl;
            }

如果我尝试设置SDL_GL_SetSwapInterval(0)进行即时更新,我会得到平均60FPS,但它看起来仍然不平滑且模型上有小的撕裂。

我尝试删除了ImGui代码,它应该更好,但性能仍然差得多。 这是正常的吗?

0 个答案:

没有答案