我需要在片段着色器中使用一块内存。我已阅读有关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对象?
您可能需要研究缓冲区纹理。它们支持的大小保证至少为65536像素,这不能完全满足您的要求。但是我相信大多数GPU支持更大的尺寸。可以使用来查询支持的大小GL_MAX_TEXTURE_BUFFER_SIZE
。
您可以在http://www.opengl.org/wiki/Buffer_Texture中找到完整的描述。总结使用缓冲区纹理的最重要步骤:
glGenBuffers()
,glBindBuffer()
,glBufferData()
电话。glGenBuffers()
。glBindTexture(GL_TEXTURE_BUFFER, id)
。glTexBuffer()
将缓冲区数据与纹理关联。samplerBuffer
为纹理声明一个类型统一的变量,然后使用该texelFetch()
函数访问数据。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句