【问题标题】:Do I need to define an OpenGL context in Maya 2017?我需要在 Maya 2017 中定义 OpenGL 上下文吗?
【发布时间】:2016-12-01 19:51:25
【问题描述】:

我正在将 Maya 2016 插件 (C++) 更新到 Maya 2017。该插件在标准 2.0 ViewPort 中显示 OpenGL 形状 (VBO),并且在 Maya 2016 中与 OpenGL 2.1 完美配合。 现在 Maya 2017 带有 OpenGL 4.1,在执行任何 opengl 操作之前,prepareForDraw 函数中执行的 glErrorString 会给出无效操作(代码 1282)。

这似乎是因为没有可用的 OpenGL 上下文。我是否需要手动创建 OpenGL 上下文或让 Maya 为我创建一个函数,还是应该将现有的 Maya 上下文链接到 OpenGL?

如果需要,我可以分享一些代码,但不确定它在这个阶段是否相关。

【问题讨论】:

  • 检查是否有活动的 OpenGL 上下文非常容易。只需调用 wglGetCurrentContext(假设您的目标是 Windows,X11/GLX 和 macOS 也有类似的函数)来检索当前活动上下文的句柄(或 nil 句柄)。 – 我的猜测是,您的旧 OpenGL-2.1 代码与 GL-4 根本不兼容,它弃用了许多旧东西,这就是它失败的原因。
  • 我在 Mac 上,所以使用了 CGLGetCurrentContext 函数,它确实返回了一个非零句柄。但是我应该用这个手柄做些什么吗?现在在给出 0 错误后立即执行错误检查,但是当我在 glGenVertexArrays(1, &vaoID[0]) 之后立即执行另一个 gl-command 时,我再次收到 1282 错误。
  • 如果你有OpenGL上下文,你就可以去上班了。然而,首先进行一些健全性检查是有意义的(它实际上支持哪个 OpenGL 版本等等)。你能做什么和不能做什么取决于这一点。从技术上讲,我强烈建议您为插件创建自己的 OpenGL 上下文,以防止在 Maya 上踩踏。你可以在drawables之间任意切换上下文;只需确保在启动时将调用线程恢复到它处于活动状态的上下文即可。
  • 根据 Maya 返回的内容,它确实是 OpenGL 4.1。所以CGLGetCurrentContext 给我返回了一个上下文。 OpenGL 4.1 应该支持的简单基本glGenVertexArrays 怎么会返回错误?我应该在做某事之前以任何方式激活这个上下文吗?

标签: c++ opengl maya opengl-4


【解决方案1】:

问题来自我的旧定义:

#ifdef __APPLE__
#define glGenVertexArrays glGenVertexArraysAPPLE
#define glBindVertexArray glBindVertexArrayAPPLE
#define glDeleteVertexArrays glDeleteVertexArraysAPPLE
#endif

删除这些行会使错误消失

【讨论】:

    猜你喜欢
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    相关资源
    最近更新 更多