c++ - 在着色器中访问统一变量的任何尝试都会导致 Intel 芯片上的访问冲突

标签 c++ opengl-3

这是一个非常奇怪的问题。

我有一个非常简单的着色器,带有一个统一的 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/

相关文章:

c++ - 如何对 float 执行按位运算

image - 替换 GL_LUMINANCE、GL_LUMINANCE_ALPHA​

macos - NSOpenGLView 不会清除

c++ - SFML - Opengl VAO 问题给我一个 (1282) 错误

OpenGL 3.x : Access violation when using vertex buffer object and glDrawElements(. ..)

c++ - 当字符串末尾被修改时,delete[] 的行为是什么

c++ - 源代码错误,将交叉编译器从 gcc4.9.2 降级到 gcc4.4.1 后

c++ - 绘制 GL_TEXTURE_RECTANGLE 与 GL_TEXTURE_2D

c++ - 围绕问题传递字符串

c++ - 取消引用指向指针数组的 void 指针