Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在着色器中访问SSBO时程序崩溃_C++_Opengl_Graphics_3d - Fatal编程技术网

C++ 在着色器中访问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

每当我尝试访问SSBO时,都会出现一个错误,即
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);