Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.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)上编码ASTC?_Ios_Textures_Metal_Astc - Fatal编程技术网

在设备(iOS)上编码ASTC?

在设备(iOS)上编码ASTC?,ios,textures,metal,astc,Ios,Textures,Metal,Astc,是否有任何库能够根据需要将图像数据编码到ASTC纹理? 我知道它是CPU密集型的,但还是感兴趣。是参考压缩器(由ARM和AMD创建)。让源代码在iOS设备上运行可能并不难。它的速度可能太慢了,但它确实提供了各种速度选项,因此可能会在质量和速度之间找到合适的平衡。在iOS 10中,苹果在系统中添加了ASTC编码。您可以通过/usr/include/appletexturencoder.h、/usr/lib/libate.dylib或(更简单)使用CG/ImageIO.framework提供的常用图

是否有任何库能够根据需要将图像数据编码到ASTC纹理?
我知道它是CPU密集型的,但还是感兴趣。

是参考压缩器(由ARM和AMD创建)。让源代码在iOS设备上运行可能并不难。它的速度可能太慢了,但它确实提供了各种速度选项,因此可能会在质量和速度之间找到合适的平衡。

在iOS 10中,苹果在系统中添加了ASTC编码。您可以通过/usr/include/appletexturencoder.h、/usr/lib/libate.dylib或(更简单)使用CG/ImageIO.framework提供的常用图像编码UTIL对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: [])
显示的
kGimagePropertyAstCblockSize
选项可获得8x8块大小(即每像素2位);唯一允许的其他大小是4x4(每像素8位),这是默认值

要获得最大性能,请将
kgimagedestinationossycompressionquality:0.0
添加到
CGImageDestinationAddImageFromSource
的选项中


其他可能的标志是
kGimagePropertyAstcuselzfse
kGimagePropertyAstcPretwidle
kGimagePropertyAstcFlipVertical
kGimagePropertyAstcWeightChannelSequely
(所有bools)。

我想在用户退出应用程序时将其放入长时间运行的后台任务。随着时间的推移,它可能会逐渐将未压缩的纹理交换到ASTC。Aw,似乎我不能直接使用它:“此机密和专有软件只能在ARM Limited(C)版权所有2011-2012 ARM Limited的许可协议授权的情况下使用。保留所有权利。”我想您的授权在这里:。这不是一个标准的许可证,我一眼就觉得它是允许的,类似于zlib/mit,但我还是要仔细阅读。如果我来实现这一点,我会直接联系他们,谢谢!我使用CGImageDestination获得了它,但是如何设置8x8块大小?是CPU还是硬件?这太棒了!这看起来像是未记录的方式,因为我在文档中找不到
kgimagepropertyastcblocksize
,也找不到
org.khronos.ktx
UTI。