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

时间:2016-05-03 10:03:47

标签: 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”版本?

1 个答案:

答案 0 :(得分:2)

  

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

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上下文及其活动的drawable的功能。在调用插件之前,使用它们存储哪些上下文+可绘制对是活动的,然后在返回Maya之前将OpenGL上下文激活重置为该对。