Ios GPUImage和OpenGL ES中的多个单通道输出

Ios GPUImage和OpenGL ES中的多个单通道输出,ios,opengl-es-2.0,gpuimage,Ios,Opengl Es 2.0,Gpuimage,我试图使用GPUImage库进行图像处理,而不是将图像输出到屏幕。默认情况下,库输出一个BGRA纹理。我想改为输出多个单通道/单字节纹理。到目前为止,我已经为BGRA中的每个像素位打包了多个计算。我已经达到了这种方法的局限性,因为a I现在每个像素的返回值大于4,b去隔行BGRA-BGRA-BGRA-BGRA的开销。。。。。进入BBBB…,GGGG…,RRRR…,AAAA…,开始让我的程序陷入困境 我知道有一些使用GPUImage的多输入纹理的示例代码,但我还没有看到任何关于多输出纹理的示例代码

我试图使用GPUImage库进行图像处理,而不是将图像输出到屏幕。默认情况下,库输出一个BGRA纹理。我想改为输出多个单通道/单字节纹理。到目前为止,我已经为BGRA中的每个像素位打包了多个计算。我已经达到了这种方法的局限性,因为a I现在每个像素的返回值大于4,b去隔行BGRA-BGRA-BGRA-BGRA的开销。。。。。进入BBBB…,GGGG…,RRRR…,AAAA…,开始让我的程序陷入困境

我知道有一些使用GPUImage的多输入纹理的示例代码,但我还没有看到任何关于多输出纹理的示例代码。对于单字节输出,我相信我可以使用GL_ALPHA纹理,所以我猜将多个纹理绑定到我的过滤器内核中的变量是一个问题


谢谢

可能您需要的是多个渲染目标或简称MRT。您可以使用GL_color_ATTACHMENT检查目标硬件支持的颜色附件数量。不幸的是,我相信不是所有的iOS设备都支持,如果有的话

不幸的是,用作渲染目标的纹理中颜色格式的选项有些有限。我没有尝试过,但我不相信你可以使用GL_RED_EXT纹理作为一个组件使用的FBO目标,我认为这些只是用于输入纹理。我知道目前没有一款iOS设备支持多个渲染目标,因此您可能需要在多个渲染过程中执行操作。为什么最终需要对值进行逐行扫描?经过一番挖掘,结果表明可以使用GL_RED_EXT纹理作为渲染目标,但这并不能解决需要多个同时目标的核心问题。需要使用不同着色器的多个渲染过程来提取单独的数据平面。这些渲染过程是否是作为同一程序的一部分的多个着色器?我不介意编写单独的着色器,我只关心开销。只要输入内存不需要每帧复制5次,我认为这不会是一个问题。我会看看我能用GL_RED_EXT做些什么。谢谢!哦,我去隔行扫描的原因是因为一个通道被传送到一个只接受一个灰度字节/像素的条形码阅读器库,其他频道正在传输色调带通算法的数据,该算法通过单独的热图,突出显示具有特定颜色波长的图像部分。多个着色器程序可能是实现这一点的方法。将多个程序保存在内存中不会产生巨大的开销,编译和链接是比较慢的部分,但最好只执行一次。在片段着色器中使用条件语句在iOS设备上非常昂贵,如果可能的话应该避免,因此最好将每种情况分解成自己的着色器程序。