如何创建金属cpp项目

How to create a metal-cpp project?

本文关键字:金属 cpp 项目 创建 何创建      更新时间:2024-09-22

我正在尝试学习金属,由于我已经熟悉C++,我正在尝试使用金属cpp。我不是一个经验丰富的macOS开发人员,但我过去曾在Xcode中使用OpenGL和C++作为主要语言的项目中工作过。

我的问题是如何在C++中设置项目并使用Metal渲染到窗口或视图。我在Swift或Objective-C中找到了一些关于如何做到这一点的教程,但在C++中没有。几年前,我记得我用OpenGL做过类似的事情,如果我没有记错的话,视图必须在Objective-C中设置,然后将OpenGL上下文传递给C++。

对于这种情况,这是一个好方法吗(在Swift/Oj-C中设置视图,然后将设备传递给C++(?我也有点不知道我需要什么类型的项目或其他文件来做这件事(即故事板等(。到目前为止,我只有一个命令行工具项目,链接了Foundation、Mmetal、MetalKit和QuartzCore框架;加上metal-cpp链接和编译。

我在Mac上做过各种C++项目,我个人会坚持使用cmake而不是XCode,尤其是我可能会从cmake中生成XCode项目(但通常我使用Ninja Multi-Config生成器(。下面的例子是一个最小的cmake项目,它设置解压到主目录(包含CMakeLists.txt文件(的metal cpp。

cmake_minimum_required (VERSION 3.20)
project (metal_cpp_rocks)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror")
find_library(APPLE_FWK_FOUNDATION Foundation REQUIRED)
find_library(APPLE_FWK_QUARTZ_CORE QuartzCore REQUIRED)
find_library(APPLE_FWK_METAL Metal REQUIRED)
add_executable(metal_cpp_rocks
main.cpp
)
target_include_directories(metal_cpp_rocks
SYSTEM PUBLIC ${CMAKE_SOURCE_DIR}/metal-cpp
)
target_link_libraries(metal_cpp_rocks
${APPLE_FWK_FOUNDATION}
${APPLE_FWK_QUARTZ_CORE}
${APPLE_FWK_METAL}
)

和最小main.cpp

#define NS_PRIVATE_IMPLEMENTATION
#define CA_PRIVATE_IMPLEMENTATION
#define MTL_PRIVATE_IMPLEMENTATION
#include <Foundation/Foundation.hpp>
#include <Metal/Metal.hpp>
#include <QuartzCore/QuartzCore.hpp>
int main()
{
MTL::Device* device = MTL::CreateSystemDefaultDevice();
device->release();
return 0;
}

构建和运行(在主目录中(:

cmake -S . -B build -G "Ninja Multi-Config"
cmake --build build --config Release
./build/Release/metal_cpp_rocks

如何从cmake生成XCode项目以便在开发过程中使用XCode作为IDE的示例:

cmake -S . -B build_xcode -G "Xcode"

现在从XCode打开生成的build_xcode/metal_cpp_rocks.xcodeproj,并以通常的方式执行所有操作,但请记住不要在XCode中更改项目本身-修改cmake项目并重新生成XCode项目。