读取glMapBufferRange返回的SSBO内容

时间:2019-02-12 06:24:24

标签: opengl-es buffer-objects

我想从存储缓冲区对象中检索数据。首先,我想利用glGetBufferSubData。但是似乎该功能在opengl中不存在,尽管它确实在opengl中存在。然后我回到glMapBufferRange上。
如果能在从缓冲区中检索数据后解释信息,那是完美的。但是我认为要做到这一点,我必须提供确切的布局,甚至更多的信息。现在,我不需要那么做。我想做的是,在两种不同的情况下,我要检索缓冲区内容,并比较两种情况下的内容是否相同。
问题是,glMapBufferRange返回void *类型。我将其转换为char *并以十六进制值比较每个字符:

char *buffercontent = (char *)(glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, 80, GL_MAP_READ_BIT));  //just read the first 80 characters. I'm sure the buffer data length is at least 80.
for(int i=0;i<20;i++)
{
    printf("%X", *(buffercontent+i));
}
glUnmapBuffer(GL_SHADER_STORAGE_BUFFER);

我感到困惑,因为我只能看到少于20个字符。为什么?问题是什么?我确信从其他信息来看,buffersize很大。

1 个答案:

答案 0 :(得分:0)

请确保将80(数组的大小)乘以8,以确保OpenGL通过数组大小计数*变量类型的大小(以字节为单位)(在这种情况下为单个字符)。