网站开发模式名词,网站建站要多少钱,win7做网站服务器卡,网站关键词检测什么是MSL?
MSL是Metal Shading Language 的简称#xff0c;为了更好的在GPU执行程序#xff0c;苹果公司定义了一套类C的语言#xff08;Metal Shading Language #xff09;#xff0c;在GPU运行的程序都是用这个语言来编写的。
什么是MTLLibrary?
.metal后缀的文件…什么是MSL?
MSL是Metal Shading Language 的简称为了更好的在GPU执行程序苹果公司定义了一套类C的语言Metal Shading Language 在GPU运行的程序都是用这个语言来编写的。
什么是MTLLibrary?
.metal后缀的文件编译后会生成metallib文件MTLLibrary通过metallib文件来创建实例提供了swiftoc调用metal文件中的函数能力更多的可以看到做cpu与gpu通信的一个桥梁。
MTLLibrary加载的方式有哪些
MTLLibrary 加载的方式有很多种这里给大家分享经常使用的两种方式
1字符串方式加载
代码如下
func createLibrary(_ device:MTLDevice) - MTLLibrary?{let shader #include metal_stdlibusing namespace metal;struct VertexIn {float4 position [[ attribute(0) ]];float4 color [[ attribute(1) ]];};struct VertexOut {float4 position [[position]];float4 color; // 确保输出与片段着色器的输入匹配};vertex VertexOut vertex_main(const VertexIn in [[stage_in]]) {VertexOut out;out.position in.position;out.color in.color; // 将颜色从输入复制到输出return out;}fragment float4 fragment_main([[stage_in]] VertexOut in) {// 直接使用顶点着色器传递过来的颜色值return in.color;}// metal使用shaderdo {let library try device.makeLibrary(source: shader, options: nil)return library} catch let error {#if DEBUGfatalError()#endifreturn nil}}特点使用简单无需额外创建metal文件无需担心结构体方法名重复适合简单逻辑的处理缺点是MSL语法错误没有高亮提示不适合处理复杂逻辑是运行时编译
2metal文件方式加载
代码如下 func createLibrary(_ device:MTLDevice) - MTLLibrary?{//项目中已经有了metal文件了guard let libraryURL Bundle.main.url(forResource: default, withExtension: metallib) else {return nil}let library try! device.makeLibrary(URL: libraryURL)return library}特点适合复杂的业务场景MSL能够高亮显示语法错误每个业务模块都可以单独创建一个单独的metal文件通过命令单独编译为独立的metallib文件避免创建library对象时导入过多不需要的内容编译好的metallib和在ipa包的目录下每次创建library时不用再运行时编译了。
注意默认情况下不论有多少个metal文件打包时都会编译为默认的default.metallib文件此时需要注意不同文件中结构体函数名不要重复如果通过命令行编译不同的metallib文件则不需要考虑这种问题使用命令行编译metal文件参考这篇博客《使用 Metal 命令行来构建库》网址https://blog.csdn.net/SkyNullCode/article/details/122190736