金属屏幕外渲染

let textureDescriptors = MTLTextureDescriptor()
textureDescriptors.textureType = MTLTextureType.type2D
let screenRatio = UIScreen.main.scale
textureDescriptors.width = Int((DrawingManager.shared.size?.width)!) * Int(screenRatio)
textureDescriptors.height = Int((DrawingManager.shared.size?.height)!) * Int(screenRatio)
textureDescriptors.pixelFormat = .bgra8Unorm
textureDescriptors.storageMode = .shared
textureDescriptors.usage = [.renderTarget, .shaderRead]
ssTexture = device.makeTexture(descriptor: textureDescriptors)
ssTexture.label = "ssTexture"

这里的纹理是透明的。是否可以加载图像纹理,是否可以在绘图方法中渲染图像纹理
let renderPass = MTLRenderPassDescriptor()
renderPass.colorAttachments[0].loadAction = .clear
renderPass.colorAttachments[0].clearColor = MTLClearColorMake(  0.0,  0.0,  0.0,  0.0)
renderPass.colorAttachments[0].texture = ssTexture
renderPass.colorAttachments[0].storeAction = .store

最佳答案

我不知道你在问什么。
MTLTextureLoader用于创建用图像内容初始化的纹理。
可以使用replace(region:...)MTLTexture方法用图像数据填充纹理的全部或部分。
可以使用MTLBlitCommandEncoder将数据从一个纹理复制到(全部或部分)另一个纹理,或从缓冲区复制到纹理。
可以从计算着色器绘制纹理或写入纹理。
这是一个通用的API。有很多方法可以做你想做的事情。你试过什么?这些尝试以什么方式未能达到你想要的目标?

10-04 21:33