Memperkenalkan RGFW: Rangka kerja Tetingkap Tajuk Tunggal yang ringan & alternatif GLFW

王林
Lepaskan: 2024-07-26 09:29:41
asal
804 orang telah melayarinya

Introducing RGFW: A lightweight Single Header Windowing framework & GLFW alternative

Pengenalan

RGFW ialah rangka kerja pengepala tunggal merentas platform yang merumuskan penciptaan dan pengurusan tetingkap. RGFW mudah digunakan, membolehkan anda menumpukan pada pengaturcaraan permainan atau aplikasi anda daripada berurusan dengan API tetingkap peringkat rendah yang kompleks, perpustakaan dengan banyak overhed atau menyokong API khusus platform. RGFW mengendalikan API peringkat rendah untuk anda tanpa menghalang anda. Ia kini menyokong X11 (Linux), Windows (XP +), Emscripten (HTML5) dan MacOS.
Semasa mencipta tetingkap, RGFW memulakan konteks grafik pilihan anda. Pilihan termasuk OpenGL (termasuk varian), DirectX, pemaparan perisian langsung atau tiada API grafik. Terdapat juga pengepala berasingan untuk sokongan Vulkan walaupun anda disyorkan untuk membuat konteks Vulkan anda sendiri.

Reka bentuk

RGFW juga fleksibel mengikut reka bentuk. Sebagai contoh, anda boleh menggunakan sistem gelung peristiwa atau sistem panggilan balik acara. (Lihat lebih banyak dalam contoh/events/main.c dan examples/callbacks/main.c dalam repo RGFW).

while (RGFW_window_checkEvent(win)) {
  switch (win->event.type) {
     case RGFW_quit:
       break;  
     case RGFW_keyPressed:
       break;
     case RGFW_mousePosChanged:
        break;
     ...
  }
}
void mouseposfunc(RGFW_window* win, RGFW_point point) {

} 
void keyfunc(RGFW_window* win, u32 keycode, char keyName[16], u8 lockState, u8 pressed) {

}

void windowquitfunc(RGFW_window* win) {

}

RGFW_setMousePosCallback(mouseposfunc);
RGFW_setKeyCallback(keyfunc);
RGFW_setWindowQuitCallback(windowquitfunc);
Salin selepas log masuk

RGFW lwn GLFW

RGFW direka sebagai alternatif kepada GLFW. Ini kerana pangkalan kod GLFW tidak ringan dan tiada kefleksibelan.
Terdapat repositori GitHub yang mengambil semua kod sumber GLFW dan meletakkannya dalam satu perpustakaan pengepala tunggal yang besar. Fail GLFW.h ini ialah 10.7 megabait dan tidak boleh dilihat pada GitHub. RGFW boleh dilihat di GitHub kerana ia adalah 244 kilobait dan perduaan RGFW juga secara amnya sekitar satu pertiga daripada saiz perduaan GLFW. RGFW juga cenderung menggunakan kurang RAM berbanding GLFW.
Jika RGFW jauh lebih ringan daripada GLFW adakah itu bermakna RGFW kekurangan ciri? Tidak, RGFW mempunyai ciri yang hampir sama dengan GLFW. Jika anda berminat untuk mengetahui perbezaannya, terdapat jadual yang disertakan dalam repositori RGFW yang membandingkan RGFW dengan GLFW.

Menggunakan/menyusun RGFW

Untuk menggunakan RGFW, anda perlu menambah baris ini pada salah satu fail sumber anda.
#define RGFW_IMPLEMENTATION
Ini membolehkan takrifan sumber RGFW disertakan. 
Anda juga boleh menyusun RGFW seperti perpustakaan lain.

cc -x c -c RGFW.h -D RGFW_IMPLEMENTATION -fPIC -D 

RGFW_EXPORT
(Linux): 
cc -shared RGFW.o -lX11 -lXrandr -lm -lGL

