Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 从GLFW和x2B迁移;AntTweakBar到SDL2+;ImGui性能问题_Opengl_Sdl 2_Glfw - Fatal编程技术网

Opengl 从GLFW和x2B迁移;AntTweakBar到SDL2+;ImGui性能问题

Opengl 从GLFW和x2B迁移;AntTweakBar到SDL2+;ImGui性能问题,opengl,sdl-2,glfw,Opengl,Sdl 2,Glfw,我只是将它从GLFW+AntTweakBar迁移到SDL2+ImGui,作为一个单一的动画应用程序(只有一个模型) OpenGL代码是相同的,但我似乎经历了超过一半的FPS下降 使用SDL2+ImGui 在GLFW上,我的平均fps为100,在SDL2上,我的平均fps为30-40。 SDL/GL初始代码如下: SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG); SD

我只是将它从GLFW+AntTweakBar迁移到SDL2+ImGui,作为一个单一的动画应用程序(只有一个模型)

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

在GLFW上,我的平均fps为100,在SDL2上,我的平均fps为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\u GL\u SetAttribute(SDL\u GL\u CONTEXT\u标志、SDL\u GL\u CONTEXT\u FORWARD\u COMPATIBLE\u标志);
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_显示模式电流;
SDL_GetCurrentDisplayMode(0和当前);
gWindow=SDL_CreateWindow(“,SDL_WINDOWPOS_居中,SDL_WINDOWPOS_居中,窗宽,窗高,SDL_WINDOW_OPENGL | SDL_WINDOW可调整大小);
if(gWindow==NULL)
{

std::cout如果vsync打开并且帧速率略低于60 fps(在60Hz监视器上)-它将下降到30。如果没有vsync打开,您很可能会看到撕裂。这两种情况都是正常的和预期的。但是如果您执行相同的工作负载(甚至更低)并且有不同的性能-有些地方不对劲,并且不太可能出现在呈现的代码中。我将SDL_GL_DEPTH_SIZE设置为24位,而不是16位,撕裂停止。尽管FPS保持不变(~30-40)。如果我删除ImGUI,它会有一点改进,但不会有太大的改进,所以我猜这与它无关。模型渲染功能与glfw相同。感谢您的回复。可能它是不同的GL版本。您可以尝试为两个程序使用apitrace捕获GL命令。尚未尝试apitrace,但我会。尽管我注意到runninvisual studio中未处于调试模式的可执行文件的fps平均值为58左右,这一点更好。使用Glfw时仍然低至100。