我是靠谱客的博主 过时大山,最近开发中收集的这篇文章主要介绍iOS开发 Metal Framework基础使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

        iOS 8.0起,Apple为了更充分地发挥GPU的潜力,引入了Metal框架,Metal基于C++设计,开发者可以用它来编写在GPU上执行的图形渲染逻辑代码和通用并行计算逻辑代码,目前的Metal框架中可以使用三种着色器——Vertex Shader、Fragment Shader以及Compute Shader。

1、先创建MTLCreateSystemDefaultDevice和CAMetalLayer

2、确定顶点数据,中心点是原点(x, y, z)和顶点缓冲区MTLBuffer

let vertexData: [Float] = [

        0.5, 0.5, 0.0,

        -0.5, 0.5, 0.0,

        -0.5, -0.5, 0.0,

        0.5, -0.5, 0.0

    ]

2.1、您需要以字节为单位获取顶点数据的大小。您可以通过将第一个元素的大小乘以数组中元素的计数来实现这一点

let dataSize = vertexData.count * MemoryLayout.size(ofValue: vertexData[0])

2.2、在GPU上创建一个新的缓冲区,从CPU传入数据。为默认配置传递一个空数组

vertexBuffer = device.makeBuffer(bytes: vertexData, length: dataSize, options: [])

3、创建Metal文件

vertex float4 basic_vertex(

                           const device packed_float3* vertex_array [[ buffer(0) ]],

                           unsigned int vid [[ vertex_id ]]) {

    return float4(vertex_array[vid], 1.0);

}

fragment half4 basic_fragment() {

    return half4(1.0);              

}

3.1、按名称查找每个着色器

        let defaultLibrary = device.makeDefaultLibrary()!

        let fragmentProgram = defaultLibrary.makeFunction(name: "basic_fragment") //片段

        let vertexProgram = defaultLibrary.makeFunction(name: "basic_vertex")

4、创建渲染管道MTLRenderPipelineState

       let pipelineStateDescriptor = MTLRenderPipelineDescriptor()

        pipelineStateDescriptor.vertexFunction = vertexProgram

        pipelineStateDescriptor.fragmentFunction = fragmentProgram;

        pipelineStateDescriptor.colorAttachments[0].pixelFormat = .bgra8Unorm

         pipelineState = try! device.makeRenderPipelineState(descriptor: pipelineStateDescriptor)

5、创建MTLCommandQueue和CADisplayLink

         commandQueue = device.makeCommandQueue()

         timer = CADisplayLink.init(target: self, selector: #selector(gameloop))

        timer.add(to: RunLoop.main, forMode: .default)

在gameloop方法里面写相应的需求

 

最后

以上就是过时大山为你收集整理的iOS开发 Metal Framework基础使用的全部内容,希望文章能够帮你解决iOS开发 Metal Framework基础使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部