美文网首页
Metal 编程指南和开发一个游戏

Metal 编程指南和开发一个游戏

作者: 无字教科书 | 来源:发表于2022-07-13 11:04 被阅读0次

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 大致是一个逃亡类游戏,后续会上传源码

相关文章

网友评论

      本文标题:Metal 编程指南和开发一个游戏

      本文链接:https://www.haomeiwen.com/subject/skgzbrtx.html