Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何访问着色器(OpenGL 4.0)中的非2次幂可调整大小的内存?_Opengl_Glsl_Shader - Fatal编程技术网

如何访问着色器(OpenGL 4.0)中的非2次幂可调整大小的内存?

如何访问着色器(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_

我需要在片段着色器中使用一块内存。我读过关于GL_纹理_1D的文章,但我读过最大尺寸可能很低。此内存块将在运行时更改其大小,并且此大小应至少为1MB。 我将在片段着色器中按顺序访问此块:

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要慢得多。谢谢!这正是我想要的。