数组给着色器程序"/>
OpenGL ES之如何传输一个超大数组给着色器程序
一、前言
- 在 OpenGL ES 图形图像处理中,会经常遇到一种情况:如何将一个超大的数组传给着色器程序?目前常用的有三种方式:
-
- 使用将数组加载到 2D 纹理的方式,然后使用 texelFetch 取数据;
-
- 使用 uniform 缓冲区对象,即 UBO;
-
- 使用纹理缓冲区对象,即 TBO。
二、将数组加载到纹理
- 使用将数组加载到纹理的方式来传输大数组,是最容易想到的一种方式。要想精确地换取每个像素的值,这个时候就不能使用采样函数 texture,因为采样函数会涉及归一化、过滤以及插值等复杂操作,基本无法得到某一确切像素的值。
- 这个时候就需要使用纹素获取函数 texlFetch ,texlFetch 是 OpenGL ES 3.0 引入的 API ,它将纹理视为图像,可以精确访问像素的内容,可以类比通过索引来获取数组某个元素的值:
vec4 texelFetch(sampler2D sampler, ivec2 P, int lod)
更多推荐
OpenGL ES之如何传输一个超大数组给着色器程序
发布评论