无法在 Maya 插件中编译顶点着色器
Posted
技术标签:
【中文标题】无法在 Maya 插件中编译顶点着色器【英文标题】:Unable to compile vertex shader in Maya Plugin 【发布时间】:2016-05-03 10:03:46 【问题描述】:我正在 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。我试图通过 glut 更改 OpenGL
glutInitDisplayMode(GLUT_3_2_CORE_PROFILE);
但它似乎并没有改变 OpenGL 核心配置文件。如何从 Maya 插件中更改核心配置文件,或者如何知道着色器支持哪个“xxx”版本?
【问题讨论】:
【参考方案1】:返回的 OpenGL 版本是 2.1 ATI-1.42.6。我试图通过 glut 更改 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 上下文及其活动的可绘制对象的功能。使用它们来存储在调用插件之前激活的上下文+可绘制对,然后在返回到 Maya 之前将 OpenGL 上下文激活重置为该对。
【讨论】:
以上是关于无法在 Maya 插件中编译顶点着色器的主要内容,如果未能解决你的问题,请参考以下文章