Ecere SDK:用于 GUI 和图形的跨平台工具包

了解 Ecere 软件开发工具包 20 年的历史,它现在为 GNOSIS GIS 地图软件提供支持。
752 位读者喜欢这个。
Pixelated globe

Geralt。CC0。

1997 年夏天,我是一位狂热的游戏玩家,沉迷于定义了实时战略 (RTS) 和沉浸式 3D/沙盒角色扮演游戏这些类型的黄金经典之作。在浪费了许多小时玩游戏后,我想做一些更有建设性的事情。我梦想着构建自己的视频游戏。

前一年,我为一个名为 3D 编码黑洞 的教程系列创建了一个基本的纹理映射、软件渲染 3D 引擎。我正在开发一款流行 RTS 游戏的克隆版——作为一种学习体验,也是构建一款具有潜在贡献者的新游戏的垫脚石。

我也是 Linux 爱好者,但 Linux 游戏几乎不存在。DOS 仍然是游戏的首选平台,它具有 32 位扩展,可让您访问更多内存,而 VESA 扩展则可为您提供 SuperVGA 图形。随着 DirectX 的推出,Windows 开始接管游戏领域。

我想出了一个疯狂的想法,开始一项终身追求,构建理想的 SDK,它可以让您编写一个可以在所有这些平台上运行的游戏,而无需为每个平台编写特定的代码。今天,跨平台开发的优势显而易见,并且有许多工具包可用,但 20 年前,它们很少而且受到限制。

我确信“一次编写,到处运行”将成为未来编写代码的方式,因此我卷起袖子,开始一次为三个不同的游戏平台编写代码。我采用了我的 3D 图形引擎(在 DOS 中运行)和两个版本的 RTS 游戏克隆代码库(一个在 DOS 下使用 SuperVGA 运行,另一个在 Windows 下通过 DirectX 运行),并将所有这些都组织在一个漂亮的抽象层之后,同时还添加了对 Linux 的支持。Ecere SDK 由此诞生。

Ecere games

opensource.com

2D 和 3D 图形

由于该工具包的目标是游戏开发,因此最初的重点是 2D 和 3D 图形。随着图形处理单元 (GPU) 开始出现,我们开始支持硬件加速图形,最初是通过 Glide API,最终通过 OpenGLDirect3D

Ecere SDK 的显示驱动程序系统允许用户选择使用哪个 API 来渲染图形,同时保持相同的应用程序代码。当前的 2D 图形引擎很简单,并且支持所有基本需求,例如选择分辨率、切换全屏模式、加载和保存图像、位图操作、生成线条和框以及国际文本输出。它还允许用户在应用程序运行时更改模式或驱动程序,从而更轻松地管理必须以不同方式重新加载的资源(例如图像和字体)。我们目前正在为未来的版本开发更高级的矢量图形功能。

Ecere rendering

opensource.com

3D 图形引擎可以导入和渲染来自 3DS 模型的大多数功能,并且还支持其动画格式。我们目前正在开发对协作设计活动 (COLLADA) 和 GL 传输格式 (glTF) 的支持。

该引擎提供了一个 API,用于组装自定义网格、创建分层对象、应用具有丰富属性的纹理和着色材质以及使用动画相机。OpenGL 后端支持传统的 OpenGL 以及基于现代着色器的 OpenGL,提供了一个 API 来轻松插入自定义着色器,并且应用程序也可以使用 OpenGL ES 部署在移动平台上,或使用 WebGL 部署在 Web 上。我们正在对 3D 引擎进行重大升级,这将带来性能改进和新功能。

图形用户界面

Ecere 的图形用户界面 (GUI) 系统旨在提供游戏内 GUI(例如,在暂停的游戏上为半透明菜单供电),已发展成为一种非常丰富且高效的方式来组合从简单到复杂的用户界面。它提供了一个常用控件库,包括:编辑框(多行风格的成熟文本编辑器);列表框(可以选择充当树视图或网格视图);下拉/组合框;通用数据框(根据指定的数据类型自动解析并弹出该类型关联的编辑器);弹出菜单和菜单栏;滚动条和滑块;图像框;状态栏;选项卡控件;工具栏;等等。更复杂的控件和对话框允许用户从日历控件、文件、文件夹或颜色中选择日期;查找或替换文本;或弹出消息。

