如何访问着色器(OpenGL 4.0)中的非2次幂可调整大小的内存?
我需要在片段着色器中使用一块内存。我读过关于GL_纹理_1D的文章,但我读过最大尺寸可能很低。此内存块将在运行时更改其大小,并且此大小应至少为1MB。 我将在片段着色器中按顺序访问此块:如何访问着色器(OpenGL 4.0)中的非2次幂可调整大小的内存?,opengl,glsl,shader,Opengl,Glsl,Shader,我需要在片段着色器中使用一块内存。我读过关于GL_纹理_1D的文章,但我读过最大尺寸可能很低。此内存块将在运行时更改其大小,并且此大小应至少为1MB。 我将在片段着色器中按顺序访问此块: for (int i=0; i<sizeOfBlock; i++){ vec4 v=read(block, i); } 对于(int i=0;i您可能需要查看缓冲区纹理。它们支持的大小保证至少为65536像素,这并不完全满足您的要求。但我相信大多数GPU支持更大的大小。支持的大小可以使用GL_
for (int i=0; i<sizeOfBlock; i++){
vec4 v=read(block, i);
}
对于(int i=0;i您可能需要查看缓冲区纹理。它们支持的大小保证至少为65536像素,这并不完全满足您的要求。但我相信大多数GPU支持更大的大小。支持的大小可以使用GL_MAX_TEXTURE_buffer_size
查询
您可以在找到完整的说明。要总结使用缓冲区纹理的最重要步骤,请执行以下操作:
- 使用通常的
glGenBuffers()
,glBindBuffer()
,glBufferData()
调用将数据存储在缓冲区中
- 使用
glGenBuffers()
创建纹理id
- 使用
glBindTexture(GL\u texture\u BUFFER,id)
绑定纹理
- 使用
glTexBuffer()
将缓冲区数据与纹理关联
- 在片段着色器中,为纹理声明类型为
samplerBuffer
的统一变量,并使用texelFetch()
函数访问数据
你真的想在一次片段着色器调用中获取一百万内存吗?我想这比你希望的5到10 fps要慢得多。谢谢!这正是我想要的。