我想从存储缓冲区对象中检索数据。首先,我想利用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很大。
请确保将80(数组的大小)乘以8,以确保OpenGL通过数组大小来计数*变量类型的大小(以字节为单位)(在这种情况下为单个字符)。