您的位置:威尼斯官方网站 > 威尼斯正规官网 > Metal专辑也可以关注我个人的简书账号

Metal专辑也可以关注我个人的简书账号

发布时间:2019-09-12 06:09编辑:威尼斯正规官网浏览(72)

    对Metal本领感兴趣的同桌,能够关心自身的专项论题:Metal专辑也得以关怀笔者个人的简书账号:张芳涛全部的代码存款和储蓄的Github地址是:Metal

    MetalKit框架在WWDC 2015上宣布,它为Metal拉动了多量改正和新功效。 结识MTKViewNSView / UIView的子类。 它含有嵌入式Metal层,它还管理帧缓冲区及其渲染目的附件,并担负绘制循环。

    小编们来创建二个新的Cocoa应用程序(因为iOS模拟器不补助Metal)。 确定保障只接纳了SwiftUse Storyboards字段。 接下来,让我们创造二个名叫MetalView.swiftNSView类别的新类。 创制后,转到Storyboard并选拔视图调整器下的View,将其类设置为Identity Inspector下的MetalView品种,如下图所示:

    威尼斯官方网站 1

    因为我们不准备利用View Controller,所以在View Controller威尼斯官方网站,下和Identity Inspector下施行同一的操作。 还要删除ViewController.swift,因为大家不再供给它了。 今后再次回到MetalView.swift并键入import MetalKit。 我们能够通过二种办法来盘算大家的绘图类:遵从MTKViewDelegate情商并贯彻其drawInView措施或子类MTKView并遮盖其drawRect办法。 我们选用前面一个,所以三番五次并将类项目从NSView更改为MTKView,并创办三个名称为render()的新措施,个中包含以下内容:

    func render() {let device = MTLCreateSystemDefaultDevice()!self.device = devicelet rpd = MTLRenderPassDescriptor()let bleen = MTLClearColor(red: 0, green: 0.5, blue: 0.5, alpha: 1)rpd.colorAttachments[0].texture = currentDrawable!.texturerpd.colorAttachments[0].clearColor = bleenrpd.colorAttachments[0].loadAction = .Clearlet commandQueue = device.newCommandQueue()let commandBuffer = commandQueue.commandBuffer()let encoder = commandBuffer.renderCommandEncoderWithDescriptorencoder.endEncoding()commandBuffer.presentDrawable(currentDrawable!)commandBuffer.commit()}
    

    让我们逐行浏览代码。首先,我们创设一个device。大家将此device设置为大家视图的device,否则它将维持nil,并会使应用程序崩溃。恐怕,大家得以在绘制此前修改视图的drawable品质。接下来,大家创立一个渲染通道描述符,它同意大家使用当前可绘制纹理作为其主要性颜色来安插渲染通道。为了有意思,咱们创立了叁个完美的颜料bleen,它是半蓝和半绿。接下来,大家为该道具成立二个限令队列,并选取队列成立二个下令缓冲区。最终,我们运用命令缓冲区来创建渲染命令编码器来奉行绘制调用。对于绘制循环的每一遍迭代,当从currentRenderPassDescriptor查询时,新的MTLRenderPassDescriptor对象可用。该指标是依据currentDrawable指标成立的。演示文稿不是由MTKView管理的,所以大家有权利首先检查currentRenderPassDescriptorcurrentDrawable都不是nil,然后再调用视图当前drawable上的presentDrawable方法。

    让大家参考Metal文书档案获取越多细节。 Metal框架富含多少个目的:

    • device - 从命令队列中消耗渲染和计量命令的GPU的抽象。
    • command queue - 是命令缓冲区的串行体系,并规定期存款款和储蓄的吩咐将实施的一一。
    • command buffer - 存款和储蓄来自命令编码器的翻译命令。 当缓冲区完毕试行命令时,Metal会打招呼应用程序。
    • command encoder - 将API命令转变为GPU硬件命令 - 有3种编码器:rendercomputeblit。 今后大家只会看看render command encoder
    • states -
    • shaders -
    • resources - 我们就要本连串的下一聚焦研商最后3个对象。 大家明日所关切的是devicequeuebufferencoderRender Command Encoder为单个渲染进程生成硬件命令,这表示将兼具渲染发送到单个framebuffer。 假使须求渲染另二个帧缓冲区,则需求创建一个新的RCERCEgraphics pipelinevertexfragment内定状态(大家将要下一集聚研究),它还交错resourcesstate changesdraw calls。 使用RCE的三个宏大优势是从未有过绘制时间汇编的实际情形; 该应用程序决定曾几何时进行编写翻译和状态验证,进而为工程师提供了英豪的性质优势。

    今天让大家回去大家的代码。 在drawRect主意内调用render()方法:

    override func drawRect(dirtyRect: NSRect) {super.drawRect(dirtyRect)render()}
    

    若是您运维那些应用程序,你拜候到三个很好的,未有怎么极其的,像这么的bleen-ish屏幕:

    威尼斯官方网站 2

    • 代码地址:Ch02-OSX

    有关代码:

    mport MetalKitclass MetalView: MTKView {required init(coder:NSCoder){ super.init(coder:coder) device = MTLCreateSystemDefaultDevice()}override func draw(_ rect: CGRect) { if let drawable = currentDrawable, let rpd = currentRenderPassDescriptor{ rpd.colorAttachments[0].clearColor = MTLClearColor(red: 0, green: 0.5, blue: 0.5, alpha: 1.0) rpd.colorAttachments[0].loadAction = .clear let commandBuffer = device!.makeCommandQueue()?.makeCommandBuffer() let commandEncoder = commandBuffer?.makeRenderCommandEncoder(descriptor: rpd) commandEncoder?.endEncoding() commandBuffer?.present commandBuffer?.commit() } }}
    

    实行效果:

    威尼斯官方网站 3那些必得在真机上推行

    • 代码地址: Ch02-iOS

    相关兑当代码:

    import MetalKitclass MetalView: MTKView {required init(coder:NSCoder){ super.init(coder:coder) device = MTLCreateSystemDefaultDevice()}override func draw(_ rect: CGRect) { if let drawable = currentDrawable, let rpd = currentRenderPassDescriptor{ rpd.colorAttachments[0].clearColor = MTLClearColor(red: 0, green: 0.5, blue: 0.5, alpha: 1.0) rpd.colorAttachments[0].loadAction = .clear let commandBuffer = device!.makeCommandQueue()?.makeCommandBuffer() let commandEncoder = commandBuffer?.makeRenderCommandEncoder(descriptor: rpd) commandEncoder?.endEncoding() commandBuffer?.present commandBuffer?.commit() } }}
    

    落到实处际效果益:

    威尼斯官方网站 4这些也必得利用真机才得以测量试验

    代码地址: Ch02-TvOS

    在下一集中,大家将最后介绍shaders,斟酌加载纹理和保管model data。 源代码照常发布在 Metal上。

    本文由威尼斯官方网站发布于威尼斯正规官网,转载请注明出处:Metal专辑也可以关注我个人的简书账号

    关键词:

上一篇:Swift环境 和 Swift 语言改进

下一篇:没有了