GUI 系统还允许自定义现有组件的外观和感觉,或基于非常灵活的系统构建自定义控件,该系统利用组合和继承的面向对象概念,所有这些都以 Window 基类为中心。在窗口中渲染图形就像向 2D/3D 图形引擎发出绘图调用一样简单,使用窗口的 OnRedraw 回调接收的表面参数。我们现在正在开发一种自动布局和样式引擎,它更擅长处理不同的像素密度。

GUI system

opensource.com

集成开发环境

在开发编辑框的文本编辑功能时,我开始将其用作代码编辑器。由于其图形驱动程序,文本模式可以在终端或图形环境中使用。

代码编辑器已从基本的项目文件格式发展成为丰富的开发环境。它现在具有语法突出显示、自动完成和基于上下文的参数工具提示;表单设计器;对象属性和方法表;API 文档浏览器;与 GNU 项目调试器 (GDB) 连接的集成调试器;Valgrind 集成;甚至集成了 橡皮鸭调试 以解决最棘手的错误。IDE 的跨平台构建系统是其真正的优势,因为它可以生成 GNU makefile(无需“configure”配置),可以在 Unix 系统和带有或不带有 MSYS 的 Windows 系统上轻松构建。

Rubber duck debugging

opensource.com

项目可以使用平台/配置/文件的组合矩阵定义一组复杂的编译器选项。可以设置多个编译器(例如,不同版本的 GCCClang)以交叉构建到其他目标,例如从 Linux、Android 或 Tizen 构建 Windows 以用于移动或可穿戴平台,或从 Emscripten/Binaryen (WebAssembly) 构建 Web。项目资源还提供了一种将数据文件嵌入应用程序的可执行文件或库中的方法,可以通过简单的文件路径从 API 轻松访问。我们希望扩展和改进 IDE 中对其他编程语言的支持。

eC 编程语言

Ecere 运行时库最初完全用 C 语言编写。从编写更复杂和更有组织的 C 程序中看到了面向对象的价值,我尝试为该库组装面向对象的包装器,首先是 C++,然后是 Python。对 API 和实现不满意,在 2004 年,我跨越了一个巨大的鸿沟(可能比我意识到的还要宽),并开始设计一种新的编程语言。

理由是 C 是一种很棒的语言:可移植、原生且已编译,所有关键库都随时可用。我推断,它所缺少的只是

  • 一点面向对象(深受 C++ 的影响);
  • 属性(作为定义场景图 API 和支持 IDE 属性表的一种好方法,该属性表可以立即在表单设计器中产生视觉更新);
  • 反射(受 Python 启发,对于 IDE 动态查询库的属性和方法以及支持自定义对象设计器也至关重要);
  • 模块(因为头文件很痛苦,而 Python 启发了使它们可动态加载/弹出);以及
  • 既然如此,为什么不消除对前向声明的需求呢?

因此,eC 被定义为 C 语言的超集(严格来说不是,但大多数情况下是正确的)——准确地说是 C89 标准,尽管后来添加了对某些 C99 功能的支持。“e”代表 C 语言的小添加,也代表“Ecere”,或增强、优雅或高效,或您喜欢的任何好的限定词。

eC 语言的基石是其实例化对象的语法

MessageBox msgBox { contents = “Hello, world!!” };

它受到“struct”的 C 初始化器语法的启发,它可能看起来像这样(假设 contents 是第一个成员)

MessageBox msgBox = { “Hello, world!!” };

成员名称可以省略并根据其顺序解析,并且实例也可以是匿名的(在这种情况下,它是表达式而不是声明);例如

Vector3D { 2, 4, 5 }

它的数据类型也可以根据目标的预期类型推断出来;例如

{ contents = "Hello, world!!" }

如果需要 MessageBox。

ECON:eC 对象表示法

当我第一次接触 JSON 时,我注意到了两件事。首先,与 XML 相比,它似乎是一种更明智的文本数据序列化方法。其次,我认为它看起来与 eC 实例化语法非常相似,除了成员(键)被引用并且等号 (=) 替换为冒号 (:)。

我决定最好有一种与 eC 实例化语法完全匹配的对象表示法。为了兼容性,我使 eC 对象表示法 (ECON) 成为 JSON 的超集,因此有效的 JSON 是有效的 ECON。JSON 可写为 ECON 的唯一要求是成员是有效的 C/eC 标识符(以字母开头并且仅包含字母和数字)。完全支持 eC 实例化语法为 JSON 带来了一些额外的改进,例如十六进制数字支持、true/false 以外的非引用枚举值、多行字符串、隐含成员名称以及指定类型的能力。能够直接将对象从代码复制到序列化数据文件,反之亦然,也非常方便。与我们之前的 JSON 解析器/编写器一样,所有 eC 数据类型都可以自动从/向 ECON 或 JSON 文件(反)序列化。

