我刚刚开始测试SDL库。我注意到SDL_CreateWindow()设置SDL_WINDOW_OPENGL标志时非常慢(需要大约 10 倍的时间)。我只是在谈论窗口的创建,而不是 OpenGL 上下文的创建。
基本上这条线在我的机器上大约需要 55 毫秒:
SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_SHOWN);
Run Code Online (Sandbox Code Playgroud)
这大约需要 500 毫秒:
SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL);
Run Code Online (Sandbox Code Playgroud)
我觉得今天要快得多。昨天我觉得显示窗口大约需要 2 秒(虽然我没有测量它)
花这么长时间是正常的还是我错过了什么?我也是 OpenGL 的新手,所以我什至无法猜测它在幕后做了什么。
需要很长时间的是从显卡供应商处加载 OpenGL 驱动程序。
我遇到了类似的问题,因此我用符号重建了 SDL 并对其进行了分析。几乎所有时间都花在 ChoosePixelFormat 函数上,该函数是 wgl(Windows 特定的 opengl 接口)的一部分。对我来说,今天,使用 Nvidia 卡,需要整整一秒钟才能完成此初始化。
这里有一个很好的线程更详细地描述了这些问题: