[OpenGL 超级宝典][笔记] 8.1 纹理缓冲区(TBO)

来源:互联网 发布:数据侠客行txt网盘 编辑:程序博客网 时间:2024/06/10 20:00

纹理缓冲区(TBO)

当一个缓冲区对象绑定GL_TEXTURE_BUFFER绑定点时,我们称之为纹理缓冲区(TBO).


作用:

  • 能够直接直译来自其它渲染结果如变换反馈,像素读取操作,顶点数据,提高性能。
  • 宽松的大小限制,比1D纹理大64倍。
  • 用来对片段着色器和顶点着色器顶点数据访问。

使用方法:

Step1: 创建并绑定到GL_TEXTURE_BUFFER上。

    glBindBuffer(GL_TEXTURE_BUFFER, texBO[0]);    glBufferData(GL_TEXTURE_BUFFER, sizeof(float)*count, fileData, GL_STATIC_DRAW);

Step2: TBO绑定到纹理单元上

glActiveTexture(GL_TEXTURE);glBindTexture(GL_TEXTURE_BUFFER, texBOTexture);glTexBuffer(GL_TEXTURE_BUFFER, GL_R32F, texBO[0]);

step3: Shader中使用新的采样器SampleBuffer采样texelFetch.

uniform samplerBuffer lumCurveSample;void main(void){    ...    int offset = int(vColor.r * (1024-1));    lumFactor.r = texelFetch(lumCurveSampler, offset).r;}

采样时,传统的Texture1D的坐标域是(0,1);但是,TBO中texelFetch的坐标域是从0到缓冲区大小值的整数索引。注意,需要减去1;


总结:

TBO相比传统的纹理方式,可以大大的提高性能。