2311d游戏引擎适配ios

原文

通过遵循arsd:simpledisplay(v11.0.0之前)上的一些旧代码,Apple的文档和Jacob的这一惊人贡献,

我已从金属绑定中删除了所有extern(Objective-C)代码,现在,所有Objective-C桥接代码都是使用D的反射生成的.

因此,给定此例代码:

cpp 复制代码
import core.attribute : selector;
extern(Objective-C):
class MTKView
{
    //创建要绘画到当前可绘画对象中的渲染传递描述符.
    @selector("currentRenderPassDescriptor")
    MTLRenderPassDescriptor currentRenderPassDescriptor();
}
class MTKView2 : MTKView
{
    //创建要绘画到当前可绘画对象中的渲染传递描述符.
    @selector("currentRenderPassDescriptor2")
    MTLRenderPassDescriptor currentRenderPassDescriptor2();
}

现在有:

cpp 复制代码
mtkview.d
module mtkview;
import objc.meta : selector;
@ObjectiveC final extern(C++):
class MTKView
{
    //创建要绘画到当前可绘画对象中的渲染传递描述符.
    @selector("currentRenderPassDescriptor")
    MTLRenderPassDescriptor currentRenderPassDescriptor();
}
class MTKView2
{
    mixin ObjcExtends!(MTKView);
    //创建要绘画到当前可绘画对象中的渲染传递描述符.
    @selector("currentRenderPassDescriptor2")
    MTLRenderPassDescriptor currentRenderPassDescriptor2();
}
//metal_gen.d
module metal_gen;
import mtkview;
mixin ObjcLinkModule!(mtkview);

这是如何从单独编译中获得实际优势的示例,分开编译反射接口代码可带来更好编译速度.

mixin ObjcLinkModule用来迭代每个@ObjectiveCUDA,为类和接口中定义的每个方法生成实现.(是的,可在其他文件中实现类方法).
final用来使D避免使用虚表,因为ObjectiveC对象不遵循D约定,因此要取名字空间和指针.这样,甚至可制作出不会出现段错误的如下有效代码:

cpp 复制代码
import mtkview;
(cast(MTKView)(new int)).currentRenderPassDescriptor;

虽然extern(C++)基本上是通过不生成TypeInfo节省一些内存,且可在因段错误需要转换时,避免D动态转换.

尽管接口代码不像以前那样干净,但对用户来说,唯一改变的是,因为所有类都是最终的,因此不会按其父类隐式转换,而需要显式转换.

我想,支持iOSM1是合理的.只是在整个引擎中,在更改绑定后,需要修复大约2行代码,因此,前端用户仍会有个好看代码.

D金属绑定

未来,提供对HipremeEngineiOS支持,并在MacOS构建选择器上,提供官方LDC支持,这样对普通用户,几乎可在所有平台使用该引擎😃

相关推荐
崽崽长肉肉2 小时前
swift中的知识总结(一)
ios·swift
技术小甜甜3 小时前
[Godot] 解决导出APK安装失败的常见问题:深入分析与调试方法
游戏引擎·godot·游戏开发
2501_915106324 小时前
HTTP 协议详解,HTTP 协议在真实运行环境中的表现差异
网络·网络协议·http·ios·小程序·uni-app·iphone
柯南二号6 小时前
【大前端】【iOS】iOS 真实项目可落地目录结构方案
前端·ios
2501_916007476 小时前
iOS与Android符号还原服务统一重构实践总结
android·ios·小程序·重构·uni-app·iphone·webview
技术小甜甜7 小时前
[Godot][入门] 安装与版本选择:3.x 还是 4.x?(按项目类型一键决策)
游戏引擎·godot·游戏开发·2d
陈言必行7 小时前
Unity 之 物理引擎中三种刚体力施加方式详解
unity·游戏引擎
foreveryao1238 小时前
Unity渲染流程(底层逻辑)
unity·游戏引擎·图形渲染
二流小码农8 小时前
鸿蒙开发:自定义一个圆形动画菜单
android·ios·harmonyos
small-pudding8 小时前
Unity中的PBR(基于物理的渲染)
unity·游戏引擎