首頁  >  文章  >  後端開發  >  RSGL |模組化的僅標頭跨平台 GUI 庫,可按照您的方式輕鬆建立 GUI 軟體!

RSGL |模組化的僅標頭跨平台 GUI 庫,可按照您的方式輕鬆建立 GUI 軟體!

WBOY
WBOY原創
2024-07-16 21:31:11772瀏覽

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