我正在将 SDL 2 用于基于 OpenGL 的应用程序,并且目前正在使用如下代码实现抗锯齿:
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, samples);
但我不想对抗锯齿级别进行硬编码,因此我想让用户从有效值列表中选择值。问题是我不知道如何找出用户计算机支持哪些值。在我的游戏机上,我可以选择最大值 16,但在我的笔记本电脑上,我只能选择 4。任何更高的设置都会触发错误消息无法找到匹配的 GLX 视觉效果
。
那么如何找出 SDL_GL_MULTISAMPLESAMPLES
属性可以使用的最大值是多少?
最佳答案
这是一个 4 年前的问题,但如果人们来到这里:
有一种方法可以获取此信息。您必须使用 glGetIntegerv ( GL_MAX_SAMPLES, &maxSamples );
但不幸的是,您只能在创建窗口后才能执行此操作。因此,您必须创建一个没有多重采样的临时窗口,从 openGL 获取所有必需的信息,然后关闭该窗口并创建真正的窗口。
如果您想向用户隐藏此临时窗口创建,可以使用 SDL_WINDOW_HIDDEN
标志来创建它。 “加载屏幕”也可以做到这一点:
- 打开不需要抗锯齿的“正在加载应用程序数据...”屏幕。
- 用它来调用
glGetIntegerv
和其他类似的东西。 - 加载您的应用程序数据、纹理...
- 关闭此窗口并打开带有抗锯齿功能的最后一个窗口。 :)
关于opengl - 如何确定支持的最大多重采样样本数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24738638/