(window mingw): 
cc -shared RGFW.o -lgdi32 -lopengl32 -lwinmm -lm

(macOS)
cc -shared RGFW.o -framework Foundation -framework AppKit -framework OpenGL -framework CoreVideo -lm 
Salin selepas log masuk

Contoh RGFW

Untuk mencipta tetingkap dan memulakan RGFW, jika ia adalah tetingkap pertama, anda menggunakan RGFW_createWindow(const char* name, RGFW_rect, u16 args)
Contohnya, untuk mencipta tetingkap di tengah skrin yang tidak boleh diubah saiznya

RGFW_window* win = RGFW_createWindow("Window", RGFW_RECT(0, 0, 200, 200) RGFW_CENTER | RGFW_NO_RESIZE);

... // do software stuff

RGFW_window_close(win); // close window now that we're done
Salin selepas log masuk

Selepas anda selesai membuat persembahan, anda perlu menukar penimbal tetingkap.
RGFW_window_swapBuffers(RGFW_window* win);
Jika anda menggunakan API yang tidak disokong, anda perlu mengendalikan fungsi itu sendiri.
Sekarang inilah contoh penuh RGFW:

#define RGFW_IMPLEMENTATION
#include "RGFW.h"

u8 icon[4 * 3 * 3] = {0xFF, 0x00, 0x00, 0xFF,    0xFF, 0x00, 0x00, 0xFF,     0xFF, 0x00, 0x00, 0xFF,   0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF,     0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF};

void keyfunc(RGFW_window* win, u32 keycode, char keyName[16], u8 lockState, u8 pressed) {
    printf("this is probably early\n");
}

int main() {
    RGFW_window* win = RGFW_createWindow("name", RGFW_RECT(500, 500, 500, 500), (u64)RGFW_CENTER);

    RGFW_window_setIcon(win, icon, RGFW_AREA(3, 3), 4);

    RGFW_setKeyCallback(keyfunc); // you can use callbacks like this if you want 

    i32 running = 1;

    while (running) {
        while (RGFW_window_checkEvent(win)) { // or RGFW_window_checkEvents(); if you only want callbacks
            if (win->event.type == RGFW_quit || RGFW_isPressed(win, RGFW_Escape)) {
                running = 0;
                break;
            }

            if (win->event.type == RGFW_keyPressed) // this is the 'normal' way of handling an event
                printf("This is probably late\n");
        }

        glClearColor(0xFF, 0XFF, 0xFF, 0xFF);
        glClear(GL_COLOR_BUFFER_BIT);

        RGFW_window_swapBuffers(win);
    }

    RGFW_window_close(win);
}
Salin selepas log masuk

Nota akhir

Tangkapan skrin contoh RGFW dan kod contoh PureDoom-RGFWMore serta maklumat tentang RGFW boleh didapati dalam repositori. Contoh juga boleh dijalankan dengan HTML5 di tapak contoh RGFW. Jika RGFW menarik minat anda, sila semak repositori RGFW, bintangkannya, atau tanya saya apa-apa soalan yang anda ada tentang RGFW. Saya juga terbuka kepada sebarang kritikan, nasihat atau permintaan ciri yang mungkin anda ada.

Walaupun RGFW jauh lebih ringan daripada GLFW, itu tidak bermakna anda harus melakukannya berbanding GLFW. Akhirnya, pilihan terpulang kepada anda. RGFW lebih ringan tetapi ia juga lebih baharu dan mempunyai komuniti kecil. Jadi kurang sokongan dan ia belum lagi diuji dalam projek sedia pengeluaran.

Jika anda mendapati RGFW menarik, sila lihat repositori. Satu cara anda boleh menyokong RGFW adalah dengan membintanginya.

https://github.com/ColleagueRiley/RGFW

Atas ialah kandungan terperinci Memperkenalkan RGFW: Rangka kerja Tetingkap Tajuk Tunggal yang ringan & alternatif GLFW. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!