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++ Opengl大型SSBO在读取时挂起_C++_Opengl_Shader_Ssbo - Fatal编程技术网

C++ Opengl大型SSBO在读取时挂起

C++ Opengl大型SSBO在读取时挂起,c++,opengl,shader,ssbo,C++,Opengl,Shader,Ssbo,我有多个大小为400100 int的SSBO(4个SSBO),我的片段着色器会更新此SSBO的值。为此,我调用了draw调用,在draw调用之后读取数据,首先绑定特定的SSBO,然后调用glMapBuffer并将ptr类型转换为int GPU进行繁重的处理(循环10000次)并更新SSBO。我在屏幕上显示的drawelement调用之后有一个print语句,在bind调用之后有一个print语句,它也会显示,但glMapBuffer调用会花费很长时间并挂起系统 在Windows任务管理器中,大部

我有多个大小为400100 int的SSBO(4个SSBO),我的片段着色器会更新此SSBO的值。为此,我调用了draw调用,在draw调用之后读取数据,首先绑定特定的SSBO,然后调用glMapBuffer并将ptr类型转换为int

GPU进行繁重的处理(循环10000次)并更新SSBO。我在屏幕上显示的drawelement调用之后有一个print语句,在bind调用之后有一个print语句,它也会显示,但glMapBuffer调用会花费很长时间并挂起系统

在Windows任务管理器中,大部分时间不使用GPU,只使用CPU。我想这是因为GPU只在draw调用期间使用

另外,我的理解正确吗?当我调用glMapBuffer时,只传输绑定的ssbo

你们有什么建议来解释是什么导致了这个问题吗

我尝试使用glmapbuffer range,这导致了类似的问题

glDrawElements(GL_TRIANGLES, NUM_OF_TRIANGLES , GL_UNSIGNED_INT, 0); 

std::cout << 'done rendering' <<std::endl; //prints this out 

glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, 0); 

glBindBuffer(GL_SHADER_STORAGE_BUFFER, SSBO); 

std::cout << 'done binding ssbo' <<std::endl; //prints this out 

GLint *ptr; 

ptr = (GLint *) glMapBuffer(GL_SHADER_STORAGE_BUFFER, GL_READ_ONLY); //hangs here
glpaurements(GL_三角形,NUM_OF_三角形,GL_UNSIGNED_INT,0);

标准::cout“大小400100英寸”,即1.5 GB。您的实现允许这样的事情吗?“在Windows任务管理器中”在询问有关性能的问题时,请使用实际的分析工具。此外,
glMapBuffer
是draw调用后的第一个命令,因此可能会导致GPU-CPU同步。draw调用本身没有阻塞,并立即返回
glMapBuffer
可能会等待所有操作完成。