【发布时间】:2016-01-29 22:33:13
【问题描述】:
每当我调用 glBufferStorage(...) 时,后续的 glBindBuffer(..) 总是崩溃。例如:
glBindBuffer(GL_SHADER_STORAGE_BUFFER, 1);
glBufferStorage(GL_SHADER_STORAGE_BUFFER, sizeof(unsigned int) * 100, NULL, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT | GL_MAP_READ_BIT );
glBindBuffer(GL_SHADER_STORAGE_BUFFER, 2); // <- CRASH HERE!
如果我删除 glBufferStorage(...) 调用,后续 glBindBuffer 调用不会崩溃!
此代码在 GTX650 Ti 和 PhenonII x6 下的我的桌面上正常运行,openGl 通过 NugeT 在 VS2015 上安装(nupengl.core 包)。然后我将整个项目文件夹粘贴到我的笔记本电脑(GeForce 740M / i7),删除了 openGl nuget 包并重新安装。
如何继续调查问题所在?这是逻辑错误还是 gpu 驱动错误?
【问题讨论】:
-
检查以确保您正确使用该函数(所有标志是否正确)并确保它不是您的硬件不支持的 OpenGL 版本的一部分。
-
@Xirema 我现在的硬件支持 OpenGL 4.5,旧的只支持 OpenGL 4.3,但是代码可以在旧的硬件上运行。这可以接受吗?
-
glBindBuffer(GL_SHADER_STORAGE_BUFFER, 1);你认为这是在做什么?您正在绑定一个数字,而不是实际的缓冲区对象。 -
@NicolBolas 这只是为了简化,如您所知, genBuffer() 调用返回一个无符号整数作为缓冲区的“名称”......
标签: c++ opengl visual-studio-2015 opengl-3