我正在尝试编写一个GPUImageFilter
子类,它可能会呈现数千个羽毛圆圈(是的,它是笔触)。我目前的方法包括一个glDrawArrays
绘制一吨正方形的调用,以及一个顶点属性,每个顶点属性通知片段着色器每个的质心在哪里,以便着色器可以绘制一个圆,其 alpha 值向边缘逐渐变细(最远质心)。
这在我的测试设备(iPad Mini)上非常快,除非有(a)超过 1,000 个圆圈或(b)圆圈真的很大。多边形很快,但着色器速度很快。
我想知道将圆圈直接渲染到字节缓冲区是否会更快,并让 GPUImage(使用GPUImageRawDataInput
)尽可能地抓取字节以渲染(通过其他过滤器)到屏幕。
Accelerate 框架是我知道如何在 iOS 上操作字节的最快方法。例如,我发现我可以使用以下方法非常快速地用 vDSP 填充 RGBA 缓冲区:
const int iValue = [RGBA colour as int];
vDSP_vfilli(&iValue, (int*)bytes, 1, width * height);
谁能建议我如何使用vDSP
orvImage
函数集将羽化圆渲染到我的字节缓冲区中?唯一能想到的方法涉及太多for
循环而无法执行。