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()
}
I am new to Off screen rendering. I hope I am doing it correct. can any one suggest whether it is correct or not. I am drawing it in sample Texture in first and then setting the sample texture to the quad(plane) which is drawing in the current drawable. Is it the optimized way of doing off screen rendering.
This code runs when i only disable Metal API validation. otherwise i got following issue
Fragment Function(fragment_shader_texture): Shader reads texture (texture[0]) whose usage (0x04) doesn't specify MTLTextureUsageShaderRead (0x01)
Suggestions please to optimize
屏幕纹理对.renderTarget的用法,您应该使用[.renderTarget,.shaderRead]。
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.