如何创建一个metal-cpp项目?

4

我正在尝试学习Metal技术,由于我已经熟悉C++,所以我正试图使用metal-cpp进行学习。虽然我不是一位有经验的macOS开发者,但在过去的项目中我曾经使用OpenGL和C++作为主要语言在Xcode中工作。

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

对于这种情况,这样做是否是一个好的方法(在Swift/Obj-C中设置视图,然后将设备传递给C++)?我也有点迷失在需要哪种类型的项目或其他文件来完成这个任务(例如storyboards等)。目前,我只是一个带有Foundation、Mmetal、MetalKit和QuartzCore框架链接的命令行工具项目,同时也链接和编译了metal-cpp。

1个回答

8
我曾在Mac上完成了多个C++项目,个人建议使用cmake代替XCode。尤其是因为我可以从cmake项目中生成XCode项目(但通常我使用Ninja Multi-Config生成器)。下面的示例是一个最简化的cmake项目,它将metal-cpp设置为主目录中的文件(包含CMakeLists.txt文件)。
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

以下是一个生成XCode项目的示例,从cmake中生成,以便在开发过程中使用XCode作为IDE:

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

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

太好了,谢谢!你知道如何设置窗口或视图并使用设备进行渲染吗? - dandov
当我尝试运行时,遇到了“致命错误:找不到'Foundation/Foundation.hpp'文件”。 - Chris Seymour
@ChrisSeymour 你需要从苹果的开发者网站下载metal-cpp。https://developer.apple.com/metal/cpp/ - grafo
@grafo 下载后,如何进行链接和编译?我已经下载并解压缩了它,但是我应该把它放在哪里,以便系统能够找到它? - Nick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接