C++ 在着色器中访问SSBO时程序崩溃
每当我尝试访问SSBO时,都会出现一个错误,即C++ 在着色器中访问SSBO时程序崩溃,c++,opengl,graphics,3d,C++,Opengl,Graphics,3d,每当我尝试访问SSBO时,都会出现一个错误,即atio6axx.pdb未加载 我的图形卡(AMD)驱动程序已经更新,但有趣的是,在搜索我找到的解决方案时,我发现了一个线程,它是在几个小时前发布的,所以这可能是一个驱动程序问题吗?我搜索了我的电脑,找到了.dll,但没有找到.pdb,这可能是问题所在吗?我已将VS设置为从Microsoft符号服务器加载符号,但不从NuGet.org符号服务器加载符号 相关代码: 着色器(简化为仅显示必要的代码): 创建SSBO: float test[3] { 0
atio6axx.pdb未加载
我的图形卡(AMD)驱动程序已经更新,但有趣的是,在搜索我找到的解决方案时,我发现了一个线程,它是在几个小时前发布的,所以这可能是一个驱动程序问题吗?我搜索了我的电脑,找到了.dll
,但没有找到.pdb
,这可能是问题所在吗?我已将VS设置为从Microsoft符号服务器加载符号,但不从NuGet.org符号服务器加载符号
相关代码:
着色器(简化为仅显示必要的代码):
创建SSBO:
float test[3] { 0, 10, 0 };
glGenBuffers(1, &ss_id);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, ss_id);
glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(float) * 3, test, GL_STATIC_READ);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 5, ss_id);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0);
感谢您的帮助对于其他有此问题的人,我找到了原因。我是用
test.t[0]
引用SSBO中的数据的,当它应该是t[0]
的时候,我发现了发生此问题的原因。我是用test.t[0]
引用SSBO中的数据,而它应该是t[0]
“layout(binding=5,std430)”,应该是8
,以便与glBindBufferBase
中的值匹配。此外,您的GL\u STATIC\u READ
语义错误。如果您不想从CPU再次上传到它,它应该是GL\u STATIC\u COPY
,表示CPU不会接触它。@Nicolas感谢您的回复。这些数字不匹配,因为我测试了不同的索引,以防出现问题,但即使它们是相同的,程序仍然会发生。谢谢你指出这一点,我找不到太多关于使用哪一个的信息。“我得到一个错误,说atio6axx.pdb未加载。”这不是一个erorr,这是调试器的一个附加警告,这是预期的,也不是真正相关的(因为AMD的windows驱动程序是封闭源代码,所以你不会得到调试符号)。那么真正的错误是什么呢?驱动程序因某些分段错误而崩溃?@derhass它抛出了一个异常,称为访问冲突读取位置
“布局(binding=5,std430)”,该布局应为8
,以与glBindBufferBase
中的值匹配。此外,您的GL\u STATIC\u READ
语义错误。如果您不想从CPU再次上传到它,它应该是GL\u STATIC\u COPY
,表示CPU不会接触它。@Nicolas感谢您的回复。这些数字不匹配,因为我测试了不同的索引,以防出现问题,但即使它们是相同的,程序仍然会发生。谢谢你指出这一点,我找不到太多关于使用哪一个的信息。“我得到一个错误,说atio6axx.pdb未加载。”这不是一个erorr,这是调试器的一个附加警告,这是预期的,也不是真正相关的(因为AMD的windows驱动程序是封闭源代码,所以你不会得到调试符号)。那么真正的错误是什么呢?驱动程序因某些分段错误而崩溃?@derhass它正在抛出一个异常,说访问冲突读取位置
float test[3] { 0, 10, 0 };
glGenBuffers(1, &ss_id);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, ss_id);
glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(float) * 3, test, GL_STATIC_READ);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 5, ss_id);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0);