Metal学习(2)

Metal学习(2),第1张

概述MTKView 是NSView/UIView的子类,它有一个嵌入式的Metal层,负责管理framebuffer,渲染目标和draw循环。 •device - 是GPU的抽象,处理command queue的命令,进行渲染等 •command queue - 是一系列的command buffer,它存储着命令的执行顺序,把这个想象成是一个列表装载着你告诉GPU一次要执行的命令。 •command

MTKVIEw 是NSVIEw/UIVIEw的子类,它有一个嵌入式的Metal层,负责管理framebuffer,渲染目标和draw循环。

device - 是GPU的抽象,处理command queue的命令,进行渲染等

command queue - 是一系列的command buffer,它存储着命令的执行顺序,把这个想象成是一个列表装载着你告诉GPU一次要执行的命令。

command buffer - 存储着command encoder转换后的命令。你可以把它想象为一系列这一帧想要执行的渲染命令。在你提交command buffer之前,没有事情会真正发生,这样给你对事物在何时发生有一个很好的控制。

command encoder - 把API命令转换成GPU命令,有3种类型的encoder:render(图形渲染),compute(数据并行处理),blit(资源复制 *** 作)。

Render Command Encoder (RCE)是渲染命令,当你完成后,你只要调用 endEnCoding()。MTLRenderPassDescriptor,它能配置什么纹理会被渲染到、什么是clear color,以及其他的配置。


1.创建cocoa应用,只选择swift和use storyboards。

2. 创建一个类型为NSVIEw的MetalVIEw.swift,在storyboard的vIEw controller里选择VIEw,如下图所示,在IDentity Inspector里设置它的类为MetalVIEw

import MetalKitclass MetalVIEw: MTKVIEw {    required init(coder: NSCoder) {        super.init(coder: coder)        device = MTLCreateSystemDefaultDevice()    }    //必须overrIDe draw函数    overrIDe func draw(_ dirtyRect: NSRect) {        if let drawable = currentDrawable,let rpd = currentRenderPassDescriptor {            rpd.colorAttachments[0].texture = currentDrawable!.texture            rpd.colorAttachments[0].clearcolor = MTLClearcolor(red: 0,green: 0.5,blue: 0.5,Alpha: 1)            rpd.colorAttachments[0].loadAction = .clear //在绘制之前,清空纹理            let commandBuffer = device!.makeCommandQueue().makeCommandBuffer()            let commandEncoder = commandBuffer.makeRenderCommandEncoder(descriptor: rpd)            commandEncoder.endEnCoding()             commandBuffer.present(drawable) //保证新纹理会在绘制完成后立即出现            commandBuffer.commit() //把事务提交,把任务交给GPU        }    }
总结

以上是内存溢出为你收集整理的Metal学习(2)全部内容,希望文章能够帮你解决Metal学习(2)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1067808.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存