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.
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);
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.
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
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
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); }
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!