Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.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
在IOS上的openGLES中创建大型查找表_Ios_Opengl Es - Fatal编程技术网

在IOS上的openGLES中创建大型查找表

在IOS上的openGLES中创建大型查找表,ios,opengl-es,Ios,Opengl Es,我正在使用IOS上的openGLES做一些常规的数据处理。目前,我正在尝试创建一个由整数索引访问的浮点值组成的大型查找表(~1M个元素),我希望它是1D(尽管2D可以工作)。我了解到使用纹理/采样器可能是实现这一点的方法,但我剩下的问题是: 采样器还是纹理,哪个更有效?实现最佳结果的参数设置是什么(如glTexParameteri()中配置的参数) 我知道我可以使用1-sample-high 2D采样器/纹理作为1D,但出于好奇,我想知道是否在IOS es3上删除了1D采样器/纹理?我找不到导入

我正在使用IOS上的openGLES做一些常规的数据处理。目前,我正在尝试创建一个由整数索引访问的浮点值组成的大型查找表(~1M个元素),我希望它是1D(尽管2D可以工作)。我了解到使用纹理/采样器可能是实现这一点的方法,但我剩下的问题是:

  • 采样器还是纹理,哪个更有效?实现最佳结果的参数设置是什么(如glTexParameteri()中配置的参数)
  • 我知道我可以使用1-sample-high 2D采样器/纹理作为1D,但出于好奇,我想知道是否在IOS es3上删除了1D采样器/纹理?我找不到导入ES3/GL.h的方法glTexImage2D()或参数GL_TEXTURE_1D

  • OpenGL ES没有1D纹理。在以前的版本中从未使用过,但在最新版本(3.2)中仍然没有。我非常怀疑它是否会


    至少在我看来,这不是什么大损失。使用高度为1的2D纹理,可以使用1D纹理执行任何操作。唯一的小麻烦是,在GLSL代码中对纹理进行采样时,必须传入更多的采样属性和第二个纹理坐标

    对于正在查看的大小,对于高度为1的2D纹理,您也会遇到与1D纹理相同的问题:您受到最大纹理大小的限制。这是由您可以使用
    glGetIntegerv(GL\u MAX\u TEXTURE\u SIZE,…)
    查询的值给出的。相对较新的移动平台的典型值为2K到8K。根据最新的苹果平台(A7到A9),这一限制看起来是4096

    我想不出任何东西能在一个维度上给你一个更大的范围。有一个扩展针对您的用例,但我在iOS支持的扩展列表中没有看到它


    因此,您最好将数据存储在2D纹理中,并使用div/mod算法将大的1D索引拆分为2个纹理坐标。

    “使用高度为1的2D纹理,您可以对1D纹理执行任何操作。”当然,除了1D数组纹理。即使你可以在2D纹理的高度轴上关闭混合,mipmapping仍然不起作用。谢谢你,这解释了很多!如果您不介意的话,还有一个问题,在我使用所有整数索引时,配置纹理以优化性能的最佳方法是什么?据我所知,纹理被设计为使用非整数索引获取,它将被插值或舍入,我可以跳过。更不用说Reto了,我尝试了texelFetch,效果很好。