gpt4 book ai didi

ios - 离屏渲染 Metal

转载 作者:搜寻专家 更新时间:2023-11-01 05:32:57 25 4
gpt4 key购买 nike

 func mtkView(_ view: MTKView, drawableSizeWillChange size: CGSize) {
print("current drawable size:\(view.drawableSize)")
}

func draw(in view: MTKView) {


guard let drawable = view.currentDrawable else { return }

let textureDescriptor = MTLTextureDescriptor()
textureDescriptor.textureType = MTLTextureType.type2D
textureDescriptor.width = drawable.texture.width
textureDescriptor.height = drawable.texture.height
textureDescriptor.pixelFormat = .bgra8Unorm
textureDescriptor.storageMode = .shared
textureDescriptor.usage = .renderTarget

let sampleTexture = device.makeTexture(descriptor: textureDescriptor)


let renderPass = MTLRenderPassDescriptor()
renderPass.colorAttachments[0].texture = sampleTexture
renderPass.colorAttachments[0].loadAction = .clear
renderPass.colorAttachments[0].clearColor =
MTLClearColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0)
renderPass.colorAttachments[0].storeAction = .store

let commandBuffer = commandQueue.makeCommandBuffer()
var commandEncoder = commandBuffer?.makeRenderCommandEncoder(descriptor: renderPass)


let deltaTime = 1 / Float(view.preferredFramesPerSecond)


for scene in scenes{
scene.render(commandEncoder: commandEncoder!, deltaTime: deltaTime)
}

commandEncoder?.endEncoding()


let descriptor = view.currentRenderPassDescriptor
commandEncoder = commandBuffer?.makeRenderCommandEncoder(descriptor: descriptor!)



for canvasScene in canvasScenes{
canvasScene.updateCanvas(texture: sampleTexture!)
canvasScene.render(commandEncoder: commandEncoder!, deltaTime: deltaTime)
}

commandEncoder?.endEncoding()


commandBuffer?.present(drawable)
commandBuffer?.commit()
}

我是离屏渲染的新手。我希望我做对了。任何人都可以建议它是否正确。我首先在样本纹理中绘制它,然后将样本纹理设置为在当前可绘制对象中绘制的四边形(平面)。它是进行离屏渲染的优化方式吗。

此代码在我仅禁用 Metal API 验证时运行。否则我会遇到以下问题

Fragment Function(fragment_shader_texture): Shader reads texture (texture[0]) whose usage (0x04) doesn't specify MTLTextureUsageShaderRead (0x01)

建议优化

最佳答案

离屏纹理对.renderTarget的使用,应该使用[.renderTarget, .shaderRead]。

关于ios - 离屏渲染 Metal ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51511686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com