GLSL弃用

GLSL Deprecation

我一直在分段升级我的项目。在此期间,我目前仍在使用 gl_ModelViewProjectionMatrix。

我使用的是 OpenGL 3.1 Compatablity 1.4 GLSL 这在我的电脑上运行良好。当我尝试将它移动到另一台计算机时,出现以下错误:

C7533: 全局变量 gl_ModelViewProjectionMatrix 在版本 120

后被弃用

为什么一台计算机允许弃用的功能而另一台计算机不允许?有什么我需要移动到另一台计算机吗?这听起来像是一个警告,但对象要么未绘制,要么未翻译。

顺便说一下,GLSL 着色器版本和上下文版本是两个不同的东西。 gl_ModelViewProjectionMatrix 在 GLSL 1.20(在 GL 2.1 中引入)之后 被弃用 是真的,因为 GL 3.0 被弃用(和 GL 3.1 没有 GL_ARB_compatibility 删除)整个固定-函数矩阵栈。 GLSL 1.50 版向 GLSL 引入了配置文件,这些配置文件仍然独立于上下文版本,但工作方式相同——弃用的内容通常在后来的核心 GLSL 版本中 已删除

说了这么多,我真的不知道这是怎么回事。如果您确实拥有 GL 3.1 核心上下文,则没有命令可以设置与 gl_ModelViewProjectionMatrix 关联的矩阵(无论您的 GLSL 编译器是否接受)。 glLoadMatrix (...), 等等都在 GL 3.1 中被删除了。

但是,我怀疑您没有通常认为的 "core" 上下文。 GL 3.1 是一个丑陋的东西,它早于将配置文件引入 OpenGL。虽然它在技术上 删除了 几乎所有在 GL 3.0 中被弃用的东西,但如果扩展名 GL_ARB_compatibility 存在,你实际上拥有我们现在所说的 "compatibility profile".

好的,看来我的问题的根源是这台计算机有 Nvidia 显卡。为了解决错误(我认为这应该是一个简单的警告),我将 GLSL 编译器版本更改为“#version 150 compatibility”并将 OpenGL 更改为 3.2

这说服了 Nvidia GLSL 编译器停止抱怨并完成它的工作。等我准备好了再从ff矩阵栈升级