我需要在片段着色器中使用一块内存。我读过GL_TEXTURE_1D,但我读过最大尺寸可能很低。此内存块将在运行时更改其大小,此大小应至少为1MB。 我将在片段着色器中按顺序访问此块:
for (int i=0; i<sizeOfBlock; i++){
vec4 v=read(block, i);
}
我猜这个着色器会非常慢,即使FBO是256x256,但我希望它能在gtx 550 Ti中以5-10 fps的速度运行,¿它不可能吗?
我应该选择哪个OpenGL对象来使用这个内存?
答案 0 :(得分:2)
您可能想要查看缓冲区纹理。它们支持的尺寸保证至少为65536像素,这不符合您的要求。但我相信大多数GPU都支持更大的尺寸。可以使用GL_MAX_TEXTURE_BUFFER_SIZE
查询支持的大小。
您可以在http://www.opengl.org/wiki/Buffer_Texture找到完整的说明。总结使用缓冲区纹理的最重要步骤:
glGenBuffers()
,glBindBuffer()
,glBufferData()
来电,将您的数据存储在缓冲区中。glGenBuffers()
创建纹理ID。glBindTexture(GL_TEXTURE_BUFFER, id)
绑定纹理。glTexBuffer()
将缓冲区数据与纹理相关联。samplerBuffer
的统一变量,并使用texelFetch()
函数访问数据。