【问题标题】:Understanding glXCreateContextAttribsARB attributes setup了解 glXCreateContextAttribsARB 属性设置
【发布时间】:2013-04-04 08:33:05
【问题描述】:

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

【问题讨论】:

    标签: c++ linux opengl


    【解决方案1】:

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

    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,
    

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

    此外,您可以选择根本不传递标志。

    【讨论】:

    • 你能在“强大的访问”使用上花费吗?我阅读了文档,但还没有真正理解为什么我需要它。或者我应该将此作为另一个问题提交? ;)
    • @MichaelIV:鲁棒访问最近才被引入,以帮助开发 OpenGL 框架或执行不受信任代码的后端,例如浏览器中的 WebGL。在鲁棒访问方法之前,某些 OpenGL 方法可用于从其他进程泄漏信息或用于代码注入。启用强大的功能后,会添加某些额外的完整性检查,并且不会留下未初始化的缓冲区。详情见opengl.org/registry/specs/ARB/robustness.txt
    猜你喜欢
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多