我在IOS上使用openGLES来做一些通用的数据处理。目前我正在尝试创建一个由整数索引访问的浮点值的大型查找表(~1M元素),我希望它是1D(虽然2D工作)。我已经了解到使用纹理/采样器可能就是这样做的方法,但我剩下的问题是:
答案 0 :(得分:2)
OpenGL ES没有1D纹理。从来没有在任何以前的版本中,并且仍然没有达到最新版本(3.2)。我非常怀疑它会永远。
至少在我看来,这并没有太大的损失。您可以使用高度为1的2D纹理对1D纹理执行任何操作。唯一的小麻烦是,在GLSL代码中对纹理进行采样时,必须传递更多采样属性和第二个纹理坐标
对于您正在查看的尺寸,您在使用1D纹理时遇到的高度为1的2D纹理也存在同样的问题:您受到最大限制的限制纹理大小。这可以通过glGetIntegerv(GL_MAX_TEXTURE_SIZE, ...)
查询的值给出。相对较新的移动平台的典型值是2K到8K。基于published docs,在最近的Apple平台(A7到A9)上看起来限制为4096.
我无法想到会在一个方面给你一个更大的范围。有一个针对您的用例的EXT_texture_buffer扩展程序,但我在iOS支持的扩展程序列表中没有看到它。
所以你可以做的最好的事情是将数据存储在2D纹理中,并使用div / mod算法将大的1D索引分成2个纹理坐标。