c++ - 无法在 Maya 插件中编译顶点着色器

标签 c++ macos opengl maya

我正在 Maya/MacOS 上编写一个插件,它正在为 OpenGL 编译顶点着色器:

    const char* vscode =
    {
        "#version 150\n"
        ...
    }

但是在 Maya 中执行代码给了我

ERROR: 0:1: '' :  version '150' is not supported

返回的 OpenGL 版本是 2.1 ATI-1.42.6。我试图通过过剩来改变 OpenGL

glutInitDisplayMode(GLUT_3_2_CORE_PROFILE);

但它似乎并没有改变OpenGL Core Profile。我如何从 Maya 插件中更改核心配置文件,或者我如何知道着色器将支持哪个“xxx”版本?

最佳答案

The OpenGL version returned is 2.1 ATI-1.42.6. I tried to change the OpenGL via glut

Maya 是否使用 GLUT?不!那么您希望它如何工作呢?

GLUT 是一个独立的库,用于创建窗口和 OpenGL 上下文。 GLUT 不是 OpenGL 的一部分 并且 GLUT 不能影响不使用 GLUT 的程序的 OpenGL 上下文管理

Maya 在内部执行其 OpenGL 上下文管理,当您的插件被调用时,OpenGL 上下文已经创建并且那个特定上下文的版本配置文件设置为石头。

但您可以做的是您可以创建一个非常自己的 OpenGL 上下文,仅用于您的插件并将其与 Maya 创建的 OpenGL 上下文连接(OpenGL 上下文共享)。无论如何,建议这样做,因为这会将您的插件使用的 OpenGL 与 Maya 使用的 OpenGL 状态分开。

您必须为此使用系统级 OpenGL 上下文管理 API。所以没有 GLUT、没有 GLFW、没有 SMFL 或其他辅助库。别担心,做起来并不难。关于与 Maya 的 OpenGL 上下文连接,每个 OpenGL 上下文管理 API 都具有查询当前事件的 OpenGL 上下文及其事件的可绘制对象的函数。使用它们来存储在您的插件被调用之前哪个上下文+可绘制对象对处于事件状态,然后在返回 Maya 之前将 OpenGL 上下文激活重置为该对。

关于c++ - 无法在 Maya 插件中编译顶点着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37001189/

相关文章:

c++ - 如何使用 clang 将我的 c++ 程序与 osx 上的 libstdc++ 静态链接?

c++ - OpenCV中 "object detection"基于HOG特征的SVM分类器

swift - 如何在 Swift 中成功编译 NSClassFromString

swift - 是否可以将 NSTableView 配置为具有部分?

c++ - 编译 GLFW 源窗口

c++ - 构建 gcc-4.8.2 时如何理解这些可怕的错误?

c++ - 在 C++ 中从 char 获取元音

macos - 如何在雪豹上编译 Valgrind?

c++ - 纹理未通过 stb_image 出现

c++ - 如何正确链接 DevIL 链接器库?