阅读时Opengl Large SSBO挂起

问题描述

我有多个大小为 400400100 整数的 SSBO(4 SSBO),我的片段着色器更新了这个 ssbo 的值。我通过调用 drawelements 调用来做到这一点,并在绘制调用后通过首先绑定特定的 SSBO,然后调用 glMapBuffer 并将 ptr 类型转换为 int 来读取数据。

GPU 执行繁重的处理(循环 10000 次迭代)并更新 SSBO。我在屏幕上显示的 drawelement 调用之后有一个打印语句,在绑定调用之后有一个打印语句,它也显示出来,但 glMapBuffer 调用需要永远并挂起系统。

在 Windows 任务管理器中,大部分时间不使用 GPU,只使用 cpu。我认为是因为 GPU 仅在绘制调用期间使用。

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

你们对可能导致此问题的原因有什么建议吗?

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

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); 

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)