我正在将SDL 2用于基于OpenGL的应用程序,我目前正在使用以下代码实现抗锯齿:
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, samples);
但是我不想硬编码反消除级别,所以我想让用户从有效值列表中选择值。问题是我不知道如何找出用户机器上支持的值。在我的游戏机上,我可以选择最大值16,但在我的笔记本电脑上我只能选择4.任何更高的设置都会触发错误消息Couldn't find matching GLX visual
。
那么如何找出我可以用于SDL_GL_MULTISAMPLESAMPLES
属性的最大值?
答案 0 :(得分:2)
由于多重采样是像素格式属性,我认为没有办法从OpenGL查询它。您可能需要在特定操作级别上执行此操作,但我不确定如何使用SDL。
答案 1 :(得分:2)
这是一个4年前的问题,但万一人们来到这里:
有一种方法可以获得这些信息。您必须使用glGetIntegerv ( GL_MAX_SAMPLES, &maxSamples );
,但不幸的是,您只能在创建窗口后执行此操作。所以你必须创建一个没有多重采样的临时窗口,从openGL获取所有必需的信息,然后关闭这个窗口并创建真实的窗口。
如果要将此临时窗口创建隐藏到用户,可以使用SDL_WINDOW_HIDDEN
标志创建它。 A"加载屏幕"也可以做到这一点:
glGetIntegerv
和其他类似的东西。答案 2 :(得分:0)
请问(wglChoosePixelFormatARB | glXChooseVisual)! 如果他们不支持你想要的样本数,他们就不会返回像素格式。
const int piAttribIList[] =
{
WGL_DRAW_TO_WINDOW_ARB, GL_TRUE,
WGL_SUPPORT_OPENGL_ARB, GL_TRUE,
WGL_DOUBLE_BUFFER_ARB, GL_TRUE,
WGL_PIXEL_TYPE_ARB, WGL_TYPE_RGBA_ARB,
WGL_ACCELERATION_ARB, WGL_FULL_ACCELERATION_ARB,
WGL_COLOR_BITS_ARB, 32,
WGL_DEPTH_BITS_ARB, 24,
WGL_STENCIL_BITS_ARB, 8,
WGL_SAMPLE_BUFFERS_ARB, 1,
WGL_SAMPLES_EXT, 4,
0 // zero term
};
const float pfAttribFList[] = { 0.0f };
int piFormats;
unsigned int nNumFormats;
assert(wglChoosePixelFormatARB(m_Ptr->m_hDC, piAttribIList, pfAttribFList, 1, &piFormats, &nNumFormats));
如果nNumFormats是> 0然后支持WGL_SAMPLES_EXT,4
如果nNUmFOrmats为0,则不支持WGL_SAMPLES_EXT == 4
无需创建虚假上下文
在我的opengl上,最新的nvidia drvier。 glGetIntegerv(GL_MAX_SAMPLES,& maxSamples);给了我32 但我不能用32 mutlisample创建一个上下文,对于offscreenframebuffers来说,32也是如此。