![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MacOS
文章平均质量分 90
SkyNullCode
专注于iOS开发,有Windows、Mac开发经验。对图形图像与音视频编解码感兴趣。
audio_video_render 会持续更新一些干货资源,欢迎大家关注。有想了解的技术也可以给我留言,我会尽量帮你解决。
展开
-
基于 Metal 框架的 GPU 计算
GPU 的优势在于并发计算能力,在本示例中,你将学习如何使用 Apple 的新框架 Metal 来实现并发计算。你将学会如何将用C编写的简单函数转换为 Metal Shading Language (MSL),以便它可以在 GPU 上运行。如何在 GPU 上创建管道和可访问的数据对象,编写 MSL 函数驱动...原创 2021-11-10 20:42:25 · 859 阅读 · 0 评论 -
自定义 Metal 渲染视图
我们可以通过 MetalKit 提供的 MTKView 来快速编写基于 Metal 渲染的视图,MTKView 视图把 Metal 的操作都封装了起来,一定程度上方面了开发。但有时我们希望能够更加灵活的来控制 Metal 内容的呈现方式,这时就需要自己从头开始操作 Metal 来实现渲染流程。本例将自定...原创 2021-11-11 21:28:05 · 396 阅读 · 0 评论 -
使用 Metal 命令行来构建库
在使用 Metal 开发过程中,为了实现功能,我们可能会自定义多个 .metal 文件。我们也可能输出 sdk 给使用方调用。此时就会遇到如下的问题:太多的 .metal 文件,导致 sdk 文件增多,不好管理。暴露的 .metal 透露了一些算法逻辑之类的,而这些有可能我们不希望给使用者看到。...原创 2021-11-12 20:27:02 · 652 阅读 · 0 评论 -
Metal 执行 GPU 命令的流程
阅读完本文,你将了解 Metal 是如何在 GPU 上执行命令的。让 GPU 来执行任务是通过发送命令来实现的。该命令可以执行绘图、并行计算或资源管理相关的操作工作。Metal 应用程序和 GPU 之间的关系是客户端-服务器模式:Metal 应用程序是客户端GPU 是服务器可以通过向 GPU...原创 2021-11-13 23:03:59 · 410 阅读 · 0 评论 -
创建通用 macOS 二进制文件
原生应用比解析执行的应用程序运行更高效,因为编译器针对目标架构优化了代码。仅支持 x86_64 架构的应用程序必须通过 Rosetta 转换才能在App芯片上运行 。通用二进制文件在 Apple 芯片和 Intel 芯片的 Mac 上运行,因为它包含两种架构的可执行代码。可以将所有编译的代码转换为通用二进...原创 2021-11-14 23:09:52 · 1557 阅读 · 0 评论 -
Metal 框架之 MTKView
MTKView 封装了 Metal 的基本功能,隐藏了配置 Metal 的一些操作,省去了开发者配置的麻烦,开发者只需要将精力花费在图形渲染即数据准备上就可以。在 iOS, iPadOS, Mac Catalyst, tvOS中,代码定义如下:```class MTKView : UIView...原创 2021-11-15 18:27:42 · 983 阅读 · 0 评论 -
Metal 框架之创建纹理及纹理采样
Metal 中使用纹理来绘制和处理图像,它是由像素组成的。使用2维数组的纹理来保存图像,每个元素都包含颜色数据。通过纹理映射技术将纹理绘制到几何图元上。 在片段着色器中,使用片段函数对纹理采样来为每个片段生成颜色。Metal 中,使用 MTLTexture 对象来表示纹理。 MTLTexture 对象定...原创 2021-11-16 20:14:28 · 755 阅读 · 0 评论 -
Metal 框架之使用 MetalKit 来绘制视图内容
在 《 Metal 框架之 MTKView 》 文章中介绍了如何使用 MTKView 来创建、配置和展示 Metal 对象,本文可作为上篇文章的补充篇,将介绍有关 Metal 渲染图形内容的基础知识。本示例中,会创建一个 MetalKit 视图和一个渲染通道,然后指定擦除背景色,通过提交渲染通道命令来更新...原创 2021-11-17 16:31:21 · 572 阅读 · 0 评论 -
Metal 框架之渲染管线渲染图元
在 《 Metal 框架之使用 Metal 来绘制视图内容 》中,介绍了如何设置 MTKView 对象并使用渲染通道更改视图的内容,实现了将背景色渲染为视图的内容。本示例将介绍如何配置渲染管道,作为渲染通道的一部分,在视图中绘制一个简单的 2D 彩色三角形。该示例为每个顶点提供位置和颜色,渲染管道使用该数据,...原创 2021-11-18 19:33:10 · 459 阅读 · 0 评论 -
Metal 框架之深度测试
在图形基本图元相互重叠情况下,Metal 按照画家算法来绘制图元,即按照图元提交的顺序来渲染它们。这种绘制方式一定可以得到正确的绘制结果,但是这种方法不足以渲染复杂的 3D 场景。 为了解决这个问题, 需要使用 Metal 提供的深度测试来确定每个片段在渲染时的可见性,消除隐藏的面。深度是从观察位置到特定...原创 2021-11-19 23:13:29 · 435 阅读 · 0 评论 -
Metal 框架之使用 Metal Debugger 查看 GPU 工作负载
为了了解计算机是如何运行 App 或调试问题,通常要使用调试器。传统的调试器通过暂停一个线程来工作,但对基于 Metal 的 App 效果不佳。 Xcode 通过帧捕获工作流专门为 Metal 提供一个调试器。要使用 Metal 调试器来调试 Metal App,需要捕获单个动画帧,并检查 App 生成该...原创 2021-11-20 23:23:25 · 890 阅读 · 0 评论 -
Metal 框架之同步 CPU 与 GPU 工作
通过本示例,你将了解如何管理数据依赖,并避免 CPU 和 GPU 之间的处理器等待。本示例渲染连续的三角形,这些三角形沿着正弦波顺序排列。每一帧都会更新三角形顶点的位置,然后渲染新图像。这些动态更新的数据会产生一种运动错觉,三角形似乎沿着正弦波移动。该示例将三角形顶点存储在 CPU 和 GPU 共...原创 2021-11-21 14:08:23 · 918 阅读 · 0 评论 -
Metal 框架之从可绘制纹理中读取像素数据
Metal 优化了纹理以供 GPU 快速访问,但不允许直接从 CPU 访问纹理的内容。当 App 需要更改或读取纹理的内容时,需要 Metal 在纹理和可访问的 CPU 内存(系统内存或使用共享存储分配的 Metal 缓冲区)之间复制数据。本文示例配置了可绘制的纹理,该纹理具备可读取权限,并将渲染像素数据从这...原创 2021-11-22 16:30:54 · 505 阅读 · 0 评论 -
Metal 框架之设置加载和存储操作
通过设置 MTLLoadAction 和 MTLStoreAction 属性,可以定义渲染通道加载和存储 MTLRenderPassAttachmentDescriptor 对象 的方式。为渲染目标设置适当的操作,在渲染通道的开始(加载)或结束(存储)时,可以避免昂贵且不必要的工作。在 texture 属...原创 2021-11-23 19:50:49 · 428 阅读 · 0 评论 -
Metal 框架之资源存储模式
Metal 中使用 MTLStorageMode 来指定资源的内存位置和访问权限。MTLStorageMode 是个枚举类型,定义如下:public enum MTLStorageMode : UInt { case shared = 0 case managed = 1 //只在...原创 2021-11-24 20:29:01 · 720 阅读 · 0 评论 -
Metal 框架之同步托管资源
托管存储(MTLStorageMode.managed)模式只在 macOS 下有效,非 macOS 下无此存储模式,请移步阅读《 Metal 框架之资源存储模式 》。该模式下的资源,CPU 和 GPU 都可以访问。 Metal 为每个处理器优化托管资源,但给定的资源内容有更改时,需要同步这些资源。同步托...原创 2021-11-25 20:42:15 · 249 阅读 · 0 评论 -
Metal 框架之自定义设置渲染通道
渲染通道是一系列渲染命令,用于绘制一组纹理。本示例执行一对渲染通道来渲染视图的内容。对于第一个通道,示例创建了一个自定义渲染,将图像渲染成纹理。这个通道是一个离屏渲染通道,因为样本渲染为普通纹理,而不是由显示子系统创建的纹理。第二个渲染通道使用 MTKView 对象提供的渲染通道描述符,来渲染和显示最终图像。...原创 2021-11-26 20:33:51 · 436 阅读 · 0 评论 -
Metal 框架之渲染到多个纹理切片
使用图层选择为顶点着色器中的每个图元选择目标切片,可以将图元渲染到纹理数组、立方体纹理或 3D 纹理的多个层(切片)中。层是单个 1D、2D 或 3D 像素块,由目标纹理中的切片和 mipmap 级别指定。加载和存储操作适用于渲染通道附件的每个切片。当你需要将内容渲染到来自同一源数据的多个相关纹理时,例如...原创 2021-11-29 20:02:44 · 580 阅读 · 0 评论 -
Metal 框架之渲染到多个视口
视口定义了渲染目标的一部分,绘图命令会渲染到该区域内。使用视口选择,可以为绘图命令提供多个视口,并且可以为绘图命令渲染的每个图元动态选择其中的一个视口。通过视口选择,使用更少的绘图命令,可以更轻松地将渲染合并到多个视口中。例如,渲染立体图像或者渲染其他图像的内容到渲染目标的多个部分试时,可以使用视口选择。...原创 2021-11-30 19:46:08 · 373 阅读 · 1 评论