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.mzph.cn/news/135170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JAVA学习笔记】65 - 文件类,IO流--节点流、处理流、对象流、转换流、打印流

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter19/src/com/yinhai 文件 一、文件,流 文件,对我们并不陌生,文件是保存数据的地方,比如大家经常使用的word文档,txt文件,excel文件..都是文件。它既可以保存一张图片…

力扣21.合并两个有序链表

目录 1.解题思路2.代码实现 1.解题思路 遍历链表,通过判断两个链表的值从而链接到新的结点后面,遍历完毕后就得到了想要的链表. 2.代码实现 struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {struct ListNode* pNULL; struct…

【MongoDB】索引 - 数组字段的多键索引

数组字段创建索引时,MongoDB会为数组中的每个元素创建索引键(多键索引),多键索引支持数组字段的高效查询。 一、准备工作 这里准备一些数据 db.shop.insertMany([{_id: 1, name: "水果店1", fruits: ["apple&qu…

Golang 在 Mac、Linux、Windows 下如何交叉编译

Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序。 GOOS:目标平台的操作系统(darwin、freebsd、linux、windows) GOARCH:目标平台的体系架构(386、amd64、arm) 具体组合&#xf…

vue2中的mixins混入

目录 引言: 一、什么是混入? mixins 基础 选项合并 全局混入 自定义选项合并策略 二、mixins混入的优势 三、mixins混入的最佳实践 结论: 引言: 在Vue.js开发中,我们经常会遇到一些场景,多个组件…

Python测试框架之pytest快速入门

pytest是一种流行的Python测试框架,支持创建简单的单元测试,也支持创建复杂的功能和集成测试。它提供了一系列有用的功能,能够方便地编写,组织和运行测试用例,并生成丰富的测试报告。 pytest的主要特点包括&#xff1…

智能网联汽车有哪些信息安全场景

目录 1.车内安全通信 2.车云安全通信 3.安全启动 4.车载应用程序保护 5.入侵检测防御与日志管理系统 在聊完车载信息安全需求之后,势必要去看看​应用场景有哪些。根据之前的开发经验简单聊一下我知道的,还有很多没有讲,比如说车云之间具…

基于springboot+vue开发的教师工作量管理系

教师工作量管理系 springboot31 源码合集:www.yuque.com/mick-hanyi/javaweb 源码下载:博主私 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了教师工作量管理系统的开发全过程。通过…

基于Qt窗口文件新建_编辑_打开_保存_另存_剪切和复制和粘贴项目(文件操作直接套源码)

# .pro文件 QT += widgetsrequires(qtConfig(filedialog))​HEADERS = mainwindow.hSOURCES = main.cpp \ mainwindow.cppRESOURCES = sdi.qrc​# installtarget.path = $$[QT_INSTALL_EXAMPLES]/widgets/mainwindows/sdiINSTALLS += target​…

vim搜索、替换tab

bibtex 中的缩进可能不一致,强迫症犯了想将: 缩进空格改 tab;行首的多个 tab 改为单个 参考 [1],空格换 tab 可以: :set noexpandtab :%retab!行首的多个 tab 换单个: :%s/^\t\/\t/gReferences Replac…

元宇宙是否为噱头?若不是,什么是元宇宙?他的概念、技术、应用和影响是什么?

文章来源:元宇宙的概念、技术、应用与影响——一项系统性文献综述 - 中国知网 (cnki.net) 摘要 [目的/意义]系统综述与分析当前国内外的元宇宙研究现状,有利于准确把握元宇宙发展方向,强化元宇宙基础研究,争取元宇宙建构权。[方法…

SpringBoot案例学习(黑马程序员day10,day11)

1 环境准备&#xff1a; 1.idea 创建spring项目&#xff0c;选择springweb,mybatis framework ,sql drive框架 2.添加pom.xml依赖&#xff1a; <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependen…

ajax样式演示

以下是一段Ajax的演示代码&#xff0c;实现了通过Ajax获取后台数据并将其显示到前台页面上。 HTML文件: <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>Ajax演示</title></head><body><h1>学生…

SQL SERVER Inregration Services-OLE DB、Oracle和ODBC操作

OLE DB链接器 OLE DB插件下载&#xff1a;https://learn.microsoft.com/zh-cn/sql/connect/oledb/download-oledb-driver-for-sql-server?viewsql-server-ver16 配置OLE DB Connection Manager 在点击“新建”时&#xff0c;会弹出警告信息“不支持指定的提供程序&#xff0…

导出数据为zip压缩文件,解压后为json文件

前端只要将要导出的数据的ids传回后端就行了 比如 handleExportApp(row) {const ids row ? [row.id] : this.checkedRows.map(v > v.id); //exportApp为后端导出接口exportApp(ids.join(","));},后端接口 public void exportApp(String ids, HttpServletRespon…

【mysql】CommunicationsException: Communications link failure

CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. 通信异常&#xff1a;通信链路故障 最后一个成功发送到服务器的数据包是0毫秒前…

数据结构-双向链表

目录 1.带头双向循环链表&#xff1a; 2. 带头双向循环链表的实现&#xff1a; 双向链表初始化&#xff1a; 双向链表打印&#xff1a; 开辟节点函数&#xff1a; 双向链表头插&#xff1a; 双向链表尾插&#xff1a; 双向链表头删&#xff1a; 双向链表尾删&#xff…

HMM与LTP词性标注之马尔科夫模型(HMM原理剖析)

文章目录 问题描述viterbi算法联合概率与条件概率维特比算法实例 问题描述 viterbi算法 联合概率与条件概率 维特比算法实例

hdlbits系列verilog解答(always块条件语句)-37

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 Verilog 有一个三元条件运算符 ( ? : ) 很像 C语言: (condition ? if_true : if_false) 这可用于根据一行上的条件(多路复用器!)选择两个值之一,而无需在组合 always 块中使用 if-then。 举例: (0…

界面控件DevExpress WPF PDF Viewer,更快实现应用的PDF文档浏览

DevExpress WPF PDF Viewer控件可以轻松地直接在Windows应用程序中显示PDF文档&#xff0c;而无需在最终用户的机器上安装外部PDF查看器。 P.S&#xff1a;DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress…