Metal编程指南
Metal是一种面向对象的 API,可以使用Objective-C, Swift, C++编程语言调用。
本书详细介绍了整个Metal应用程序编程接口(API)和管线,并包含详细的例子,为各种高性能 3D 应用的开发提供指导和参考。
Metal 初步使用
由于版权原因,书籍不能直接放在文章中,有兴趣的同学可以参考 Metal 编程指南 PDF
Metal 属性介绍
如果你详细的阅读了 《Metal 编程指南 》 对于 Metal 开发应该有一定的了解,可以快速读懂游戏的开发流程。
Metal 常见错误处理
CompileMetalFile XXX, fatal error: 'XXX.h' file not found
// metal 中 引用其他文件需要其完整的相对路径
fileA.h 在 metal 文件的上层 则需要 #include "../fileA.h"
使用 newDefaultLibrary 获取不到 MTLLibrary
目前遇到这种问题是因为在 .a 库中使用Metal 如果shader 代码不多推荐使用 string来编写
如果代码多请使用 LLVM 来生成 .metallib 文件
xcrun -sdk iphoneos metal MyLibrary.metal -o MyLibrary.air
xcrun -sdk iphoneos metallib MyLibrary.air -o MyLibrary.metallib
string 方式
- (void)config {
NSError *error = NULL;
id<MTLLibrary> defaultLibrary =[_device newLibraryWithSource:[self metalStrings] options:nil error:&error];
// ...
}
- (NSString*)metalStrings {
NSString *str = @"#include <metal_stdlib> \n #include <simd/simd.h> \n using namespace metal; struct LogoData { float4 position [[position]]; }; struct Transform { float4 matrix; }; vertex LogoData loadLogoVertex(constant LogoData *vertices [[buffer(0)]], constant Transform *transform [[buffer(1)]], uint vid [[vertex_id]]) { LogoData out; out.position = vertices[vid].position * transform->matrix; return out; }\n fragment float4 loadLogoFragment(LogoData inData [[stage_in]]) { return float4(0,0.75,1,1); }";
return str;
}
Metal 开发游戏
正在编写 preview1.0 大致是一个逃亡类游戏,后续会上传源码
网友评论