OpenGL缓存纹理(Texture Buffer)
缓存纹理¶
OpenGL缓存纹理(Texture Buffer)是一种用于高效存储大量数据的技术。它允许将一个缓存对象作为纹理,这个缓存对象可以存储大量的数据。通过这种方式,可以使用纹理采样器来读取这些数据,而无需使用传统的缓存读写操作。
优势
- 最大的好处就是它可以在着色器程序中高效地访问大量数据
特点
- 一维纹理的尺寸受限于
GL_MAX_TEXTURE_SIZE
对应的最大值,但是缓存纹理的尺寸受限于GL_MAX_TEXTURE_BUFFER_SIZE
的值,通常能达到 2GB 甚至更多。 - 一维纹理支持滤波、mipmap、纹理坐标的截取,以及其他的一些采样器参数,但是缓存纹理不行
- 一维纹理的纹理坐标是归一化的浮点数值,但是缓存纹理使用的是没有归一化的整数纹理坐标
- 在GPU中,一维纹理的像素还是RGBA四个通道。如果你只传R,就会多出GBA三个多余空间
GLSL¶
在GLSL中,与缓存纹理相关的类型主要包括以下三种:
samplerBuffer
:用于从纹理缓冲区中获取浮点型(float)像素值。usamplerBuffer
:用于从纹理缓冲区中获取无符号整数(unsigned int)像素值。isamplerBuffer
:用于从纹理缓冲区中获取有符号整数(int)像素值。
在使用过程中,需要先通过textureSize()
函数获取纹理缓冲区的尺寸,然后使用texture()
函数或者texelFetch()
函数来进行采样操作。其中
texture()
函数用于对缓冲区进行插值采样- 而
texelFetch()
函数则直接从缓冲区中取出像素值,不进行插值处理
应用¶
- 实例化渲染
- GPU矢量纹理(可参考:
计算机图形学 > 渲染概述 > 文字渲染 > GPU矢量渲染
下的文章)