-
-
Notifications
You must be signed in to change notification settings - Fork 75
Expand file tree
/
Copy pathCHANGELOG
More file actions
778 lines (725 loc) · 40.6 KB
/
CHANGELOG
File metadata and controls
778 lines (725 loc) · 40.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
changelog
---------
Current:
Release: RGFW 2.0-dev
-----------------------------------------------
So far, this release is focused on fixing bugs, cleaning up aspects of RGFW's API and internals, while reviewing inadequate support (e.g. monitor support).
For a while RGFW has used atribrary versioning, but from now on RGFW's versioning will stick to the semver standard.
```
Given a version number MAJOR.MINOR.PATCH, increment the:
* MAJOR version when you make incompatible API changes
* MINOR version when you add functionality in a backward compatible manner
* PATCH version when you make backward compatible bug fixes
Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.
```
-----------------------------------------------
- add RGFW_glForwardCompatibility
- fix documentation typos
- add `RGFW_window_rawMouseMode` to enable raw mouse mode (without capturing the mouse)
- add `RGFW_setRawMouseMode` to enable raw mouse mode across all windows
- add `RGFW_windowCaptureMouse` and function `RGFW_window_captureMouse` to capture the mouse (without raw mouse mode)
- add `RGFW_window_captureRawMouse` and flag `RGFW_windowCaptureRawMouse` for capturing the mouse and enabling raw mouse mode (RGFW_window_captureRawMouse replaces holdMouse/unholdMouse)
- fix mouse hold/unhold on focus/unfocus
- cleanup hacky X11 raw mouse input
- support window resizing in the Vulkan Example
- fix extra chars from RGFW_window_setName (X11)
- fix window not hiding after it's first shown (X11)
- fix fullscreen bugs when a hidden window is created (X11)
- add RGFW_equal and RGFW_kpEquals alts for consistency
- add `RGFW_mouseText` as an altname for `RGFW_mouseIbeam`
- add `RGFW_mouseResizeNW`
- add `RGFW_mouseResizeN`
- add `RGFW_mouseResizeNE`
- add `RGFW_mouseResizeE`
- add `RGFW_mouseResizeSE`
- add `RGFW_mouseResizeS`
- add `RGFW_mouseResizeSW`
- add `RGFW_mouseResizeW`
- add `RGFW_mouseWait`
- add `RGFW_mouseProgress`
- add `RGFW_window_flash` and enum, `RGFW_flashRequest`
- add new example `examples/flash/flash` to demonstrate `RGFW_window_flash`
- standardize vsync being disabled by default (OpenGL)
- add 'RGFW_window_getSizeInPixels'
- do not center cursor when the cursor is captured anymore
- make sure mouse events during raw mouse mode still return the correct relative cursor value
- add `RGFW_checkEvent` and `RGFW_checkQueuedEvent` for checking the event queue without a window handle
- pollMonitors on OS monitor events
- use cached linked-list monitor data for accessing monitor data
- store source monitor data in the monitor struct by including a pointer to the internal node
- use pointers for monitor and RGFW_monitorMode functions to prevent copies of large amounts of struct data
`RGFW_monitor* RGFW_getMonitors` -> `RGFW_monitor** RGFW_getMonitors`
`RGFW_monitor RGFW_getPrimaryMonitor` -> `RGFW_monitor* RGFW_getPrimaryMonitor`
`RGFW_monitor_requestMode(RGFW_monitor mon, RGFW_monitorMode mode, RGFW_modeRequest request)` -> `RGFW_monitor_requestMode(RGFW_monitor* mon, RGFW_monitorMode* mode, RGFW_modeRequest request)`
`RGFW_monitorModeCompare(RGFW_monitorMode mon, RGFW_monitorMode mon2, RGFW_modeRequest request)` -> `RGFW_monitorModeCompare(RGFW_monitorMode* mon, RGFW_monitorMode* mon2, RGFW_modeRequest request)`
`RGFW_monitor_scaleToWindow(RGFW_monitor mon, struct RGFW_window* win)` -> `RGFW_monitor_scaleToWindow(RGFW_monitor* mon, struct RGFW_window* win)`
`RGFW_window_moveToMonitor(RGFW_window* win, RGFW_monitor m)` -> `RGFW_window_moveToMonitor(RGFW_window* win, RGFW_monitor* m)`
`RGFW_monitor RGFW_window_getMonitor` -> `RGFW_monitor* RGFW_window_getMonitor`
- use floating point for refresh rate instead of int to allow for non-int refresh rates
- add support for changing gamma and gamma ramp with struct `gammaRamp` and new gamma functions,
- `RGFW_monitor_getGammaRamp`, `RGFW_freeGammaRamp`, `RGFW_monitor_getGammaRampPtr`, `RGFW_monitor_setGammaRamp`, `RGFW_monitor_setGamma` and `RGFW_monitor_setGammaPtr`
- add `src` to `RGFW_monitorMode` so that way modes can be interacted with directly
- add `userPtr` to `RGFW_monitor`
- add functions for getting data from a `RGFW_monitor` (for bindings)
- add monitor connection events `RGFW_monitorConnected`, `RGFW_monitorDisconnected` `event.monitor`, `RGFW_monitorfunc`
- add `RGFW_monitor_getModes`, `RGFW_freeModes` and `RGFW_monitor_getModesPtr`
- add `RGFW_monitor_getWorkarea` to get the monitor's work area without UI elements
- add `RGFW_monitor_setMode` to directly set the monitor mode
- cleanup internal monitor code to be more optimizied, polling and caching when needed and using the internal monitorNode linked list
- add `RGFW_keyChar` event and `RGFW_keyCharfunc` callback for text input / UTF text
- remove `sym` from `keyPressed` / `keyReleased` events, to be handled by `RGFW_keyChar`
- implement proper UTF text input
- add tests for compiling
- remove VKInstance instance from getPresentation and fix windows support
- replace `RGFW_rgfwToKeyChar` with `RGFW_physicalToMappedKey`
- add support for utf8 key input and RGFW_keyChar event
- remove keyChar from keyPress/keyReleased events (replaced by `RGFW_keyChar` event)
- add physicalToMapped and mapToPhysical key funcs
- use AdjustWindowRect instead of offset (win32)
- update wayland-scanner system with wayland.mk
- add wl_pointer-warp
- add nativeFormat and callback for color conversion
- add `RGFW_monitor_findClosestMode`
Release: RGFW 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_isKeyDown` if you want to know the current state.
- removed `RGFW_wasMousePressed` (`RGFW_isMouseReleased` / `RGFW_isMouseDown` should be used now)
- removed `RGFW_wasPressed` (`RGFW_isKeyReleased` / `RGFW_isKeyDown` should be used now)
- removed `RGFW_isClicked` (`RGFW_isKeyReleased` should 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_OPENGL` by default and the `RGFW_windowOpenGL` flag is required to create a window with OpenGL
- rename `RGFW_KP_[Key]` keys to `RGFW_kp[Key]`
- rename `RGFW_Multiply` to `RGFW_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_surface` for software rendering rather than `win->buffer`
- remove RGFW_sleep
- remove RGFW_checkFPS
- remove swapBuffers, keep swapBuffers_OpenGL
- remove getTime/setTime
- rename `RGFW_dnd` to `RGFW_drop`
- rename `RGFW_dndInit` to `RGFW_drag`
- rename `RGFW_window_initOpenGL`/`RGFW_window_freeOpenGL` to `RGFW_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_eventWait` to `RGFW_waitForEvent`
- rename`RGFW_window_checkEvent` polls the uses `RGFW_window_pollEvents` and then uses the event queue to get an event
- replace `RGFW_window_checkEvents` with `RGFW_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.h` isn'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_windowNoInitAPI` with `RGFW_windowOpenGL` and `RGFW_windowEGL` to create an OpenGL or EGL window respectively.
- remove `RGFW_windowOpenGLSoftware` in favor of an opengl context flag
- cut `RGFW_getScreenSize` in favor of fetching the window or primary monitor
- replace `RGFW_setHint`/RGFW_glHint` with single struct `RGFW_glHints` used in `createContext` EGL/OpenGL functions
- rename examples to be more clear
- rename `drag.droppedFiles` to `drag.files` and `drag.droppedFilesCount` to `drag.count`
- rename+change behavior for keyboard and mouse events (pressed, released, down)
- remove `RGFW_windowCocoaCHDirToRes` flag in favor of `RGFW_moveToMacOSResourceDir` function
- remove internal OS Mesa support
- remove RGFW_BUFFER/window.buffer and add `RGFW_window_initBufferPtr`, `RGFW_window_copyBuffer` and `RGFW_window_freeBuffer`
- cut gamepad support and add `minigamepad.h` to the gamepad example
- add `RGFW_window_isKey[X]` and `RGFW_windowIsMouse[X]`, and remove the `RGFW_window` argument from the original functions
- add `RGFW_windowUseEGL` flag 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_window` and `RGFW_info` structs to be obfuscated
- add functions for interacting with the `RGFW_window` struct 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_createWindowPtr` and `RGFW_freeWindowPtr` to 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_gfxContextType` and `RGFW_window_src.gfxType` to identify what type of context we're using and if the context was allocated by RGFW.
New Features:
-------
- add `RGFW_window_getEnabledEvents`, `RGFW_window_setDisabledEvents` and `RGFW_window_setDisabledEvents`
- add RGFW_extensionSupported
- add `RGFW_enter`, `RGFW_printScreen`, `RGFW_F13` - `RGFW_F25`, `RGFW_kpEqual`,`RGFW_menu`, `RGFW_word1`, `RGFW_world2` and `RGFW_pause` keycodes
- make in header documentation better and more descriptive
- `RGFW_EGL` can be used along side native `RGFW_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_OpenGL ` and `RGFW_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_MEMCPY` with `RGFW_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_getMouseScroll` function
- add RGFW_mouseScroll event
- add `RGFW_getMouseVector`
- remove `RGFW_NO_API` because 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 into `standard-mouse-icons/icons`, `gl11/gl11` `custom_alloc/custom_alloc`
- remove `icons/icons`, split into `mouse-icons/icons` and `window-icons-icons`
- rename `events/events` to `event_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_window* win);`
- add `u64 RGFW_window_getWindow_X11(RGFW_window* win);`
- add `struct wl_surface* RGFW_window_getWindow_Wayland(RGFW_window* win);`
- add RGFW_MEMSET
- if `RGFW_EXPORT` or `RGFW_IMPORT` is defined, default to a blank RGFWDEF if RGFWDEF is not set
- some of the RGFW_sendDebugInfo error messages have had their first letter capitalized as well have been made to end with a punctuation dot.
- update RGFW website
- added an assertion for RGFW_setGLHint.
- reset keypress data on refocus
- handle window resizing (wayland)
- add RGFW_PRINTF and RGFW_SNPRINTF
- added a generic error code RGFW_errNoMem
- initialize glstencil and glsamples to 0
- add EGL example
- add _EGL functions for using EGL (e.g. `RGFW_window_swapBuffers_EGL`)
- RGFW_window_swapBuffers-> RGFW_window_swapBuffers_OpenGL
- add `RGFW_window_getOSXView`
- add `RGFW_glContext`, return `RGFW_glContext*` if the user chooses to manually create a context
- add `RGFW_glShareWithCurrentContext` OpenGL hint for context sharing
- add `RGFW_WEBGPU` for Linux, MacOS, Windows AND Web
- add `RGFW_eventFlag`, an enum of flags for all the RGFW events
- add `RGFW_window_setEnabledEvents` / `RGFW_window._enabledEvents` to set what events you want
- update backends to use `RGFW_eventFlag` to check if an internal event should be processing it before processing it
- add `RGFW_window_pollEvents`, cycles through ALL of the events WITHOUT STOPPING
- add RGFW_window_checkQueuedEvent
- add RGFW_window_getFlags
- add `RGFW_windowClosePtr` for close the window without attempting to free the function pointer (rather than RGFW attempting to keep track of who owns the RGFW_window data)
- add `RGFW_surface_freePtr`
- add get/set functions for the few elements of RGFW_window, (userPtr, rect and exitKey)
- add `RGFW_window_createContextPtr_OpenGL` / `RGFW_window_deleteContextPtr_OpenGL` for creating a context with a pointer
- add `RGFW_eglContext`
- add `RGFW_formatARGB8` and `RGFW_formatRGBA8`
- add functions to fetch source API data
- add state-checking example
- make `RGFW_image_copy` a public function
- add `RGFW_glHintsCount` as a proper limit
- add OPTIONAL advanced `RGFW_init` functions and give the user more OPTIONAL control of global vars
- handle X11 errors manually (with a callback)
- Added prefix to wayland functions
- use `XRRConfigCurrentRate` to get the refresh rate rather than using math
- improved internal event queue system
- RGFW_glFinalHint -> RGFW_glHintsCount.
- RGFW_glHintsCount is now the actual maximum count of accepted OpenGL hints, not just a static 32.
- ``RGFW_setGLHint`/`RGFW_getGLHint`` -> `RGFW_setHint_OpenGL` `RGFW_getHint_OpenGL`
- link EGL dynamically and fallback to native OpenGL if it fails to load
- make `RGFW_window_src.ctx` union, `RGFW_gfxContext` of `RGFW_glContext*` and `RGFW_eglContext` so that way it can point to either context (but not both)
- refactor wayland+x11 backend to use function points (when wayland and x11 are used toghther)
- add internal API function `RGFW_createWindowPlatform` and `RGFW_window_closePlatform`
- move `createContext` to the global createWindow function
- define keycodes per platform instead of having 1 generic method
- simplified RGFW_BOOL logic
-----------------------------------------------
Release: RGFW 1.7 (May 6, 2025)
-----------------------------------------------
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_checkFPS` to `RGFW_checkFPS`
- Change `RGFW_window_setShouldClose(RGFW_window)` to `RGFW_window_setShouldClose(RGFW_window, RGFW_BOOL)`
- Rename `RGFW_setMouseNotifyCallBack` → `RGFW_setMouseNotifyCallback`
- Rename `windowResizeCallback` → `windowResizedCallback`
- Rename `windowMoveCallback` → `windowMovedCallback`
- Change return type of `RGFW_getProcAddress` to `RGFW_proc`
- `event.inFocus` removed — use `RGFW_window_isInFocus()` instead
-----------------------------------------------
major changes:
- **Event Queue Rewrite**
- Replace internal event passing system (WASM, WinAPI, macOS) with `RGFW_eventQueuePush` / `RGFW_eventQueuePop`
- **Platform-Independent Timing**
- `RGFW_getTime` and `RGFW_getTimeNS` now platform-independent
- Add `RGFW_setTime` (called with `0` at window init)
- **New OpenGL and Buffer Management**
- Add `RGFW_window_swapBuffers_software` and `RGFW_window_swapBuffers_OpenGL`
- Add `RGFW_window_initOpenGL` and `RGFW_window_freeOpenGL`
- Add `RGFW_proc` typedef and update `RGFW_getProcAddress`
- Default multisampling is now 0 (more consistent with GLFW)
- **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_windowFocus` and `RGFW_windowFocus` flag
- **New Events**
- `RGFW_windowMaximized`
- `RGFW_windowMinimized`
- `RGFW_windowRestored`
- **Cross-Platform Improvements**
- Add `RGFW_init` and `RGFW_deinit`
- Make `CLOCK_MONOTONIC` default where supported
- `BeginPaint`/`EndPaint` now called properly (Windows)
- Fix client area scaling issues (Windows)
- **Monitor and Window Enhancements**
- `RGFW_getMonitors` now takes a `size_t* len` argument
- Better monitor resolution detection
- Fix X11 clipboard and waitEvent bugs
- Add `RGFW_ADVANCED_SMOOTH_RESIZE` (WinAPI, X11)
-----------------------------------------------
all changes:
fixes:
- Fix `RGFW_window_setFlags` overwrite 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` / `EndPaint` used correctly (Windows)
new features:
- Add `RGFW_eventQueuePush` / `RGFW_eventQueuePop`
- Add `RGFW_windowFreeOnClose`
- Add `RGFW_windowFocusOnShow`
- Add `RGFW_window_isInFocus`
- Add `RGFW_windowFocus` flag
- Add `RGFW_windowMaximized`, `RGFW_windowMinimized`, `RGFW_windowRestored` events
- Add `RGFW_ATOF` macro
- Add `RGFW_proc` and 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`, rename `RGFW_X11_DONT_CONVERT_BGR`
- Add fallback for `glXCreateContextAttribsARB`
- Add swapInterval to WGL loading
miscellaneous:
- Only allow transparency if `RGFW_windowTransparent` is enabled
- Make depth default to 24 if transparency is off
- Use `timeEndPeriod` for 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.dll` unless `RGFW_OPENGL` is 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.
Release: RGFW 1.6 (Feb 25, 2025)
-----------------------------------------------
This release has been focused on ensuring feature parity with GLFW, reviewing included features and fixing bugs.
breaking changes:
- Replace `RGFW_window_setBufferPtr` and `RGFW_setBufferSize` with `RGFW_window_initBuffer`, `RGFW_window_initBufferSize` and `RGFW_window_initBufferPtr`
Also forces the user to run `RGFW_window_initBuffer` to allocate a buffer
- add `vector` for raw mouse data (so `point` can 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
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
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_SYSKEYDOWN` and `WM_SYSKEYUP` events (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_allowsDND` and `RGFW_window_mouseHidden` for checking for args
- add flags example
- fix `RGFW_window_setMaxSize` / `RGFW_window_setMinSize` winapi, use `SetPropA` `GetPropA` to get the window in `WndProc`
- 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 `toggleFullScreen` if 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_focus` and `RGFW_window_raise`
- add `RGFW_window_isFloating`and `RGFW_window_setFloating`
- add `RGFW_getCurrent_OpenGL`
- add `RGFW_setXInstName`
- add `RGFW_window_setOpacity`
- add `RGFW_getTimerFreq` and `RGFW_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_setBufferPtr` and `RGFW_setBufferSize` with `RGFW_window_initBuffer`, `RGFW_window_initBufferSize` and `RGFW_window_initBufferPtr`
Also forces the user to run `RGFW_window_initBuffer` to allocate a buffer
- add `vector` for raw mouse data (so `point` can 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`, add `RGFW_BOOL` macro 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
Release: RGFW 1.5 (Jan 14, 2024)
-----------------------------------------------
This may not include all of the changes or breaking changes made.
This is because 1.5 is the first release and I started taking 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 expose functionality better. Later releases will aim to have fewer breaking commits. I wanted to get as many of these changes out of the way 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 a icon from a .rc file
- add RGFW_allocator for runtime changes to 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
- autofree 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 a X11 server)
- Allow the user to switch to wayland/X during runtime (you have to compile with Wayand 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 ctypes (MSVC)
- fix RGFW_window_resize lock (when RGFW_noResize is enabled)
- fix xDND crash
- fix Multi-window bugs (macOS)
- fix event misses when 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, 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 made 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 convert key to 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 use of 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 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
Current Release: RGFW 1.06 (Aug 14, 2024)
-----------------------------------------------
Release: RGFW 1.06 (Aug 14, 2024)
-----------------------------------------------
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
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
-----------------------------------------------
Release: RGFW 1.05 (Jul 24, 2024)
----------------------------------------------
fixes a lot of bugs
general quality of life/code updates
HTML5 backend
raw mouse input
-----------------------------------------------
Release: RGFW 1.05 (Jul 5, 2024)
----------------------------------------------
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.
In later commits, the CHANGELOG will be updated while the release is being worked on.
1.5 also has a lot of breaking changes, this is because these are essential changes for API consisteny and to exposes functionality in better ways. Later releases will aim to have fair less breaking commits. I wanted to get as many of these changes out of the way 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 a icon from a .rc file
- add RGFW_allocator for runtime changes to 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
- autofree 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
bugs:
- Fix GLX runtime errors for certain GPUs
- Fix C++ support, mostly fixes warnings and errors
- fix ctypes, drop support for non stdint ctypes (MSVC)
- fix RGFW_window_resize lock (when RGFW_noResize is enabled)
- fix xDND crash
- fix Multi-window bugs (macOS)
- fix event misses when 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
- 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, 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 made gamepad support more stable overall
- get gamepad count
- RGFW_isPressedGamepad, 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 convert key to 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 use of 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 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
- add RGFW_VK_SURFACE and RGFW_window_createVKSurface directly to RGFW
Current Release: RGFW 1.06 (Aug 14, 2024)
-----------------------------------------------
Release: RGFW 1.06 (Aug 14, 2024)
-----------------------------------------------
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
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
-----------------------------------------------
Release: RGFW 1.05 (Jul 24, 2024)
----------------------------------------------
fixes a lot of bugs
general quality of life/code updates
HTML5 backend
raw mouse input
-----------------------------------------------
Release: RGFW 1.05 (Jul 5, 2024)
----------------------------------------------
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.