我们也希望提供库来方便从其他编程语言编写和解析 ECON。

语言绑定:eC 作为网关

虽然 eC 是我们所有库的主要开发语言,但我们认识到要求其他人和其他组织使用它会抑制使用其构建的技术。

幸运的是,作为少数几种编译语言之一,eC 既可以编译又具有内置反射,因此适用于从丰富的 API 生成自动语言绑定。该实现可以提供本机性能,同时避免额外的层开销。无需额外的努力,任何用 eC 编写的库的 API 都可以转换为适用于我们的绑定生成器工具支持的任何目标语言的适当的面向对象 API,该工具力求在跨语言的统一 API 的优势与遵守语言的范例、精神和最佳实践之间取得平衡。目前,提供了 C 和 Python 语言的绑定,C++ 绑定正在开发中,随后将支持其他语言。

GNOSIS:基于 Ecere 的地理信息系统

在过去的三年中,我们将开发重点转向了 GNOSIS 地理空间可视化产品。Ecere SDK 是免费和开源软件,而 GNOSIS 利用 eC 编程语言和我们的开源库,是我们主要的商业产品。

GNOSIS 的目标是开发具有高性能可视化系统的地理信息学应用程序,该系统能够进行制图和 3D 投影。该系统大量使用多分辨率切片来处理栅格和矢量数据,以最大限度地减少数据加载并最大限度地提高渲染性能。它具有一个 SDK,用于将地图和叠加的地理空间定位对象集成到自定义应用程序中;一个地图服务器,实现标准的开放地理空间联盟 (OGC) Web 地图协议和高效的扩展,以最大限度地减少带宽使用;以及一个 GIS 工具,用于可视化、样式化和发布地图。GNOSIS 也是 Ecere SDK 持续开发和改进的主要驱动力。

GNOSIS rendering

opensource.com

GNOSIS rendering

opensource.com

Ecere 入门

Ecere SDK 是根据 3 条款 BSD 许可证 获得许可的免费和开源软件。最新版本可在 Ecere SDK 安装页面 上找到。在 Debian 和 Ubuntu 系统上,SDK 可从官方存储库获得,名称为 ecere-sdk,代码发布在我们的 GitHub 存储库中。

要快速了解该语言的功能,请参阅 eC 概述,或要详细了解该语言,请参阅(正在进行中)程序员指南 The Ecere Tao of Programming。您还可以查阅 语法(扩展巴科斯-诺尔范式或 EBNF),其中包括铁路图。还有一系列 课程作业(测验和实验练习)和 井字棋游戏教程,以帮助您了解更多信息。要快速了解典型的简短 eC 应用程序的外观,请查看此示例:https://gist.github.com/jerstlouis/02181fdff3b1b3f5cb8fdc7b8bb37551
 

寻求帮助的最佳地点是在 论坛 上或在我们的 Freenode (irc.freenode.net) IRC 频道 #ecere 上(最好保持在线并等待回复)。

我们欢迎新用户和潜在贡献者。如果您发现错误,请 提交。如果您想了解我们正在寻找哪种类型的贡献,请查看我们的 建议页面

标签
User profile image.
Jérôme Jacovella-St-Louis 于 1997 年创立了 Ecere 跨平台 SDK 项目。他于 2004 年设计了 eC 语言。Jerome 于 2005 年创立了 Ecere Corporation,目前担任公司 CTO,领导公司的研发工作。Ecere 最新的重点是开发 GNOSIS 地理空间可视化工具。

4 条评论

这看起来还不错。希望它是基于当前的语言构建的,但它不难学习和掌握。

打算开始玩玩它,但看起来很有希望。

谢谢 Paul。否则您更喜欢使用哪种语言?我们正在努力开发绑定生成器,以便人们可以使用他们喜欢的语言的 SDK。

此致,

-Jerome

回复 作者 Paul Nichols (未验证)

嗯,Python 绑定的基础知识正在形成...截至 8 月下旬在费城举行的 FOSSCON / Hive 76 hack-a-thon。

Ecere SDK 是用于 GUI 和图形的工具包。这是一个全球通用的跨平台工具包。试试看,您会很高兴使用它。
http://gamingtoolkit.net/

© . All rights reserved.