我已经分段升级了我的项目。我现在还在使用gl_ModelViewProjectionMatrix。
我使用OpenGL 3.1 Compatablity 1.4 GLSL这在我的电脑上工作正常。当我尝试将其移动到另一台计算机时,它给出了以下错误:
C7533:版本120之后不推荐使用全局变量gl_ModelViewProjectionMatrix
为什么一台计算机允许弃用功能而另一台计算机不允许?我需要移动到另一台计算机吗?这听起来像是一个警告,但对象要么没有绘制,要么没有被翻译。
答案 0 :(得分:1)
顺便提一下,GLSL着色器版本和上下文版本是两个独立的东西。在GLSL 1.20(GL 2.1中引入)之后,gl_ModelViewProjectionMatrix
弃用是正确的,因为GL 3.0已弃用(并且GL 3.1没有删除GL_ARB_compatibility
)整个固定功能矩阵堆栈。 GLSL版本1.50向GLSL引入了配置文件,它们仍然独立于上下文版本,但工作方式相同 - 在以后的核心GLSL版本中,不推荐使用的东西通常会被删除。
尽管如此,我真的不知道这是如何工作的。如果您确实拥有GL 3.1核心上下文,则没有可以设置与gl_ModelViewProjectionMatrix
关联的矩阵的命令(无论您的GLSL编译器是否接受它)。在GL 3.1中删除了glLoadMatrix (...)
等等。
但是,我怀疑你没有通常认为的“核心”上下文。 GL 3.1是一个丑陋的东西,它早于将配置文件引入OpenGL。虽然技术上删除了几乎所有在GL 3.0中弃用的内容,但如果扩展名GL_ARB_compatibility
存在,则实际上我们称之为“兼容性配置文件”。
答案 1 :(得分:0)
好吧,看来我的问题的根源是这台电脑有一块Nvidia显卡。为了解决错误(我认为应该是一个简单的警告)我将我的GLSL编译器版本更改为" #version 150兼容性"和OpenGL到3.2
这说服了Nvidia GLSL编译器停止抱怨并完成其工作。我准备好后,我将从ff矩阵堆栈升级。