glsl中要将结果输出到一块texture buffer上时,在每一帧前都要进行纹理空间的重新分配,如下代码中的glTexBufferRange,
glBindTexture(GL_TEXTURE_BUFFER, uiTextureID[texture::VR_RESULT]);
glTexBufferRange(GL_TEXTURE_BUFFER, GL_RGBA8, uiBufferID[buffer::VR_RESULT], 0, iWindowWidth * iWindowHeight * 4);
glBindTexture(GL_TEXTURE_BUFFER, 0);
buffer的设置如下:
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, uiBufferID[buffer::VR_RESULT]);
glBufferData(GL_PIXEL_UNPACK_BUFFER, iWindowWidth * iWindowHeight * 4, nullptr, GL_DYNAMIC_DRAW);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
以下是引用 GL_DYNAMIC_DRAW参数的opengl说明文档的内容:
DYNAMIC_DRAW The data store contents will be respecified repeatedly by the application, and sourced many times.
不知道每次都要重新分配是否也跟这个值有关?
这里感觉texture好像buffer一个部分的引用,每次通过纹理的引用将输出内容输出到buffer上,而每次texture引用buffer的哪个部分都似乎要重新指定。上面是个人的猜测,有待验证!