glayout 介绍:OpenGL/WebGL 的界面绘制库(技术)

Posted 最后的叶子的神秘故事

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了glayout 介绍:OpenGL/WebGL 的界面绘制库(技术)相关的知识,希望对你有一定的参考价值。

在我的 和 43 游戏中,我使用了自己的库作为界面绘制库 glayout 。这个库可以用于常规的 2D 界面绘制,接口和 DOM 有点像。这篇文章是对它的一个介绍,感兴趣的技术小伙伴可以读一下。

特点

glayout 是一个 rust 语言编写的库。它的最大特点是可以编译成两大类目标代码:

  • 普通的客户端二进制程序,理论上可以通过 OpenGL ES 支持所有主流桌面和移动操作系统(但目前我只测试过 Windows )。

  • asm.js / WebAssembly 代码,可以运行在主流浏览器中(我的游戏就是这样运行在浏览器里的)。在这种方式下,还可以使用 javascript 接口来调用 glayout 进行界面绘制。

glayout 主要做两件事情:基于 GL 的 2D 绘制、简单的排版。

glayout 的接口从模型上近似于浏览器的 DOM 接口,目前也有初步的排版能力和一点点 CSS 支持。

Hello World

下面是 rust 语言版本 hello world 的代码片段(省略了一些周边代码)。

let cfg = context.canvas_config(); cfg.append_style_sheet("    .text {        display: block;        color: #222;    } "); let elem = element!(&cfg, Empty {    Text {        class: "text";        font_size: 50.;        line_height: 80.;        set_text("Hello world");    };    Text {        class: "text";        font_size: 24.;        line_height: 40.;        set_text("from glayout");    }; }); let mut body = context.root(); body.append(elem);

如果编译为 Windows 客户端程序,效果如下:

如果编译到 asm.js 的网页上,效果如下:

将这段代码编译为客户端程序时,glayout 仅需要常规的 rust 工具链支持。编译为 asm.js 代码时,需要 node.js 和 emscripten 工具链,以进行 asm.js 代码生成。

目前开发状态

glayout 目前还处在一个很早期的开发状态,虽然开发比较久了,但我的业余时间比较少而且项目工程量很大。感兴趣的小伙伴可以去 GitHub 看看,如果有兴趣参与开发就更好了~(直接联系我吧!)

GitHub: https://github.com/LastLeaf/glayout

以上是关于glayout 介绍:OpenGL/WebGL 的界面绘制库(技术)的主要内容,如果未能解决你的问题,请参考以下文章

openGL、WebGL、Three.js的关系

OpenGL/WebGL着色器开发入门指南

ThreeJS简介

在 QFileDialog 布局中调整按钮小部件的大小

cesium导入3D模型(obj转gltf)

如何使用 GridBagLayout 定位组件?