0

我有多个大小为 400400100 个整数的 SSBO(4 SSBO),我的片段着色器更新了这个 ssbo 的值。我通过调用drawelements调用来做到这一点,并在draw调用之后通过首先绑定特定的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, 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
4

0 回答 0