c++ - 使用 SDL_WINDOW_OPENGL 标志创建窗口速度较慢

标签 c++ opengl sdl

我刚刚开始测试SDL图书馆。我注意到,当我设置 SDL_WINDOW_OPENGL 标志时,SDL_CreateWindow() 非常慢(大约需要 10 倍的时间)。我只讨论窗口创建,而不是 OpenGl 上下文的创建。

基本上,这条线在我的机器上大约需要 55 毫秒:

SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_SHOWN);

这大约需要 500 毫秒:

SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL);

而且我觉得今天速度快多了。昨天我感觉没有花费大约2秒的时间来显示窗口(虽然我没有测量它)

需要这么长时间这是正常的还是我错过了什么?我也是 OpenGL 新手,所以我什至无法猜测它在幕后的作用。

最佳答案

需要很长时间的是从显卡供应商处加载 OpenGL 驱动程序。

我遇到了类似的问题,因此我用符号重建了 SDL 并对其进行了分析。几乎所有时间都花在 ChoosePixelFormat 函数上,该函数是 wgl(Windows 特定的 opengl 接口(interface))的一部分。对我来说,今天,使用 Nvidia 卡,需要整整一秒钟才能完成此初始化。

这里有一个很好的线程,更详细地描述了这些问题:

https://hero.handmade.network/forums/code-discussion/t/2503-%5Bday_235%5D_opengls_pixel_format_takes_a_long_time

关于c++ - 使用 SDL_WINDOW_OPENGL 标志创建窗口速度较慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42776455/

相关文章:

c++ - CMake 与 Qt : moc creates . cpp_parameters 结束

opengl - 绘制不同尺寸的FBO

c - 如何清空 SDL 事件队列?

c - Linux 上的 SDL 是否支持多个游戏 handle /操纵杆?

c++ - SDL 和 c++——在玩家身后留下踪迹的更有效方式?

c++ - 返回对模板 vector 的引用

c++ - 如何判断函数来自哪个include头文件?

c++ - 在编译时将 mpl::vector_c 复制到静态数组

c++ - 简单的基于 OpenGL 的相机类

c++ - 我可以更改 glui 面板背景颜色吗?