Black Shark Graphics Engine
是一个简单的 2D 和 3D 引擎编写 在 Pascal 中,开发人员可以利用硬件加速来生成应用程序 图形。它支持 Lazarus (v. >= 2.0) 和 Delphi。
这是一个年轻的、免费的项目,目前 在 2D 领域具有发展向量。此外,如果您愿意,您可以创建 3D 对象(请参阅测试示例 TBSTestMesh、TBSTestEarth 单位 bs.test.mesh.pas)。 该项目的一个主要目的是为简单的 访问版本 >= ES2 中的 OpenGL API 功能。
平台
-
Windows
-
Linux操作系统
-
Ultibo
-
树莓派操作系统
总结
-
核心:
-
渲染器基于 OpenGL ES 2.0 API;对于访问 OpenGL 上下文,使用来自 Google 项目的库 Angle;
-
几乎所有的事件和动画都基于观察者模式
;
-
2D 和 3D 世界之间没有区别;2D 对象绘制在最近的 视锥体平面;如果只想使用纯 2D 世界,可以设置 TBlackSharkFrustum.OrtogonalProjection 在 True 中,允许避免很少的扭曲对象;
-
所有输入事件(键盘、鼠标)的窗口系统基于 Delphi 和 Lazarus 中的组件库(VCL/FMX 和 LCL 适当),但是, 如果需要,可以替换其 (bs.viewport.TBlackSharkViewPort) 在自己的窗户系统上;
-
纯 Black Shark 应用程序(参见示例 “/tests/delphi/BSApplication” 和 “/tests/lazarus/BSApplication”);Delphi 也支持它进行 Linux 目标编译;
-
自己的 Windows 系统(通过“BSApplicatoin”中的命令行参数参见示例“bs.test.windows.TBSTestWindows”);
-
它有一个用于创建任何 2D 对象的画布;
-
任何图形对象(2D 或 3D)都可以是交互式的;
-
一个简单的光栅化器用于加载纹理和绘制RAM中的基元(例如,用于字体光栅化);
-
自己的字体系统不依赖于操作系统;
-
针对许多子系统的一组视觉测试;
-
字体:
-
支持从文件加载的字体 TrueType *.ttf,适当地可以 加载任何轮廓 TrueType,例如微笑(表情符号);
-
它有自己的 TrueType 字体加载器,可以完成三角测量和光栅化 (
无需使用外部工具
);
-
字符仅由网格输出(允许获得大符号的良好质量);
-
从纹理输出的字符(允许获得相对良好的小符号质量) 事先由光栅化器准备;纹理仅包含 alpha (GL_ALPHA),这就是为什么字体可以保留非常大的原因 纹理;
-
支持混合模式(使用特殊类 TTrueTypeRasterFont) 允许自动显示字体大小的较小阈值 从纹理,如果大小更大,则从网格显示阈值;
-
用于在消费者之间共享和管理生命周期的字体具有自动功能 参考计数;
-
纹理:
-
支持 tga、png(用于负载使用工具 Delphi 和 FPC);添加起来很容易 支持新格式;
-
对于消费者之间的共享和管理生命周期纹理具有自动功能 参考计数;
-
几何实例化:
-
实现软件实例化,即为每个 实例调用 glDrawElements,因为存在硬件支持 仅在 GLES 3.0 中;在未来计划的硬件实现中, 因为只会向 Angle 项目添加支持;
-
粒子系统:
-
实现通过单个调用 glDrawElements 绘制多个纹理粒子 对于所有粒子;每个粒子都是纹理的四边形,如果属性 TBlackSharkParticles
。IsPoints 等于 false,否则为点;
-
使用帮助着色器实现的全屏抗锯齿:
-
快速近似 (FXAA);
-
多重采样 (MSAA);
-
超级采样 x4 (SSAA)(有助于渲染到比屏幕更多的纹理 在 2 次内进一步重新采样(当然是在 GPU 上)到视口大小; 在 Linux 中工作本机实现 (TODO: include 属性 EmbeddedSSAA 切换到 TBlackSharkViewPort);
-
帆布:
-
它有一个类 bs.canvas.TBCanvas,它是一组简单的 2d 对象 (TCanvasObject 的后代);
-
画布具有缩放其对象相对于大小的缩放机制 视窗;
-
bs.canvas 单元包含一些基元的集合,如 line、circle、 圆弧、矩形、三角形、曲线等;
-
画布具有可缩放模式,可在视口更改时自动缩放其对象;
-
杂项:
-
列表/堆栈;
-
时间复杂度为 O(log n) 的二元平衡树 (AVL-tree) 所有操作:搜索、插入和删除;一个非常有用的属性: 所有值按键自动排序;
-
在平均情况下时间复杂度为 O(1) 的哈希表;
-
线程安全的 FIFO 队列(先进先出),不使用 OS 对象 用于同步;
-
允许插入和删除到任何位置的双向列表 对于时间复杂度 O(1);一个具有光标,用于按索引访问项目;
-
虚拟树适合任何分层数据,保存 并加载任何早期形成的结构;
-
例如,有限状态自动机(机器)提出 Aho-Corasick 算法,允许快速找到所有 子字符串到输入数据流中;
-
小而非常有用(恕我直言)通用集合:
安装
-
下载源代码;
-
解压缩到一个新目录,希望仅由拉丁字符组成;
-
在 IDE 中设置搜索源的路径:目录的根目录、/common、/core、/gui;
-
将输出可执行文件的路径设置为目录 /bin;
-
对于 Win64,将文件替换为 libEGL.dll、libGLESv2.dll、opengl32.dll /bin/Win64 目录中的文件。