Releases: ColleagueRiley/RGFW
RGFW 1.8.1
RGFW 1.8.1
After nearly 7 months in development and testing, I'm finally excited to announce the latest release. (Note, this includes a quick patch which fixes failed release time workflows, freeBSD support and ensures the version name in the header is correct)
My goal with this release is to establish RGFW as more than just a GLFW alternative. RGFW is a windowing framework. This means some features found in GLFW fall outside its scope, and conversely, RGFW provides capabilities GLFW does not.
I also took inspiration from aspects of SDL’s user level API design that I found particularly well thought out.
Breaking Changes
- state checking functions renamed
RGFW_isPressed->RGFW_keyPressed - RGFW_isKeyPressed / RGFW_isKeyReleased only checks if the key is pressed in that frame, is
RGFW_isKeyDownif you want to know the current state. - removed
RGFW_wasMousePressed(RGFW_isMouseReleased/RGFW_isMouseDownshould be used now) - removed
RGFW_wasPressed(RGFW_isKeyReleased/RGFW_isKeyDownshould be used now) - removed
RGFW_isClicked(RGFW_isKeyReleasedshould be used now) - removed
RGFW_sleep - removed
RGFW_checkFPS - removed
RGFW_windowFreeOnClose - remove RGFW _ shape types and replace them with raw
i32 - Don't define
RGFW_OPENGLby default and theRGFW_windowOpenGLflag is required to create a window with OpenGL - rename
RGFW_KP_[Key]keys toRGFW_kp[Key] - rename
RGFW_MultiplytoRGFW_kpMultiply - remove RGFW_windowOpenglSoftware
- RGFW_errOpenglContext -> RGFW_errOpenGLContext
- switch to union of event structs of events
- use userside event structure for checking for events rather than one in
RGFW_window - use dynamic
RGFW_surfacefor software rendering rather thanwin->buffer - remove RGFW_sleep
- remove RGFW_checkFPS
- remove swapBuffers, keep swapBuffers_OpenGL
- remove getTime/setTime
- rename
RGFW_dndtoRGFW_drop - rename
RGFW_dndInittoRGFW_drag - rename
RGFW_window_initOpenGL/RGFW_window_freeOpenGLtoRGFW_window_createContext_OpenGL/RGFW_window_deleteContext_OpenGL - rename
RGFW_getCurrent->RGFW_window_getCurrentWindow_OpenGL/RGFW_window_getCurrentWindow_EGL - rename
RGFW_window_makeCurrent->RGFW_window_makeCurrentWindow_OpenGL/RGFW_window_makeCurrentWindow_EGL - rename
RGFW_window_makeCurrent_OpenGL/RGFW_window_makeCurrent_EGL->RGFW_window_makeCurrentContext_OpenGL/RGFW_window_makeCurrentContext_EGL - rename DirectX functions to _DirectX
RGFW_window_createSwapChain_DirectX - rename Vulkan functions to _Vulkan eg.
RGFW_window_createSurface_Vulkan - rename
RGFW_window_eventWaittoRGFW_waitForEvent - rename
RGFW_window_checkEventpolls the usesRGFW_window_pollEventsand then uses the event queue to get an event - replace
RGFW_window_checkEventswithRGFW_window_pollEvents - change typedef void (* RGFW_keyfunc)(RGFW_window* win, u8 key, u8 keyChar, RGFW_keymod keyMod, RGFW_bool pressed); to typedef void (* RGFW_keyfunc)(RGFW_window* win, u8 key, u8 keyChar, RGFW_keymod keyMod, RGFW_bool repeat, RGFW_bool pressed);
- rework OpenGL format attrib array creation to use a struct
- make it so
gl.hisn't included in RGFW, meaning you have to include it on your own - rename
RGFW_window_mouseHold->RGFW_window_holdMouse,RGFW_window_mouseUnhold->RGFW_window_unholdMouse - rename
RGFW_getGlobalMousePoint-> RGFW_getMousePoint` - rename
RGFW_window_mouseHidden-> `RGFW_window_isMouseHidden - remove
RGFW_windowNoInitAPIwithRGFW_windowOpenGLandRGFW_windowEGLto create an OpenGL or EGL window respectively. - remove
RGFW_windowOpenGLSoftwarein favor of an opengl context flag - cut
RGFW_getScreenSizein favor of fetching the window or primary monitor - replace
RGFW_setHint/RGFW_glHintwith single structRGFW_glHintsused increateContext` EGL/OpenGL functions - rename examples to be more clear
- rename
drag.droppedFilestodrag.filesanddrag.droppedFilesCounttodrag.count - rename+change behavior for keyboard and mouse events (pressed, released, down)
- remove
RGFW_windowCocoaCHDirToResflag in favor ofRGFW_moveToMacOSResourceDirfunction - remove internal OS Mesa support
- remove RGFW_BUFFER/window.buffer and add
RGFW_window_initBufferPtr,RGFW_window_copyBufferandRGFW_window_freeBuffer - cut gamepad support and add
minigamepad.hto the gamepad example - add
RGFW_window_isKey[X]andRGFW_windowIsMouse[X], and remove theRGFW_windowargument from the original functions - add
RGFW_windowUseEGLflag for choosing to use EGL - make sure ALL OpenGL functions have _OpenGL at the end of them
Major Changes
- fix support for C++, Objective-C/C++, Zig
- Allow the
RGFW_windowandRGFW_infostructs to be obfuscated - add functions for interacting with the
RGFW_windowstruct functionality - add win->exitKey to control which key is checked by
RGFW_window_shouldClose - fix OSX deprecations
- redesign RGFW state functions and add more state checking functions
- replace the CVDisplayLink fallback with IOKit (macOS 15.4 deprecation)
- move
RGFW_createWindowPtrandRGFW_freeWindowPtrto the global API so that way behavior is properly standardized - move keyboard map into private api as a global (helpful for a public API c89 and bindings)
- implement more missing features from the wayland backend (@uni-dos)
- add internal API section in header
- add
RGFW_gfxContextTypeandRGFW_window_src.gfxTypeto identify what type of context we're using and if the context was allocated by RGFW.
New Features:
- add
RGFW_window_getEnabledEvents,RGFW_window_setDisabledEventsandRGFW_window_setDisabledEvents - add RGFW_extensionSupported
- add
RGFW_enter,RGFW_printScreen,RGFW_F13-RGFW_F25,RGFW_kpEqual,RGFW_menu,RGFW_world1,RGFW_world2andRGFW_pausekeycodes - make in header documentation better and more descriptive
RGFW_EGLcan be used along side nativeRGFW_OPENGL- add RGFW_window_isHoldingMouse
- add support for native GLES support (GLX, WGL)
- added documentation for each RGFW_glHints value including their default values.
- new function: RGFW_getGLHint.
- make event queue use a circular buffer (@kjohns19)
Bug Fixes:
- add
RGFW_setGlobalHints_OpenGLandRGFW_getGlobalHints_OpenGL - add
RGFW_resetGlobalHints_OpenGL - fix set max/min window size (X11)
- make sure mouse is regrabbed on refocus
- try to fix black flashing issue, zero out XSetWindowAttributes object
- fix msvc warnings (wchar, explicitly request an "A" function)
- fix XRandr memory leak
- remove WS_THICKFRAME flag (winapi)
- fix wayland missing destructors
- fix usage of libc functions without RGFW_macro
- fix wayland compile errors
- fix ARM errors on Windows
- fix wayland object leaks
- fixed a bug with RGFW_BUFFER_ALLOC in the MacOS version of RGFW_window_initBufferPtr.
- fixed a bug in 'RGFW_window_initBufferSize'.
- fixed a bug in RGFW_GL_HINTS with how the RGFW_glStencil and RGFW_glSamples values were zero instead of their default RGFW values.
- fixed indenting in RGFW_initFormatAttribs.
- fix drag and drop and image copy bug
- fix inconsistent mouse function naming
- fix EGL and OpenGL extension checking
- fix OpenGL mismatches
- all bug fixes listed under Major Changes (e.g., XRandr memory leak, ARM errors, etc.)
- replace incorrect usage of
RGFW_MEMCPYwithRGFW_STRNCPY - have x11 resize events check an internal rect (fixes ignored resize event bug)
- Fix keycode for Right Super key on Linux
- fix issues with -Werror=stringop-truncation and alignment
- fix xdnd ghost bug
- remove X11 fallbacks from the wayland backend (in a wayland environment)
- make sure RGFW falls back to X11 if a wayland environment is not detected
- propers errors in X11, Wayland and Windows versions of RGFW_window_initBufferPtr
- don't use xdg-decorations if it's not supported
- fix event queue to handle circular buffering correctly
- fixed Wayland resizing behavior
Other / Miscellaneous:
- (X11) merge createContxt_OpenGL and createVisual_OpenGL
- add RGFW_bool RGFW_window_getDataDrag(RGFW_window* win, i32* x, i32* y) / RGFW_bool RGFW_window_isDataDragging(RGFW_window* win)
- add RGFW_bool RGFW_window_getDataDrop(RGFW_window* win, const char*** files, size_t* count) / RGFW_bool RGFW_window_didDataDrop(RGFW_window* win)
- add
RGFW_getMouseScrollfunction - add RGFW_mouseScroll event
- add
RGFW_getMouseVector - remove
RGFW_NO_APIbecause it's superfluous - general improvements, API consistency, internal refactoring, documentation updates, and backend reworks.
- includes reworked OpenGL/EGL context management, Wayland/X11 improvements, RGFW_image support, event queue refactoring, and cleanup of deprecated or confusing APIs.
- (Wayland) monitor support (uni-dos)
- (Wayland) mouse icon support (uni-dos)
- (Wayland) raw mouse movement support (@uni-dos)
- (Wayland) window icon support (@uni-dos)
- (Wayland) allow wayland windows to know which monitor the window is on. (@uni-dos)
- (Wayland) For pointer and keyboard use the passed in rgfw_info and not the global current. (@uni-dos)
- (Wayland) reduce the number of calls to create and configure a surface as some functions called the same code. (@uni-dos)
- (Wayland) rework poll event (@uni-dos)
- (Wayland) implement set border (@uni-dos)
- remove
basic/basic, split it intostandard-mouse-icons/icons,gl11/gl11custom_alloc/custom_alloc - remove
icons/icons, split intomouse-icons/iconsandwindow-icons-icons - rename
events/eventstoevent_queue/event_queue - add
void RGFW_window_setLayer_OSX(RGFW_window* win, void* layer); - add
void* RGFW_window_getView_OSX(RGFW_window* win); - add
void* RGFW_window_getWindow_OSX(RGFW_window* win); - add
void* RGFW_window_getHWND(RGFW_window* win); - add `void* RGFW_window_getHDC(RGFW_w...
1.8.0 (pre-release)
RGFW 1.8.0-pre
This is a pre-release so that way more bugs can be found and fixed for the real release.
but the API will not change between the pre-release and the final release of 1.8.0
This release focuses on improving RGFW’s API while making its internals more stable and less prone to bugs.
It also cleans up inconsistencies, reworks poor design choices, and removes non-essential features.
My goal with this release is to establish RGFW as more than just a GLFW alternative. RGFW is a windowing framework. This means some features found in GLFW fall outside its scope, and conversely, RGFW provides capabilities GLFW does not.
I also took inspiration from aspects of SDL’s user level API design that I found particularly well thought out.
Breaking Changes
- state checking functions renamed
RGFW_isPressed->RGFW_keyPressed - RGFW_isKeyPressed / RGFW_isKeyReleased only checks if the key is pressed in that frame, is
RGFW_isKeyDownif you want to know the current state. - removed
RGFW_wasMousePressed(RGFW_isMouseReleased/RGFW_isMouseDownshould be used now) - removed
RGFW_wasPressed(RGFW_isKeyReleased/RGFW_isKeyDownshould be used now) - removed
RGFW_isClicked(RGFW_isKeyReleasedshould be used now) - removed
RGFW_sleep - removed
RGFW_checkFPS - removed
RGFW_windowFreeOnClose - remove RGFW _ shape types and replace them with raw
i32 - Don't define
RGFW_OPENGLby default and theRGFW_windowOpenGLflag is required to create a window with OpenGL - rename
RGFW_KP_[Key]keys toRGFW_kp[Key] - rename
RGFW_MultiplytoRGFW_kpMultiply - remove RGFW_windowOpenglSoftware
- RGFW_errOpenglContext -> RGFW_errOpenGLContext
- switch to union of event structs of events
- use userside event structure for checking for events rather than one in
RGFW_window - use dynamic
RGFW_surfacefor software rendering rather thanwin->buffer - remove RGFW_sleep
- remove RGFW_checkFPS
- remove swapBuffers, keep swapBuffers_OpenGL
- remove getTime/setTime
- rename
RGFW_dndtoRGFW_drop - rename
RGFW_dndInittoRGFW_drag - rename
RGFW_window_initOpenGL/RGFW_window_freeOpenGLtoRGFW_window_createContext_OpenGL/RGFW_window_deleteContext_OpenGL - rename
RGFW_getCurrent->RGFW_window_getCurrentWindow_OpenGL/RGFW_window_getCurrentWindow_EGL - rename
RGFW_window_makeCurrent->RGFW_window_makeCurrentWindow_OpenGL/RGFW_window_makeCurrentWindow_EGL - rename
RGFW_window_makeCurrent_OpenGL/RGFW_window_makeCurrent_EGL->RGFW_window_makeCurrentContext_OpenGL/RGFW_window_makeCurrentContext_EGL - rename DirectX functions to _DirectX
RGFW_window_createSwapChain_DirectX - rename Vulkan functions to _Vulkan eg.
RGFW_window_createSurface_Vulkan - rename
RGFW_window_eventWaittoRGFW_waitForEvent - rename
RGFW_window_checkEventpolls the usesRGFW_window_pollEventsand then uses the event queue to get an event - replace
RGFW_window_checkEventswithRGFW_window_pollEvents - change typedef void (* RGFW_keyfunc)(RGFW_window* win, u8 key, u8 keyChar, RGFW_keymod keyMod, RGFW_bool pressed); to typedef void (* RGFW_keyfunc)(RGFW_window* win, u8 key, u8 keyChar, RGFW_keymod keyMod, RGFW_bool repeat, RGFW_bool pressed);
- rework OpenGL format attrib array creation to use a struct
- make it so
gl.hisn't included in RGFW, meaning you have to include it on your own - rename
RGFW_window_mouseHold->RGFW_window_holdMouse,RGFW_window_mouseUnhold->RGFW_window_unholdMouse - rename
RGFW_getGlobalMousePoint-> RGFW_getMousePoint` - rename
RGFW_window_mouseHidden-> `RGFW_window_isMouseHidden - remove
RGFW_windowNoInitAPIwithRGFW_windowOpenGLandRGFW_windowEGLto create an OpenGL or EGL window respectively. - remove
RGFW_windowOpenGLSoftwarein favor of an opengl context flag - cut
RGFW_getScreenSizein favor of fetching the window or primary monitor - replace
RGFW_setHint/RGFW_glHintwith single structRGFW_glHintsused increateContext` EGL/OpenGL functions - rename examples to be more clear
- rename
drag.droppedFilestodrag.filesanddrag.droppedFilesCounttodrag.count - rename+change behavior for keyboard and mouse events (pressed, released, down)
- remove
RGFW_windowCocoaCHDirToResflag in favor ofRGFW_moveToMacOSResourceDirfunction - remove internal OS Mesa support
- remove RGFW_BUFFER/window.buffer and add
RGFW_window_initBufferPtr,RGFW_window_copyBufferandRGFW_window_freeBuffer - cut gamepad support and add
minigamepad.hto the gamepad example - add
RGFW_window_isKey[X]andRGFW_windowIsMouse[X], and remove theRGFW_windowargument from the original functions - add
RGFW_windowUseEGLflag for choosing to use EGL - make sure ALL OpenGL functions have _OpenGL at the end of them
Major Changes
- fix support for C++, Objective-C/C++, Zig
- Allow the
RGFW_windowandRGFW_infostructs to be obfuscated - add functions for interacting with the
RGFW_windowstruct functionality - add win->exitKey to control which key is checked by
RGFW_window_shouldClose - fix OSX deprecations
- redesign RGFW state functions and add more state checking functions
- replace the CVDisplayLink fallback with IOKit (macOS 15.4 deprecation)
- move
RGFW_createWindowPtrandRGFW_freeWindowPtrto the global API so that way behavior is properly standardized - move keyboard map into private api as a global (helpful for a public API c89 and bindings)
- implement more missing features from the wayland backend (@uni-dos)
- add internal API section in header
- add
RGFW_gfxContextTypeandRGFW_window_src.gfxTypeto identify what type of context we're using and if the context was allocated by RGFW.
New Features:
- add
RGFW_window_getEnabledEvents,RGFW_window_setDisabledEventsandRGFW_window_setDisabledEvents - add RGFW_extensionSupported
- add
RGFW_enter,RGFW_printScreen,RGFW_F13-RGFW_F25,RGFW_kpEqual,RGFW_menu,RGFW_world1,RGFW_world2andRGFW_pausekeycodes - make in header documentation better and more descriptive
RGFW_EGLcan be used along side nativeRGFW_OPENGL- add RGFW_window_isHoldingMouse
- add support for native GLES support (GLX, WGL)
- added documentation for each RGFW_glHints value including their default values.
- new function: RGFW_getGLHint.
- make event queue use a circular buffer (@kjohns19)
Bug Fixes:
- add
RGFW_setGlobalHints_OpenGLandRGFW_getGlobalHints_OpenGL - add
RGFW_resetGlobalHints_OpenGL - fix set max/min window size (X11)
- make sure mouse is regrabbed on refocus
- try to fix black flashing issue, zero out XSetWindowAttributes object
- fix msvc warnings (wchar, explicitly request an "A" function)
- fix XRandr memory leak
- remove WS_THICKFRAME flag (winapi)
- fix wayland missing destructors
- fix usage of libc functions without RGFW_macro
- fix wayland compile errors
- fix ARM errors on Windows
- fix wayland object leaks
- fixed a bug with RGFW_BUFFER_ALLOC in the MacOS version of RGFW_window_initBufferPtr.
- fixed a bug in 'RGFW_window_initBufferSize'.
- fixed a bug in RGFW_GL_HINTS with how the RGFW_glStencil and RGFW_glSamples values were zero instead of their default RGFW values.
- fixed indenting in RGFW_initFormatAttribs.
- fix drag and drop and image copy bug
- fix inconsistent mouse function naming
- fix EGL and OpenGL extension checking
- fix OpenGL mismatches
- all bug fixes listed under Major Changes (e.g., XRandr memory leak, ARM errors, etc.)
- replace incorrect usage of
RGFW_MEMCPYwithRGFW_STRNCPY - have x11 resize events check an internal rect (fixes ignored resize event bug)
- Fix keycode for Right Super key on Linux
- fix issues with -Werror=stringop-truncation and alignment
- fix xdnd ghost bug
- remove X11 fallbacks from the wayland backend (in a wayland environment)
- make sure RGFW falls back to X11 if a wayland environment is not detected
- propers errors in X11, Wayland and Windows versions of RGFW_window_initBufferPtr
- don't use xdg-decorations if it's not supported
- fix event queue to handle circular buffering correctly
- fixed Wayland resizing behavior
Other / Miscellaneous:
- (X11) merge createContxt_OpenGL and createVisual_OpenGL
- add RGFW_bool RGFW_window_getDataDrag(RGFW_window* win, i32* x, i32* y) / RGFW_bool RGFW_window_isDataDragging(RGFW_window* win)
- add RGFW_bool RGFW_window_getDataDrop(RGFW_window* win, const char*** files, size_t* count) / RGFW_bool RGFW_window_didDataDrop(RGFW_window* win)
- add
RGFW_getMouseScrollfunction - add RGFW_mouseScroll event
- add
RGFW_getMouseVector - remove
RGFW_NO_APIbecause it's superfluous - general improvements, API consistency, internal refactoring, documentation updates, and backend reworks.
- includes reworked OpenGL/EGL context management, Wayland/X11 improvements, RGFW_image support, event queue refactoring, and cleanup of deprecated or confusing APIs.
- (Wayland) monitor support (uni-dos)
- (Wayland) mouse icon support (uni-dos)
- (Wayland) raw mouse movement support (@uni-dos)
- (Wayland) window icon support (@uni-dos)
- (Wayland) allow wayland windows to know which monitor the window is on. (@uni-dos)
- (Wayland) For pointer and keyboard use the passed in rgfw_info and not the global current. (@uni-dos)
- (Wayland) reduce the number of calls to create and configure a surface as some functions called the same code. (@uni-dos)
- (Wayland) rework poll event (@uni-dos)
- (Wayland) implement set border (@uni-dos)
- remove
basic/basic, split it intostandard-mouse-icons/icons,gl11/gl11custom_alloc/custom_alloc - remove
icons/icons, split intomouse-icons/iconsandwindow-icons-icons - rename
events/eventstoevent_queue/event_queue - add
void RGFW_window_setLayer_OSX(RGFW_window* win, void* layer); - add
void* RGFW_window_getView_OSX(RGFW_window* win); - ad...
RGFW v1.7.0
This release focuses on improving bug fixes and supporting more edge cases. It also continues to work towards feature parity with GLFW.
breaking changes:
- Rename
RGFW_window_checkFPStoRGFW_checkFPS - Change
RGFW_window_setShouldClose(RGFW_window)toRGFW_window_setShouldClose(RGFW_window, RGFW_BOOL) - Rename
RGFW_setMouseNotifyCallBack→RGFW_setMouseNotifyCallback - Rename
windowResizeCallback→windowResizedCallback - Rename
windowMoveCallback→windowMovedCallback - Change return type of
RGFW_getProcAddresstoRGFW_proc event.inFocusremoved — useRGFW_window_isInFocus()instead
major changes:
- Event Queue Rewrite
- Replace internal event passing system (WASM, WinAPI, macOS) with
RGFW_eventQueuePush/RGFW_eventQueuePop
- Replace internal event passing system (WASM, WinAPI, macOS) with
- Platform-Independent Timing
RGFW_getTimeandRGFW_getTimeNSnow platform-independent- Add
RGFW_setTime(called with0at window init)
- New OpenGL and Buffer Management
- Add
RGFW_window_swapBuffers_softwareandRGFW_window_swapBuffers_OpenGL - Add
RGFW_window_initOpenGLandRGFW_window_freeOpenGL - Add
RGFW_proctypedef and updateRGFW_getProcAddress - Default multisampling is now 0 (more consistent with GLFW)
- Add
- Improved Software Rendering Support
- Better macOS and wasm software rendering
- Use direct software rendering in wasm (no OpenGL required)
- Flags and Focus Enhancements
- Add
RGFW_windowFreeOnClose,RGFW_windowFocusOnShow - Add
RGFW_windowFocusandRGFW_windowFocusflag
- Add
- New Events
RGFW_windowMaximizedRGFW_windowMinimizedRGFW_windowRestored
- Cross-Platform Improvements
- Add
RGFW_initandRGFW_deinit - Make
CLOCK_MONOTONICdefault where supported BeginPaint/EndPaintnow called properly (Windows)- Fix client area scaling issues (Windows)
- Add
- Monitor and Window Enhancements
RGFW_getMonitorsnow takes asize_t* lenargument- Better monitor resolution detection
- Fix X11 clipboard and waitEvent bugs
- Add
RGFW_ADVANCED_SMOOTH_RESIZE(WinAPI, X11)
all changes:
fixes:
- Fix
RGFW_window_setFlagsoverwrite bugs - Fix C++ compilation issues
- Fix bugs with Unix timers and macOS warnings
- Fix X11 and Cocoa waitEvent behavior
- Fix OpenGL fallback and function loading (GLX, EGL, WGL)
- Fix software rendering support (macOS, OSMesa, wasm)
- Fix key input for non-latin and non-evdev X11 users
- Fix monitor resolution detection
- Fix gear and multi-window examples
- Fix icons and transparency (macOS, Windows)
- Fix memory alignment and window flags initialization
- Ensure
BeginPaint/EndPaintused correctly (Windows)
new features:
- Add
RGFW_eventQueuePush/RGFW_eventQueuePop - Add
RGFW_windowFreeOnClose - Add
RGFW_windowFocusOnShow - Add
RGFW_window_isInFocus - Add
RGFW_windowFocusflag - Add
RGFW_windowMaximized,RGFW_windowMinimized,RGFW_windowRestoredevents - Add
RGFW_ATOFmacro - Add
RGFW_procand update function loading - Add
RGFW_window_swapBuffers_software,RGFW_window_swapBuffers_OpenGL - Add
RGFW_init,RGFW_deinit - Add premake build file
- Add
examples/gears/gears,examples/multi-window/multi-window - Add
RGFW_BUFFER_BGR, renameRGFW_X11_DONT_CONVERT_BGR - Add fallback for
glXCreateContextAttribsARB - Add swapInterval to WGL loading
miscellaneous:
- Only allow transparency if
RGFW_windowTransparentis enabled - Make depth default to 24 if transparency is off
- Use
timeEndPeriodfor better Windows timing - Default buffer size to window size if not resizable
- Refactor default bool types (
RGFW_INT_DEFINED,RGFW_BOOL_DEFINED) - (MSVC) Avoid linking
opengl32.dllunlessRGFW_OPENGLis used - Simplify EGL context creation
- Update OpenGL context fallback for Nvidia/GLX
- Fix flipped image in OSMesa (wasm)
compatibility:
- Tested with Zig
- Improved MSVC, macOS, wasm, X11, and EGL/OSMesa support
notes:
This version continues the work from 1.6 to refine the API while introducing more robust internal systems for events, rendering, and timing.
RGFW v1.6.0
This release has been focused on ensuring feature parity with GLFW, reviewing included features, and fixing bugs.
major changes:
- RGFW_monitorMode, allows gives the user more control the monitor's mode (size, refreshRate, RGB)
- lots of bug fixes
- more windowing functions and checking functions (floating, focus, aspectRatio, etc)
- RGFW_glHints and more OpenGL hint options (RGB, depth, robustness, release behavior, etc)
- more examples
breaking changes:
- Replace
RGFW_window_setBufferPtrandRGFW_setBufferSizewithRGFW_window_initBuffer,RGFW_window_initBufferSizeandRGFW_window_initBufferPtr
Also forces the user to runRGFW_window_initBufferto allocate a buffer - add
vectorfor raw mouse data (sopointcan be used to get the regular mouse point) - RGFW_setGLHint and RGFW_glHints enum
- change RGFW_window_fullscreen to RGFW_window_setFullscreen
- make RGFW_window_setFullscreen use exclusive fullscreen
- limit directX support to RGFW_window_createDXSwapChain, most of it should/can be handled by the user
- do not close the window until the (library) user closes it
- add RGFW_monitorMode, move monitor.rect to mode.area and x, y to monitor
- RGFW stalls on RGFW_quit
all changes:
fixes:
- fix wasm key event bug (key release events not being processed)
- fix xDND data restarts bug
- rewrite writeclipboard, ensure the selection is properly being handled and the clipboard is properly being saved after the window is closed
- review winapi window_setIcon (fixes HICON persistance issue)
- make sure RGFW_mousePosCallback is called even for raw input events (winapi)
- handle
WM_SYSKEYDOWNandWM_SYSKEYUPevents (winapi) - skip x11 mouse button events if the mouse button > 5
- framework CoreVideo is needed to get the monitor's refresh rate (macOS)
- move WM_PAINT to WndProc callback
- ensure setFlag won't cause bugs when it's used to create a window
- update Vulkan example (fix crashes with certain drivers, have triangle follow mouse)
- ensure UTF8 support (winapi)
- make RGFW_window_setFullscreen use exclusive fullscreen
new features:
- add icon example
- add
RGFW_window_center - add
RGFW_window_borderless,RGFW_window_allowsDNDandRGFW_window_mouseHiddenfor checking for args - add flags example
- fix
RGFW_window_setMaxSize/RGFW_window_setMinSizewinapi, useSetPropAGetPropAto get the window inWndProc - make RGFW_window_isMaximized actually maximize the window width the API
- fix RGFW_window_setBorder not working after window creation (X11)
- fix window flag bugs (macOS)
- RGFW_window_maximize uses
toggleFullScreenif the window has no border (macOS) - add support for extra mouse buttons RGFW_mouseMisc1 - RGFW_mouseMisc5
- separate maximize and fullscreen functions
- add RGFW_window_setAspectRatio
- add
RGFW_window_focusandRGFW_window_raise - add
RGFW_window_isFloatingandRGFW_window_setFloating - add
RGFW_getCurrent_OpenGL - add
RGFW_setXInstName - add
RGFW_window_setOpacity - add
RGFW_getTimerFreqandRGFW_getTimerValue - add RGFW_window_scaleToMonitor AND RGFW_monitor_requestMode
- add monitor/monitor.c example to show monitor scaling.
- add RGFW_window_setFlags
- add RGFW_windowFloating flag
- add RGFW_COCOA_GRAPHICS_SWITCHING option
- add RGFW_setGLRGBA, RGFW_setGLAccumRGBA RGFW_setGLSRGB, RGFW_setGLRobustness, RGFW_setGLDebug, RGFW_setGLNoError
- add RGFW_setGLReleaseBehavior and RGFW_glRelease enum
- new opengl hint options:
RGFW_glRed, RGFW_glGreen, RGFW_glBlue, RGFW_glAlpha
RGFW_glDepth,
RGFW_glAccumRed, RGFW_glAccumGreen, RGFW_glAccumBlue, RGFW_glAccumAlpha
RGFW_glSRGB
RGFW_glRobustness
RGFW_glDebug
RGFW_glNoError
RGFW_glReleaseBehavior - add RGFW_scrollLock keycode and RGFW_modScrollLock mod key
- add
RGFW_monitorModeCompare - Add refreshRate to RGFW_monitor
- allow seticon to be undone
- add
RGFW_window_setIconEx(allows you to set titleBar icon, window icon or both) - add mode.red, mode.green, mode.blue
- add smooth-resize example
- Replace
RGFW_window_setBufferPtrandRGFW_setBufferSizewithRGFW_window_initBuffer,RGFW_window_initBufferSizeandRGFW_window_initBufferPtr
Also forces the user to runRGFW_window_initBufferto allocate a buffer - add
vectorfor raw mouse data (sopointcan be used to get the regular mouse point) - RGFW_setGLHint and RGFW_glHints enum
- add RGFW_monitorMode, move monitor.rect to mode.area and x, y to monitor
miscellaneous changes:
- Get rid of
RGFW_ALLOC_DROPFILES(it's not actually useful) - Get rid of RGFW_allocator, most of the memory that needs to be allocated is optional and is allocated on init anyway.
- print errors in writeclipboard (X11)
- fix macOS titlebar api (borderless window)
- remove RGFW_mouseNone (fixes overflow bug, RGFW_mouseNone isn't used anyway)
- expose RGFW_moveToMacOSResourceDir to the public API
- change b8/b32 to single changeable bool type
RGFW_bool, addRGFW_BOOLmacro for forcing an int to be bool - add
CONVENTIONS.md - fix RGFW_window_eventWait, make sure RGFW_eventWaitNext is converted if it needs to be, ensure the correct time is used, (winapi, cocoa), make waitMS unsigned
- fix issues with examples compiling (macOS, wasm, X11)
- remove microui_demo on wasm site
- make the default bool type u8
- replace API calls in RGFW_window_getMousePoint with
win->_lastMousePoint - ensure monitor functions can be used prior to window creation
- change RGFW_window_fullscreen to RGFW_window_setFullscreen
- limit directX support to RGFW_window_createDXSwapChain, most of it should/can be handled by the user
- do not close the window until the (library) user closes it
- RGFW stalls on RGFW_quit
What's Changed
- Debug Callback Implementation by @konopimi in #69
- Kpm vulkan pass mouse data to shader by @konopimi in #71
- X11 Clipboard rewrite by @ColleagueRiley in #72
- add support for extra mouse buttons by @ColleagueRiley in #77
- Window behavior review by @ColleagueRiley in #79
- review windowing by @ColleagueRiley in #80
- review opengl context creation by @ColleagueRiley in #82
- review monitor functions by @ColleagueRiley in #81
New Contributors
Full Changelog: 1.50...1.60
RGFW v1.5.0
RGFW 1.5.0 is released after 4 months of development and includes a lot of major changes!
This may not include all of the changes or breaking changes made.
This is because 1.5 is the first release, and I took releases and release notes more seriously.
In later commits, the CHANGELOG will be updated while the release is being worked on.
1.5 also has many breaking changes. These are essential changes for API consistency and to better expose functionality. Later releases will aim to have fewer breaking commits. I wanted to get as many of these changes out of the way as possible while the project is still relatively new.
major changes:
- gamepad rewrite
- keycode rewrite
- macOS gamepad support
- RGFW_allocator, RGFW_createWindowPtr, and better memory control
- monitor refinement
- A lot of bug fixes
breaking changes:
- gamepad rewrite changes JS/Joystick -> gamepad
- clipboard is now freed by RGFW
- rewrite keymods/ledState -> modState (Control, Shift, numlock, capslock, alt)
- RGFW_window_setMouse -> RGFW_loadMouse, RGFW_window_setMouse, RGFW_freeMouse
- make enum naming more consistent, make window args enums
RGFW_Key -> RGFW_key
RGFW_Control -> RGFW_control (for example)
RGFW_(ARG) -> RGFW_window(Arg)
RGFW_CENTER -> RGFW_windowCenter
- RGFW_window_setMouse -> RGFW_loadMouse, RGFW_window_setMouse, RGFW_freeMouse
all changes:
new features:
- RGFW_setClassName, allows program class (grouping) to be set
- start of MacOS EGL support
- add support for loading an icon from a .rc file
- add RGFW_allocator for runtime changes to the allocator
- add RGFW_readClipboardPtr to load clipboard data into a buffer, or send a NULL buffer to get the size
- RGFW_createWindowPtr to create a window without allocating a window struct
- add gamepad support for macOS (IOKit)
- Add XDL.h to this repo for optionally dynamically linking X11
- auto free clipboard (no need to free it yourself)
- RGFW_window_setBufferPtr to set win->buffer to your own pointer
- RGFW_window_setMouse -> RGFW_loadMouse, RGFW_window_setMouse, RGFW_freeMouse
- Wayland fallback
- fallback to X functions when Wayland function isn't yet supported (eg. clipboard)
- Fallback to X when Wayland compositor is not found (eg. when using an X11 server)
- Allow the user to switch to wayland/X during runtime (you have to compile with Wayland support (RGFW_WAYLAND))
bugs:
- Fix GLX runtime errors for certain GPUs
- Fix C++ support, mostly fixes warnings and errors
- fix ctypes, drop support for non stdint types (MSVC)
- fix RGFW_window_resize lock (when RGFW_noResize is enabled)
- fix xDND crash
- Fix multi-window bugs (macOS)
- fix event misses when the unknown event is sent
- fix scale/center order
- make it easier to add custom backends
- allow for less linking to be required (eg. -lopengl32 -lwimm, optional
RGFW_USE_XDL)
reviews/rewrites - Wayland rewrite
- Integrate Wayland with X code, allow for callbacks
- monitor review
- SetProcessDPIAware, effective DPI
- fix scaling units and math
- refine monitor support
- fix RGFW_window_getMonitor
- fix hiDPI support (monitor.pixelRatio)
- fix transparency support (GLX) (WGL)
- Windows XP Support, don't call unsupport functions, testing
- remove weird tabbing synax (eg. extra tabbing in a #ifdef for functions)
- gamepad (joystick) review/rewrite
- rename joystick to gamepad
- fix emscripten gamepad, update gamepad api (whichAxis)
- Add L3 + L2 (gamepad)
- add connect, and disconnect events (RGFW_gamepadConnected / RGFW_gamepadDisconnected)
- change enums (RGFW_GP_A -> RGFW_gamepadA)
- support for gamepad names, types, refined axis checking, change mapping
- fix gamepad bugs and make gamepad support more stable overall
- get gamepad count
- RGFW_isPressedGamepad, RGFW_isHeldGamepad, RGFW_isReleasedGamepad, RGFW_wasPressedGamepad, RGFW_getGamepadAxis, RGFW_getGamepadName, RGFW_getGamepadCount, RGFW_getGamepadType
- keycode rewrite/review
- rewrite keycodes to use physical keycodes (event.key) and add keyChar for scancodes
- Ensure all functions use RGFWDEF
- Remove the convert key from the char function -> event.keyChar (keycode)
- refine RGFW raw input support
- dependency limiting
- get rid of CoreVideo dependency
- remove internal dependency on math.h
- allow for the use of the standard library to be limited
- make enum naming more consistent, make window args enums,
- rewrite keymods/ledState -> modState (Control, Shift, numlock, capslock, alt)
- Update UTF8 support
- Update Wayland support
new examples: - DOOM example on the website
- MicroUI example
- metal example
- fix Vulkan example
- add OSMesa example
- Add minimal linking
- Add custom backend example
- Add gamepad example
- Add no standard library example
What's Changed (pull requests)
- Fix casting warnings when building in MSVC by @JeffM2501 in #43
- fixed cross initialization with a jump to label in cpp by @DarekParodia in #44
- a more polished README.md by @TheYahton in #52
- unnecessary
statickeywords by @TheYahton in #54 - keycode rewrite by @ColleagueRiley in #53
- update RGFW gamepad support by @ColleagueRiley in #60
- Update simple example to add scancode by @zenitsuy in #61
- Gamepad update 2 by @ColleagueRiley in #62
- Update Wayland backend by @ColleagueRiley in #64
New Contributors
- @meshula made their first contribution in #38
- @TheLastVoyager made their first contribution in #42
- @JeffM2501 made their first contribution in #43
- @DarekParodia made their first contribution in #44
- @TheYahton made their first contribution in #52
- @ColleagueRiley made their first contribution in #53
- @zenitsuy made their first contribution in #61
Full Changelog: 1.06...1.50
RGFW 1.06
Quality of life update:
- more opengl options (core vs comp, disable double buffer, samples defaults to 0)
- deleted unneeded functions
- Experimental Wayland support
- re-done Makefile, with
- More MSVC support
- c++ support
- nuklear example
- Metal example
(Bug fixes)
- raw input data shouldn't be flipped
What's Changed
- fix: window not at the front on macOS by @omnisci3nce in #29
- fix(msvc): cpp cast error, .rh header redefinition warnings by @lesleyrs in #30
- fix: gl33 example by @lesleyrs in #31
- fix(windows): don't show dummy window on start by @lesleyrs in #32
New Contributors
- @omnisci3nce made their first contribution in #29
- @lesleyrs made their first contribution in #30
Full Changelog: 1.05...1.06
RGFW 1.05
- fixes a lot of bugs
- general quality of life/code updates
- HTML5 backend
- raw mouse input
Full Changelog: 1.00...1.05
RGFW 1.0
RGFW 1.0 is Finally out, with plenty of bug fixes and features being properly implemented on all OSes.
Plus a couple more features added for sake of completeness. Some reworking of functions and other cleaning of the RGFW codebase.
All of RGFW's basic features should be mostly finished now, the next release will focus on adding things not included in base RGFW 1.0.
What's Changed
Full Changelog: 0.99...1.00
RGFW binaries
What's Changed
- fixed issue with move and resize event on X11 by @Code-Nycticebus in #17
- Update RGFW.h by @robrohan in #18 (fixes bug with drag and drop data (X11))
- Keycodes are abstracted into an enum and a lookup table
- new events are added
New Contributors
- @Code-Nycticebus made their first contribution in #17
- @robrohan made their first contribution in #18
Full Changelog: 0.98...0.99
RGFW binaries
Full Changelog: 0.91...0.98