了解glXCreateContextAttribsARB属性设置

时间:2013-04-04 08:33:06

标签: c++ linux opengl

我正在为Linux手动创建OpenGL 4.2上下文。

我创建了一个像这样的上下文属性数组:

    int context_attribs[] = {
        GLX_CONTEXT_MAJOR_VERSION_ARB, 4,
        GLX_CONTEXT_MINOR_VERSION_ARB, 2,
        GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_DEBUG_BIT_ARB,
        GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB,
        None
    };

然后我把它传递给glXCreateContextAttribsARB()。上下文是好的,但我对属性标志有几个问题。 例如,对于基于文档的GLX_CONTEXT_FLAGS_ARB,我有2个选项:

    GLX_CONTEXT_DEBUG_BIT_ARB       0x0001
GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB  0x0002

如果我选择第一个,是否意味着OpenGL在调试模式下运行?如果是,那么如果我将此标志设置为第二个选项是否意味着我将无法使用固定功能? 如果是,那么如何在兼容性配置文件模式下设置“非调试”上下文?

1 个答案:

答案 0 :(得分:2)

所有标志都是正交的。它们是位标志;你可以单独设置它们,也可以不设置它们。

GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_DEBUG_BIT_ARB,

这意味着要创建调试上下文。

    GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_DEBUG_BIT_ARB | GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB,

这意味着创建一个也使用robust access的调试上下文(我使用此示例而不是前向兼容性,因为您从不使用向前兼容性)。他们是位旗;你是按位还是他们在一起。

    GLX_CONTEXT_FLAGS_ARB, 0,

这意味着没有标志。所以它不会是一个调试上下文,它不会使用健壮的访问等。这可能就是你要找的。

此外,您可以选择不传递标记。