Skip to content

RGFW vs GLFW

Colleague Riley edited this page Sep 2, 2024 · 3 revisions

RGFW and GLFW are both multi-platform libraries for creating and managing windows. Since RGFW is made as an alternative to GLFW, it seems appropriate to make a comparison of the two.

This should be a good resource for deciding which library you want to use.

Table of Content

Introducing RGFW & GLFW

(Note: I will only be including official features directly from the respective repositories)

RGFW is a lightweight, single-header, cross-platform window abstraction library. It supports X11, Windows (XP+), macOS, and HTML5. It also allows you to load a graphics context for OpenGL, Vulkan, DirectX, or buffer/software rendering.

GLFW is a cross-platform window abstraction library. It supports X11, Wayland, Windows (7+), and macOS. It also allows you to load a graphics context for OpenGL or Vulkan.

Design Comparison

RGFW is designed to be flexible, supporting many different paradigms and methods for achieving certain tasks. For example, RGFW's events can be handled using functions (isPressed), callbacks (RGFW_setMousePosCallback), or an event loop (while (RGFW_window_shouldClose(win) == 0)).

GLFW, on the other hand, mostly handles events via callbacks. This is less flexible, and you may have to work around GLFW instead of with GLFW, depending on what you want to do.

RGFW is also designed to be portable and lightweight, using a less complicated design philosophy with few internal abstractions. GLFW, however, has a more abstract design philosophy, focusing on functional programming and loading functions inside objects of C structures. This makes GLFW's source code significantly larger.

There is a GitHub repository that builds GLFW into a single-header library. The output cannot be viewed directly on GitHub because it is ~10 MB. RGFW, on the other hand, can be viewed on GitHub because it is only ~280 KB.

Feature Comparison

Feature RGFW GLFW
.o size (avg) 46 KB 280 KB
.so size (avg) 94 KB 433 KB
.h size 283 KB 256 KB
Memory usage (Linux) ~40 MiB 55.9 MiB
FPS counter X
Multi-threading X
Drag and drop (input)
Drag and drop (output) X X
Joystick input ~ (no macOS support)
Live window struct X
Event pipeline (dynamic) X
Multi-buffering
Set icon based on bitmap
Clipboard I/O
Multi-window support
Hide/show mouse
No resize window
No border window X
Transparent window
Key strings
Custom cursors
Wayland ~(experimental or XWayland)
OpenGL
Vulkan
OpenGL ES
EGL
OSMesa
Metal
DirectX X

Final Notes

Although RGFW is significantly more lightweight than GLFW, that doesn’t mean you should use it over GLFW. Ultimately, the choice is up to you. RGFW is more lightweight but RGFW is also newer and has a tiny community. So there's less support and it hasn't yet been tested in a production-ready project.