繁体   English   中英

在设备(iOS)上编码ASTC?

[英]Encode ASTC on device (iOS)?

是否有任何库能够按需将图像数据编码为ASTC纹理? 我知道这是CPU密集型的,但无论如何还是有兴趣的。

在iOS 10中,Apple向系统添加了ASTC编码。 您可以通过/usr/include/AppleTextureEncoder.h、/usr/lib/libate.dylib来访问它,也可以(简单)使用CG / ImageIO.framework提供的常规图像编码工具将其编码为ASTC。 请参阅CGImageDestination和关联的对象。 也可以通过Xcode中的图像资产目录压缩来实现。

系统ASTC编码器比ARM参考编码器快得多。 支持块大小为4x4和8x8。 性能应类似于JPEG或PNG编码。

import ImageIO
import MetalKit

let loader: MTKTextureLoader
let srcImage: CGImage
let ktxData = NSMutableData()
let dest = CGImageDestinationCreateWithData(ktxData, "org.khronos.ktx" as CFString, 1, nil)!
CGImageDestinationAddImage(dest, srcImage, 0, ["kCGImagePropertyASTCBlockSize": 0x88] as CFDictionary)
CGImageDestinationFinalize(dest)
try loader.newTexture(data: ktxData as Data, options: [])

显示的kCGImagePropertyASTCBlockSize选项使您获得8x8的块大小(即,每个像素2位); 其他唯一允许的大小是4x4(每个像素8位),这是默认设置。

为了最大性能,增加kCGImageDestinationLossyCompressionQuality: 0.0为选项CGImageDestinationAddImageFromSource

其他可能的标志是kCGImagePropertyASTCUseLZFSEkCGImagePropertyASTCPreTwiddlekCGImagePropertyASTCFlipVerticallykCGImagePropertyASTCWeightChannelsEqually (所有kCGImagePropertyASTCWeightChannelsEqually )。

https://github.com/ARM-software/astc-encoder是参考压缩器(由ARM和AMD创建)。 使源代码在iOS设备上工作可能并不难。 它可能会慢得让人望而却步,但是它确实提供了多种速度选择,因此也许您会在质量和速度之间找到合适的平衡。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM