数据简单地排列为RGBARGBARGBA等,我需要复制仅R值,或者在另一种情况下,仅RG值。
目前我所拥有的大致上是为了复制R值:
for(int i=0; i<dataSize; i++){
dest[i] = source[i*4];
}
对于RG值,我正在执行以下操作:
for(int i=0; i<dataSize; i+=2){
dest[i] = source[i*2];
dest[i+1] = source[(i*2)+1];
}
所有数据都是无符号的1字节值。是否有更快的方法?我已经部分展开了循环(每次迭代处理64个值 - 超过这个数量会得到微不足道的加速)。平台为Armv7(iOS),因此使用NEON(SIMD)可能很有用,但很遗憾我没有任何经验!
不幸的是,改变数据是不可能的,因为它是由OpenGL的readPixels()函数提供的,而且据我所知,iOS不支持读取L、LA、RG等格式。
*(uint16_t *)(dest + i) = *(short *)(source + i)
可能有帮助。 - Chris Lutz