探索iOS之Metal编程指南

这篇具有很好参考价值的文章主要介绍了探索iOS之Metal编程指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

iOS推出Metal渲染库为了取代OpenGL。Metal有自己的Shader语言,渲染效率比OpenGL高。在这里我们一起探索:Metal使用C++限制、预处理定义、动态链接配置、GPU编译配置、设备坐标系、视口坐标系、纹理坐标系、矢量类型、矩阵类型、采样器状态、矩阵相乘。

1、使用C++限制

C++14的一些特性无法在Metal使用,具体如下:

  • lambda表达式
  • dynamic_cast操作
  • 类型检测
  • new和delete操作
  • noexcept操作
  • goto跳转
  • register、thread_local关键字
  • virtual虚函数
  • 派生类
  • 异常处理

另外,不要在Metal代码使用C++标准库。函数指针在Metal2.3才支持。

2、预处理定义

预处理定义包括:Metal版本、在macOS或iOS平台编译。如下所示:

__METAL_VERSION__ // Set to the Metal language revision
__METAL_MACOS__   // Set if compiled with the macOS Metal language
__METAL_IOS__     // Set if compiled with the iOS Metal language
__METAL__         // Set if compiled with the unified Metal language

还有一些TARGET_OS的预定义:

TARGET_OS_MAC          // run on MacOS
TARGET_OS_OSX          // run on OSX
TARGET_OS_IPHONE       // run on devices or simulator
TARGET_OS_IOS          // run on iOS
TARGET_OS_TV           // run on Apple TV OS
TARGET_OS_MACCATALYST  // run on MacOS
TARGET_OS_SIMULATOR    // run on simulator

3、动态链接配置

Metal动态链接包括指定动态库/静态库、安装路径,如下所示:

  • -dynamiclib:指定为动态库
  • -install_name:动态库安装路径

4、GPU编译配置

在iOS16或macOS13以后,支持配置GPU编译,具体配置选项如下:

-arch       // 指定系统架构
-gpu-family // MTLGPUFamily架构
-N          // 描述Metal脚本格式,后缀.mtlp-json

5、设备坐标系

Normalized Device Coordinate归一化设备坐标系,简称NDC。由xyz三维空间构成,其中z坐标点在0.0和1.0之间。如下图所示:

探索iOS之Metal编程指南 

6、视口坐标系

光栅化阶段把设备坐标系转换为视口坐标系,测量单位为pixel像素,原点(0, 0)在左上角,往右下角增大。如下图所示:

探索iOS之Metal编程指南 

7、纹理坐标系

纹理坐标系与视口坐标系类似,只是纹理坐标已被归一化,范围从0.0到1.0,中心点为(0.5, 0.5),如下图所示:

探索iOS之Metal编程指南 

8、矢量类型

矢量类型包括:bool、char、short、int、long、half、float等,同时后面跟着数值(2、3、4)。值得注意的是,这里有内存对齐,为2的n次方。这里以float展开,其他类型只列举数值2,如下表所示:

type size alignment
float2 8 8
float3 16 16
float4 16 16
bool2 2 2
char2 2 2
short2 4 4
half2 4 4
int2 8 8
long2 16 16

9、矩阵类型

矩阵类型包括half和float,而mxn阵列包括2x2、2x3、2x4、3x2、3x3、3x4、4x2、4x3、4x4,如下图所示:

探索iOS之Metal编程指南 

10、采样器状态

Sampler采样器的状态枚举值,如下表所示:

变量 数值 描述
coord

normalized(默认)

pixel

指定纹理坐标为归一化或像素
address

repeat

mirrored_repeat

clamp_to_edge

clamp_to_zero

clamp_to_border

纹理坐标的地址模式
border_color

transparent_black(默认)

opaque_black

opaque_white

边界颜色
filter

nearest(默认)

linear

magnification和minification

过滤模式

mag_filter

nearest(默认)

linear

magnification过滤模式
mig_filter

nearest(默认)

linear

minification过滤模式
mip_filter

nearest(默认)

linear

mipmap过滤模式
compare_func

never(默认)

less / less_equal

greater / greater_equal

equal / not_equal

always

设置比较函数

11、矩阵相乘

矩阵相乘有左乘与右乘的区别,类型包括:scalar乘以matrix、matrix乘以scalar、vector乘以matrix、matrix乘以vector、matrix乘以matrix。

参考链接:Metal-Shading-Language-Specification文章来源地址https://www.toymoban.com/news/detail-482170.html

