首页 >后端开发 >C++ >RSGL |模块化的仅标头跨平台 GUI 库,可按照您的方式轻松创建 GUI 软件!

RSGL |模块化的仅标头跨平台 GUI 库,可按照您的方式轻松创建 GUI 软件!

WBOY
WBOY原创
2024-07-16 21:31:11806浏览

RSGL 是一个易于使用的模块化跨平台 GUI 库,用于轻松创建 GUI 应用程序和游戏。它将底层 GUI 库的自由度与现代 C 技术相结合,提供简单性和便利性。它的主要特点是内置的轻量级依赖、灵活性和跨平台支持。它目前支持 Linux、Windows 和 MacOS,拥有 zlib 许可证,并且由于使用 STB 和 miniaudio,因此支持多种数据格式。

The RSGL logo

RSGL简介

https://github.com/ColleagueRiley/RSGL

RSGL 是 Riley 简单 GUI 库的缩写,是一款旨在简化应用程序和游戏的图形用户界面 (GUI) 开发的工具。 RSGL 的核心是模块化和跨平台的解决方案,为开发人员提供轻松创建 GUI 的自由,同时克服 GUI 开发中遇到的常见挑战。

通过将基本的 GUI 功能封装在轻量级多功能库中,RSGL 使开发人员能够专注于创造力,而不是与技术复杂性作斗争。

RSGL的背景

就像 SDL RSGL 试图不妨碍用户一样。但与 SDL 不同的是,RSGL 试图变得更加现代化,为用户做更多的事情。另一个可以与 RSGL 进行比较的库是 Raylib。直到我创建了 RSGL 的初始设计之后,我才知道 Raylib。从表面上看,Raylib 和 RSGL 的设计非常相似。尽管如此,RSGL 有不同的设计选择,并且更加注重轻量化。例如,RSGL 的所有内部依赖项都是非常轻量级的,并且大多数都是如此设计的。虽然 Raylib 使用的依赖项并不是轻量级的,例如 GLFW。 RSGL 使用 RGFW 而不是 GLFW,GLFW 的 .o 输出约为 280kb,而 RGFW 的输出约为 46kb。尽管如此,Raylib 和 RSGL 以及 GUI 库都是不错的选择,您选择使用的库可能会根据您的品味和环境而改变。

Raylib 和 RSGL 的另一个相似之处是它们都使用 OpenGL 抽象层。分别为 RLGL 和 RGL。我不会在这里详细讨论这些差异。但值得注意的是,它们是如何使各自的库变得更加强大的。软件创建者可以轻松地在现代和传统 OpenGL 之间进行编译。 RGL 还允许程序在运行时使用遗留函数进行渲染。这使得程序具有故障安全功能,这也是 RSGL 为用户提供便利的另一种方式。

使用代码

RSGL 的伟大已经说得够多了。这是一个例子,你可以自己决定 RSGL 是否真的值得所有的赞扬。

#define RSGL_NO_AUDIO /* we don't want to link with miniaudio.h */
#define RSGL_IMPLEMENTATION
#include "RSGL.h"

#include <stdbool.h>

int main() {
    /* create window and pass arg to make sure it's centered */
    RSGL_window* win = RSGL_createWindow("example", RSGL_RECT(0, 0, 500, 500), RSGL_CENTER);

    bool legacy = false;

    bool running = true;
    while(running) {
/* check events until there are no more events to check */
        while(RSGL_window_checkEvent(win)) {
            if (win->event.type == RGFW_quit || RSGL_isPressedI(win, RGFW_Escape)) {
                running = false;
                break;
            }

            /* if the space bar is pressed, toggle rendering using opengl legacy */
            if (win->event.type == RSGL_keyPressed && win->event.keyCode == RGFW_Space) {
               legacy = !legacy;
               RSGL_legacy(legacy);
            }
        }   

        /* draw a basic rectangle and clear the screen */
        RSGL_drawRect(RSGL_RECT(200, 200, 200, 200), RSGL_RGB(255, 0, 0));
        RSGL_window_clear(win, RSGL_RGB(255, 255, 255));
    }

    RSGL_window_close(win);
}

编译:
Windows:gcc -lopengl32 -lshell32 -lgdi32
Linux: gcc -lGLX -lX11 -lm
macos : gcc -framework Foundation -framework AppKit -framework OpenGL -framework CoreVideo

注意:这是一个非常基本的示例,存储库中包含很多不太基本的示例。

兴趣点

RSGL 的总体特征,如项目符号列表所示:

  • 没有外部依赖,所有需要的库都包含在RSGL中,而且非常轻量级
  • 支持多平台,windows、MacOS、linux等
  • 支持多个版本的 OpenGL(甚至允许您在运行时切换)
  • 使用其他小型轻量级依赖项
  • OpenGL抽象层:RGL(也是它自己的单头库)
  • 由于stb_truetype.h和stb_image.h支持多种字体和图像格式
  • 由于miniaudio.h支持多种音频格式
  • 包含许多示例
  • 免费开源,具有非常灵活的许可证

RSGL 模块

RSGL_NO_WIDGETS(使 RSGL 不包含小部件功能)

RSGL_NO_AUDIO(使得RSGL不包含音频功能)

RSGL_NO_WINDOW - 没有 RSGL_window,而是使用 RSGL_graphics [这是为了使用 RGFW 以外的不同窗口管理器]

RSGL_NO_TEXT - 不包含文本渲染函数

RGFW_NO_WIDGETS - 不包含小部件

RSGL_NO_AUDIO - 不包含音频功能

RSGL_NO_MINIAUDIO_IMPLMENTATION -
中没有 #define MINIAUDIO_IMPLMENTATION 此标头(您必须以其他方式链接 miniaudio 才能使用音频)

RSGL_NO_SAVE_IMAGE - 不保存/加载图像(如果使用此功能,请勿使用 RSGL_drawImage),

RSGL_drawImage 保存文件名+纹理,以便加载它
当你稍后询问时。这会禁用

RSGL-架构图

RSGL | Modular header-only cross-platform GUI Library for easily creating GUI software your way!

执照

RSGL 使用 libpng 许可证,这意味着您可以自由使用 RSGL,只要您不声称您编写了该软件,标记更改版本并将许可证包含在标头中。

最后的说明

RSGL 存储库可以在以下位置找到:
https://github.com/ColleagueRiley/RSGL

以上是RSGL |模块化的仅标头跨平台 GUI 库,可按照您的方式轻松创建 GUI 软件!的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn