当前位置: 首页 > news >正文

2311d游戏引擎适配ios

原文
通过遵循arsd:simpledisplay(v11.0.0之前)上的一些旧代码,Apple的文档和Jacob的这一惊人贡献桥,
我已从金属绑定中删除了所有extern(Objective-C)代码,现在,所有Objective-C桥接代码都是使用D的反射生成的.
因此,给定此例代码:

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

现在有:

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约定,因此要取名字空间和指针.这样,甚至可制作出不会出现段错误的如下有效代码:

import mtkview;
(cast(MTKView)(new int)).currentRenderPassDescriptor;

虽然extern(C++)基本上是通过不生成TypeInfo节省一些内存,且可在因段错误需要转换时,避免D动态转换.
尽管接口代码不像以前那样干净,但对用户来说,唯一改变的是,因为所有类都是最终的,因此不会按其父类隐式转换,而需要显式转换.

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

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

http://www.lryc.cn/news/223143.html

相关文章:

  • 网络唤醒(Wake-on-LAN, WOL)
  • 接口测试框架实战(一) | Requests 与接口请求构造
  • 【C++】详解 void*
  • Linux家目录变成了-bash-4.2$
  • Python和SQLite游标处理多行数据
  • 安全测试之PHP 漏洞全解
  • 【bug-maven】(一)java: 错误: 不支持发行版本 5 (二):java: 错误: 无效的源发行版:15
  • git命令大全(附使用步骤+注释)
  • 【论文阅读】Progressive Spatio-Temporal Prototype Matching for Text-Video Retrieval
  • python --- 类与对象(二)
  • 任正非说:华为以前还出现过可笑的工号文化,看官大官小的指令
  • 用Python舞动数据的魔力:探索数据分析的艺术之路
  • iOS 让界面元素的文字随着语言的更改而变化——本地化文字跟随
  • Xcode15更新内容
  • 【数据集标注制作】视频剪切标注1——类DarkLabel软件
  • 一体化HIS医疗信息管理系统源码:云HIS、云电子病历、云LIS
  • NSSCTF逆向题解
  • 广域网加速的作用:企业为什么需要广域网加速?
  • SQL SERVER Inregration Services-OLE DB、Oracle和ODBC操作
  • 尚硅谷大数据项目《在线教育之实时数仓》笔记006
  • Linux-源码安装go
  • 如何检测小红书账号是否被限流?哪些原因会导致账号被限流?
  • [动态规划] (十三) 简单多状态 LeetCode 740.删除并获得点数
  • 【K-means聚类算法】实现鸢尾花聚类
  • 什么是代理IP池?如何判断IP池优劣?
  • 【面经】讲一下线程池的参数和运行原理
  • 针对图像分类的数据增强方法,离线增强,适合分类,无标签增强
  • 润色论文Prompt
  • 配置简单VLAN
  • 手机是否能登陆国际腾讯云服务器?