这是一个非常奇怪的问题。
我有一个非常简单的着色器,带有一个统一的 vec4,在使用 GLEW 和 GLFW 的程序中运行。该程序在我运行该程序的多台配备 nVidia 显卡的机器上运行良好。
问题是,当我切换到配备 Intel Graphics 3000 芯片(支持 OpenGL 3.1,我的目标版本)的笔记本电脑时,尝试设置统一变量值的任何函数调用(glProgramUniform4f、glProgramUniformMatrix4fv ,任何其他),游戏因访问冲突而崩溃。
此外(我知道这不是直接的问题,但我认为这可能与解决方案有关),在 nVidia 机器上调用 glGetUniformLocation 返回的值很小,而在 Intel 机器上调用相同的调用返回大(> 6 位)值。
我会发布代码,但我不太确定哪些内容会有帮助。如果您没有想到解决方案,但您知道我应该发布什么样的代码,请告诉我,我很乐意帮忙!
谢谢!
最佳答案
傻我!
glProgramUniform... 方法仅适用于 OpenGL 4.x,不适用于 3.1。
为了解决这个问题,我只是确保我想更改的程序已绑定(bind),然后改用相应的 glUniform... 方法。
关于c++ - 在着色器中访问统一变量的任何尝试都会导致 Intel 芯片上的访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16488302/