首页 > 编程语言 >Metal 开发 | 使用 C++ 进行接口调用~~

Metal 开发 | 使用 C++ 进行接口调用~~

时间:2022-12-09 20:32:22浏览次数:64  
标签:头文件 IMPLEMENTATION Metal metal 接口 C++ cpp

文章首发博客:https://glumes.com


前两天在群里面看到大佬转发一篇文章:Getting started with Metal-cpp

链接在此:

​https://developer.apple.com/metal/cpp/​

文章大意就是:一顿操作安排上,苹果现在支持用 C++ 开发 Metal 了

众所周知,在做渲染后端开发时,OpenGL 和 Vulkan 都是支持 C++ 开发的,可以直接定义 C++ 相关接口并根据平台特性去实现。

而 Metal 则需要支持 Objective-C 才行了,编写的文件也是 .m 文件格式,但是现在就可以直接写 C++ 的渲染实现了。

前置准备

根据官方文章中的内容,首先要确保 Xcode 版本在 9.3 以上,并且要使用 C++17 的语法。

同时要下载好 Metal 对应的 C++ 头文件(metal-cpp),链接地址如下:

​https://developer.apple.com/metal/cpp/files/metal-cpp_macOS12_iOS15.zip​

创建工程

创建一个 macOS 上的工程,可以是 App 工程也可以是命令行工程,主要是验证一下环境配置是否正确。

接下来要把下载好的 Metal 头文件(metal-cpp)放在工程搜索路径中的,如下图所示:

Metal 开发 | 使用 C++ 进行接口调用~~_头文件

然后把 C++ 版本改成 std=c++17 。

Metal 开发 | 使用 C++ 进行接口调用~~_Metal_02

接下来要把 framework 依赖包含进来:

Metal 开发 | 使用 C++ 进行接口调用~~_头文件_03

主要是:

  • Foundation.framework
  • QuartzCore.framework
  • Metal.framework

把以上的环境依赖都搞定之后,就可以进行代码开发了。

代码开发

首先需要把 Metal 相关头文件包含进来,由于它只是一个头文件的库,要生成对应的实现,还要把一些宏配置加上。

核心就是如下一段代码,

#define NS_PRIVATE_IMPLEMENTATION
#define CA_PRIVATE_IMPLEMENTATION
#define MTL_PRIVATE_IMPLEMENTATION
#include <Foundation/Foundation.hpp>
#include <Metal/Metal.hpp>
#include <QuartzCore/QuartzCore.hpp>

在其他需要用到 Metal 相关对象的地方,就只用包含三个头文件就好了。

三个头文件都是配套一起出现的,当然也可以只包含一个头文件就行。

在下载 metal-cpp 的 SingleHeader 文件夹下,有一个 MakeSingleHeader.py 脚本, 运行它来生成:

./SingleHeader/MakeSingleHeader.py Foundation/Foundation.hpp QuartzCore/QuartzCore.hpp Metal/Metal.hpp

这样一来,在 SingleHeader 文件夹下会生成 Metal.hpp 文件,它包含了所有会用到的对象,只包含它一个就好了。

#define NS_PRIVATE_IMPLEMENTATION
#define CA_PRIVATE_IMPLEMENTATION
#define MTL_PRIVATE_IMPLEMENTATION
#include <Metal/Metal.hpp>

成功引入了 Metal 头文件就可以进行开发了,官方也给出了一个 Demo 工程,可以运行下这个工程:

​https://developer.apple.com/documentation/metal/rendering_a_scene_with_deferred_lighting_in_c​

另外,用 Metal 做渲染引擎的开发,比用 OpenGL 写要快多了,因为它本身就提供了很多封装工具类,比 OpenGL 从零开始写要省不少事,而且说不定性能还强不少。

Metal 开发 | 使用 C++ 进行接口调用~~_头文件_04



标签:头文件,IMPLEMENTATION,Metal,metal,接口,C++,cpp
From: https://blog.51cto.com/u_12127193/5926466

相关文章

  • C++基础
    1.任何合法的C程序都是C++程序。2.c++是一门面向对象的语言。3.标准的C++由三个重要部分组成:核心语言,提供了所有构件块,包括变量、数据类型和常量,等等。C++标准库,提......
  • C++ shared_ptr的实现
    比较完整的复现了STL中的shared_ptr中的功能,可以加载删除器,并且加入了互斥,可以在多线程中使用。#include<iostream>#include<mutex>usingnamespacestd;template......
  • C++新增数据类型long long ,unsigned long long
    相比于C++98标准,C++11整型的最大改变就是多了longlong。但事实上,longlong整型本来就离C++标准很近,早在1995年,longlong就被提议写入C++98标准,却被C+......
  • 第二章:10道C/C++经典面试题
    面试题11:设置地址为0x67a9的整型变量的值为0xaa66int*ptr;ptr=(int*)0x67a9;*ptr=0xaa66;说明:这道题就是强制类型转换的典型例子,无论在什么平台地址长度和整型数据......
  • C++猜数字游戏的程序,用srand()函数产生随机数
    /*编写一个猜数字游戏的程序:程序随机选择一个1到1000的数,然后输出:  Ihaveanumberbetween1and1000.    Canyouguessmynumber?  Pleasetype......
  • C语言中的结构体与C++中的类异同
    从C语言到C++,是编程思想的进步,技术发展的结果吧,所以C++基本上是兼容C的语法的,C++的很多东西也是从C中继承过来的,然后再发扬,C语言的结构体便是C++中类的雏形。       ......
  • MFC,VC++中,CView类意外消失
    (1)在我们写MFC程序的时候,可能CView类可能会意外的消失,现在我用的是Win7操作系统,VC6.0和WindowsXP是完全兼容的,可能是系统兼容的问题,所以在Win7系统下编写程序总会出现一些莫......
  • MFC,VC++计算器小程序
    大学期末没课,某个中午闲来无聊,正好在自学MFC,于是想用MFC、C++写点东西,由于能力有限,当然的写个简单点的啦,于是花了两个小时写了这个计算器的小程序,希望对初学VC++和MFC的朋友有所帮助。程......
  • UML类图、类、接口、聚合、组合的区别
    在UML类图中:类、接口、聚合、组合的UML表示1)类用空心三角实线连接2)接口用空心三角虚线连接3)聚合关系用空心菱形实线连接4)组合用实心菱形实线连接类:表示子类与父类的继承......
  • 在proteus软件80C51芯片隐藏电源接口VCC
    下面是proteus软件中80C51单片机芯片图:很奇怪为什么没有VCC引脚,百度了一下,原来很奇怪为什么没有VCC引脚,百度了一下,原来PROTEUS里面已经默认接上电源了,所以把电源脚隐藏了,所......