0

我想从存储缓冲区对象中检索数据。一开始,我想利用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 个打印出来的字符。为什么?问题是什么?我确定缓冲区大小与其他信息相比很大。

4

1 回答 1

0

确保将 80(数组的大小)乘以 8,将 OpenGL 视为通过数组大小 * 以字节为单位的变量类型大小(在本例中为单个字符)进行计数。

于 2019-12-21T15:43:25.393 回答