到了这里,关于探索iOS之Metal编程指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ChatGPT 推出 iOS 应用,最新最全的使用教程

    先说重点,再说体验: 1、目前只有 iOS App,理论上后面应该会有 Android 2、iOS App 目前只有美区,可以直接用美区 AppleID 搜索「OpenAI ChatGPT」,或者直接访问下面链接: ‎App Store 上的“ChatGPT” 3、最大的优势是可以用苹果订阅直接升级成 ChatGPT Plus,可以用 GPT4.0 模型了。 之前

    2024年02月08日
    浏览(94)
  • 微软推出iOS 版Copilot App 让你免费用GPT-4

    微软几天前在Android 平台推出独立的Copilot App 后,很快地又推出了适用于iOS 和iPad 本版的Copilot App,现在已经于苹果的App Store 上架,让iPhone 和iPad 使用者也能快速接触到这款人工智慧助手,通过输入查询来获得由OpenAI 的GPT-4生成的回应。 相较于使用较旧的GPT-3.5 免费版ChatGPT,

    2024年02月03日
    浏览(52)
  • 同步推送?苹果计划本月推出 iOS17和iPadOS17,你的手机支持吗?

    据报道,苹果公司计划在本月推出 iOS 17 和 iPadOS 17 正式版更新。与去年不同的是,这次更新将同时发布,而不是分别发布。根据彭博社的一位消息人士马克・古尔曼的说法,苹果公司认为 iOS 17 和 iPadOS 17 的第八个测试版已经非常接近最终版本,除非有意外情况发生,否则将

    2024年02月09日
    浏览(39)
  • Google IO 2023推出Android Studio官方AI工具Studio Bot

    在2023 Google I/O大会上,Google 宣布在 Android Studio 中推出了一款名为 Studio Bot 的新 AI 功能,它将为开发者提供更高效、智能的开发体验。Studio Bot 是一个基于机器学习的助手,可以帮助开发者处理重复性的任务,提高开发效率。 其中,Studio Bot 最为强大的功能之一是它能够自动

    2024年02月05日
    浏览(39)
  • iOS 17 正式版预计 9 月中下旬发布,部分新功能延后推出

    苹果公司预计将在 9 月中下旬推出 iOS 17 正式版,iPhone XS 及更新的机型可免费更新。这次更新包含了许多新功能,但 是 根据苹果公司的网站显示,并不是所有的功能都会立即可用。苹果表示 有一些功能 “将在今年晚些时候推出” , 比如:日记应用、 Apple Music 协作播放列表

    2024年02月12日
    浏览(46)
  • 【iOS】—— 离屏渲染

    UIView继承自UIResponder ,可以处理系统传递过来的事件,如:UIApplication、UIViewController、UIView,以及所有从UIView派生出来的UIKit类。每个UIView内部都有一个CALayer提供内容的绘制和显示,并且作为内部RootLayer的代理视图。 CALayer继承自NSObject类 ,负责显示UIView提供的内容contents。

    2024年02月14日
    浏览(36)
  • iOS播放/渲染/解析MIDI

    MIDI:乐器数字接口, Musical Instrument Digital Interface。 MIDI 是计算机能理解的乐谱,计算机和电子乐器都可以处理的乐器格式。 MIDI 不是音频信号,不包含 pcm buffer。 通过音序器 sequencer,结合音频数据 / 乐器 ,播放 MIDI Event 数据 ( 通过音色库 SoundFont,播放乐器的声音。iOS上一

    2023年04月24日
    浏览(32)
  • iOS知识点 ---- 离屏渲染

    iOS 中的离屏渲染(Off-Screen Rendering)是指在绘制某些复杂图形或特殊效果时,系统无法直接在当前屏幕缓冲区进行绘制,而是需要先在额外的离屏缓冲区(Off-Screen Buffer)中完成渲染工作,然后再将结果混合到屏幕缓冲区的过程。离屏渲染往往发生在需要进行特定图形操作(

    2024年04月16日
    浏览(50)
  • Android与IOS渲染流程对比

    目录 Android CPU计算图元信息 GPU干预 几何阶段等后处理 Android APP通过WindowManager统一提供所有Surface的缓冲区【不管是SurfaceView还是普通的布局流程都会将数据提交到Surface的BufferQuene中】 Java中的Surface是null,最终都是由Native层的Surface处理。 Native中的Surface持有的一个接口用于和

    2024年02月05日
    浏览(51)
  • iOS渲染卡死应该如何解决

    1)iOS渲染卡死应该如何解决 2)C#传给C++的Byte数组如何释放 3)EAssetBundle.Unload(true)触发长时间卡顿的原因 这是第358篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。 Q:想问问大家是否有遇到过iOS渲

    2024年02月05日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包