如何创建金属cpp项目
How to create a metal-cpp project?
我正在尝试学习金属,由于我已经熟悉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项目。
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- Linux的Cpp上的计时器
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 命名空间中具有.h和.cpp文件的类
- 内置函数可查看CPP中的成员变量
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- Cpp-Tuple使用带有变量的get
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 如何通过cpp程序运行shell脚本
- 使用2个键的cpp-stl::优先级队列排序不正确
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 如何在cpp文件之间切换窗口?在Qt中
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 我需要知道编译器如何在cpp中使用析构函数
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 无法在UE4中包含BP类到CPP类
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 无法使用Qt Creator在Windows中构建yaml-cpp