opengl - 如何确定支持的最大多重采样样本数

标签 opengl sdl antialiasing sdl-2

我正在将 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/

相关文章:

opengl - 在OpenGL中更新纹理的有效方法

SDL 的 ubuntu 问题

c++ - 如何在另一个类中使用主类中的全局 const int 变量

android - 如何为 Android 构建 SDL 库

c - 如何使用带有 OpenGL 的 Nurbs 知道特定值的位置?

java - 从 jar 运行 opengl jogamp

c# - 在 WPF 图像上禁用抗锯齿

processing - 选择渲染器 - 默认和 J2D 之间的区别?

antialiasing - 是否保证SDL_RenderCopy不会抗锯齿?

c++ - 如何在 OpenGL 中有效地为 2D Sprite 制作动画?