1/*!
2
3@page news Release notes
4
5@tableofcontents
6
7
8@section news_33 Release notes for version 3.3
9
10These are the release notes for version 3.3.  For a more detailed view including
11all fixed bugs see the [version history](https://www.glfw.org/changelog.html).
12
13Please review the caveats, deprecations and removals if your project was written
14against an earlier version of GLFW 3.
15
16
17@subsection features_33 New features in version 3.3
18
19@subsubsection gamepad_33 Gamepad input via SDL_GameControllerDB
20
21GLFW can now remap game controllers to a standard Xbox-like layout using
22a built-in copy of SDL_GameControllerDB.  Call @ref glfwJoystickIsGamepad to
23check if a joystick has a mapping, @ref glfwGetGamepadState to retrieve its
24input state, @ref glfwUpdateGamepadMappings to add newer mappings and @ref
25glfwGetGamepadName and @ref glfwGetJoystickGUID for mapping related information.
26
27For more information see @ref gamepad.
28
29
30@subsubsection moltenvk_33 Support for Vulkan on macOS via MoltenVK
31
32GLFW now supports [MoltenVK](https://moltengl.com/moltenvk/), a Vulkan
33implementation on top of the Metal API, and its `VK_MVK_macos_surface` window
34surface creation extension.  MoltenVK is included in the [macOS Vulkan
35SDK](https://vulkan.lunarg.com/).
36
37For more information see @ref vulkan_guide.
38
39
40@subsubsection content_scale_33 Content scale queries for DPI-aware rendering
41
42GLFW now provides content scales for windows and monitors, i.e. the ratio
43between their current DPI and the platform's default DPI, with @ref
44glfwGetWindowContentScale and @ref glfwGetMonitorContentScale.
45
46Changes of the content scale of a window can be received with the window content
47scale callback, set with @ref glfwSetWindowContentScaleCallback.
48
49The @ref GLFW_SCALE_TO_MONITOR window hint enables automatic resizing of a
50window by the content scale of the monitor it is placed, on platforms like
51Windows where this is necessary.  This takes effect both on creation and when
52the window is moved between monitors.  It is related to but different from
53[GLFW_COCOA_RETINA_FRAMEBUFFER](@ref GLFW_COCOA_RETINA_FRAMEBUFFER_hint).
54
55For more information see @ref window_scale.
56
57
58@subsubsection setwindowattrib_33 Support for updating window attributes
59
60GLFW now supports changing the [GLFW_DECORATED](@ref GLFW_DECORATED_attrib),
61[GLFW_RESIZABLE](@ref GLFW_RESIZABLE_attrib),
62[GLFW_FLOATING](@ref GLFW_FLOATING_attrib),
63[GLFW_AUTO_ICONIFY](@ref GLFW_AUTO_ICONIFY_attrib) and
64[GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_attrib) attributes for existing
65windows with @ref glfwSetWindowAttrib.
66
67For more information see @ref window_attribs.
68
69
70@subsubsection raw_motion_33 Support for raw mouse motion
71
72GLFW now supports raw (unscaled and unaccelerated) mouse motion in disabled
73cursor mode with the [GLFW_RAW_MOUSE_MOTION](@ref GLFW_RAW_MOUSE_MOTION) input
74mode.  Raw mouse motion input is not yet implemented on macOS.  Call @ref
75glfwRawMouseMotionSupported to check if GLFW can provide raw mouse motion on the
76current system.
77
78For more information see @ref raw_mouse_motion.
79
80
81@subsubsection joysticks_33 Joystick hats
82
83GLFW can now return the state of hats (i.e. POVs or D-pads) of a joystick with
84@ref glfwGetJoystickHats.  For compatibility, hats are also exposed as buttons.
85This can be disabled with the @ref GLFW_JOYSTICK_HAT_BUTTONS initialization
86hint.
87
88For more information see @ref joystick_hat.
89
90
91@subsubsection geterror_33 Error query
92
93GLFW now supports querying the last error code for the calling thread and its
94human-readable description with @ref glfwGetError.  This can be used instead of
95or together with the error callback.
96
97For more information see @ref error_handling.
98
99
100@subsubsection init_hints_33 Support for initialization hints
101
102GLFW now supports setting library initialization hints with @ref glfwInitHint.
103These must be set before initialization to take effect.  Some of these hints are
104platform specific but are safe to set on any platform.
105
106For more information see @ref init_hints.
107
108
109@subsubsection attention_33 User attention request
110
111GLFW now supports requesting user attention with @ref
112glfwRequestWindowAttention.  Where possible this calls attention to the
113specified window.  On platforms like macOS it calls attention to the whole
114application.
115
116For more information see @ref window_attention.
117
118
119@subsubsection maximize_33 Window maximization callback
120
121GLFW now supports notifying the application that the window has been maximized
122@ref glfwSetWindowMaximizeCallback.  This is called both when the window was
123maximized by the user and when it was done with @ref glfwMaximizeWindow.
124
125For more information see @ref window_maximize.
126
127
128@subsubsection workarea_33 Query for the monitor work area
129
130GLFW now supports querying the work area of a monitor, i.e. the area not
131occupied by task bars or global menu bars, with @ref glfwGetMonitorWorkarea.  On
132platforms that lack this concept, the whole area of the monitor is returned.
133
134For more information see @ref monitor_workarea.
135
136
137@subsubsection transparency_33 Transparent windows and framebuffers
138
139GLFW now supports the creation of windows with transparent framebuffers on
140systems with desktop compositing enabled with the @ref
141GLFW_TRANSPARENT_FRAMEBUFFER window hint and attribute.  This hint must be set
142before window creation and leaves any window decorations opaque.
143
144GLFW now also supports whole window transparency with @ref glfwGetWindowOpacity
145and @ref glfwSetWindowOpacity.  This value controls the opacity of the whole
146window including decorations and unlike framebuffer transparency can be changed
147at any time after window creation.
148
149For more information see @ref window_transparency.
150
151
152@subsubsection key_scancode_33 Query for the scancode of a key
153
154GLFW now supports querying the platform dependent scancode of any physical key
155with @ref glfwGetKeyScancode.
156
157For more information see @ref input_key.
158
159
160@subsubsection center_cursor_33 Cursor centering window hint
161
162GLFW now supports controlling whether the cursor is centered over newly created
163full screen windows with the [GLFW_CENTER_CURSOR](@ref GLFW_CENTER_CURSOR_hint)
164window hint.  It is enabled by default.
165
166
167@subsubsection cursor_hover_33 Mouse cursor hover window attribute
168
169GLFW now supports polling whether the cursor is hovering over the window content
170area with the [GLFW_HOVERED](@ref GLFW_HOVERED_attrib) window attribute.  This
171attribute corresponds to the [cursor enter/leave](@ref cursor_enter) event.
172
173
174@subsubsection focusonshow_33 Window hint and attribute for input focus on show
175
176GLFW now has the [GLFW_FOCUS_ON_SHOW](@ref GLFW_DECORATED_hint) window hint and
177attribute for controlling whether a window gets input focus when shown.  It is
178enabled by default.  It applies both when creating an visible window with @ref
179glfwCreateWindow and when showing it with @ref glfwShowWindow.
180
181This is a workaround for GLFW 3.0 lacking @ref glfwFocusWindow and will be
182corrected in the next major version.
183
184For more information see @ref window_hide.
185
186
187@subsubsection device_userptr_33 Monitor and joystick user pointers
188
189GLFW now supports setting and querying user pointers for connected monitors and
190joysticks with @ref glfwSetMonitorUserPointer, @ref glfwGetMonitorUserPointer,
191@ref glfwSetJoystickUserPointer and @ref glfwGetJoystickUserPointer.
192
193For more information see @ref monitor_userptr and @ref joystick_userptr.
194
195
196@subsubsection macos_nib_33 macOS menu bar from nib file
197
198GLFW will now load a `MainMenu.nib` file if found in the `Contents/Resources`
199directory of the application bundle, as a way to replace the GLFW menu bar
200without recompiling GLFW.  This behavior can be disabled with the
201[GLFW_COCOA_MENUBAR](@ref GLFW_COCOA_MENUBAR_hint) initialization hint.
202
203
204@subsubsection glext_33 Support for more context creation extensions
205
206The context hint @ref GLFW_SRGB_CAPABLE now supports OpenGL ES via
207`WGL_EXT_colorspace`, the context hint @ref GLFW_CONTEXT_NO_ERROR now supports
208`WGL_ARB_create_context_no_error` and `GLX_ARB_create_context_no_error`, the
209context hint @ref GLFW_CONTEXT_RELEASE_BEHAVIOR now supports
210`EGL_KHR_context_flush_control` and @ref glfwGetProcAddress now supports
211`EGL_KHR_get_all_proc_addresses`.
212
213
214@subsubsection osmesa_33 OSMesa off-screen context creation support
215
216GLFW now supports creating off-screen OpenGL contexts using
217[OSMesa](https://www.mesa3d.org/osmesa.html) by setting
218[GLFW_CONTEXT_CREATION_API](@ref GLFW_CONTEXT_CREATION_API_hint) to
219`GLFW_OSMESA_CONTEXT_API`.  Native access function have been added to retrieve
220the OSMesa color and depth buffers.
221
222There is also a new null backend that uses OSMesa as its native context
223creation API, intended for automated testing.  This backend does not provide
224input.
225
226
227@subsection caveats_33 Caveats for version 3.3
228
229@subsubsection joystick_layout_33 Layout of joysticks have changed
230
231The way joystick elements are arranged have changed to match SDL2 in order to
232support SDL_GameControllerDB mappings.  The layout of joysticks may
233change again if required for compatibility with SDL2.  If you need a known and
234stable layout for game controllers, see if you can switch to @ref gamepad.
235
236Existing code that depends on a specific joystick layout will likely have to be
237updated.
238
239
240@subsubsection wait_events_33 No window required to wait for events
241
242The @ref glfwWaitEvents and @ref glfwWaitEventsTimeout functions no longer need
243a window to be created to wait for events.  Before version 3.3 these functions
244would return immediately if there were no user-created windows.  On platforms
245where only windows can receive events, an internal helper window is used.
246
247Existing code that depends on the earlier behavior will likely have to be
248updated.
249
250
251@subsubsection gamma_ramp_size_33 Gamma ramp size of 256 may be rejected
252
253The documentation for versions before 3.3 stated that a gamma ramp size of 256
254would always be accepted.  This was never the case on X11 and could lead to
255artifacts on macOS.  The @ref glfwSetGamma function has been updated to always
256generate a ramp of the correct size.
257
258Existing code that hardcodes a size of 256 should be updated to use the size of
259the current ramp of a monitor when setting a new ramp for that monitor.
260
261
262@subsubsection xinput_deadzone_33 Windows XInput deadzone removed
263
264GLFW no longer applies any deadzone to the input state received from the XInput
265API.  This was never done for any other platform joystick API so this change
266makes the behavior more consistent but you will need to apply your own deadzone
267if desired.
268
269
270@subsubsection x11_clipboard_33 X11 clipboard transfer limits
271
272GLFW now supports reading clipboard text via the `INCR` method, which removes
273the limit on how much text can be read with @ref glfwGetClipboardString.
274However, writing via this method is not yet supported, so you may not be able to
275write a very large string with @ref glfwSetClipboardString even if you read it
276from the clipboard earlier.
277
278The exact size limit for writing to the clipboard is negotiated with each
279receiving application but is at least several tens of kilobytes.  Note that only
280the read limit has changed.  Any string that could be written before still can
281be.
282
283
284@subsubsection x11_linking_33 X11 extension libraries are loaded dynamically
285
286GLFW now loads all X11 extension libraries at initialization.  The only X11
287library you need to link against is `libX11`.  The header files for the
288extension libraries are still required for compilation.
289
290Existing projects and makefiles that link GLFW directly against the extension
291libraries should still build correctly but will add these libraries as load-time
292dependencies.
293
294
295@subsubsection cmake_version_33 CMake 3.0 or later is required
296
297The minimum CMake version has been raised from 2.8.12 to 3.0.  This is only
298a requirement of the GLFW CMake files.  The GLFW source files do not depend on
299CMake.
300
301
302@subsection deprecations_33 Deprecations in version 3.3
303
304@subsubsection charmods_callback_33 Character with modifiers callback
305
306The character with modifiers callback set with @ref glfwSetCharModsCallback has
307been deprecated and should if possible not be used.
308
309Existing code should still work but further bug fixes will likely not be made.
310The callback will be removed in the next major version.
311
312
313@subsubsection clipboard_window_33 Window parameter to clipboard functions
314
315The window parameter of the clipboard functions @ref glfwGetClipboardString and
316@ref glfwSetClipboardString has been deprecated and is no longer used on any
317platform.  On platforms where the clipboard must be owned by a specific window,
318an internal helper window is used.
319
320Existing code should still work unless it depends on a specific window owning
321the clipboard.  New code may pass `NULL` as the window argument.  The parameter
322will be removed in a future release.
323
324
325@subsection removals_33 Removals in 3.3
326
327@subsubsection macos_options_33 macOS specific CMake options and macros
328
329The `GLFW_USE_RETINA`, `GLFW_USE_CHDIR` and `GLFW_USE_MENUBAR` CMake options and
330the `_GLFW_USE_RETINA`, `_GLFW_USE_CHDIR` and `_GLFW_USE_MENUBAR` compile-time
331macros have been removed.
332
333These options and macros are replaced by the window hint
334[GLFW_COCOA_RETINA_FRAMEBUFFER](@ref GLFW_COCOA_RETINA_FRAMEBUFFER_hint)
335and the init hints
336[GLFW_COCOA_CHDIR_RESOURCES](@ref GLFW_COCOA_CHDIR_RESOURCES_hint) and
337[GLFW_COCOA_MENUBAR](@ref GLFW_COCOA_MENUBAR_hint).
338
339Existing projects and makefiles that set these options or define these macros
340during compilation of GLFW will still build but it will have no effect and the
341default behaviors will be used.
342
343
344@subsubsection vulkan_sdk_33 LunarG Vulkan SDK dependency
345
346The GLFW test programs that previously depended on the LunarG Vulkan SDK now
347instead uses a Vulkan loader generated by
348[glad2](https://github.com/Dav1dde/glad).  This means the GLFW CMake files no
349longer look for the Vulkan SDK.
350
351Existing CMake projects that depended on the Vulkan SDK cache variables from
352GLFW will need to call `find_package(Vulkan)` themselves.  CMake 3.7 and later
353already comes with a
354[Vulkan find module](https://cmake.org/cmake/help/latest/module/FindVulkan.html)
355similar to the one GLFW previously included.
356
357
358@subsubsection lib_suffix_33 CMake option LIB_SUFFIX
359
360The `LIB_SUFFIX` CMake option has been removed.  GLFW now uses the
361GNUInstallDirs CMake package to handle platform specific details like the
362library directory suffix and the `LIB_SUFFIX` CMake option has been removed.
363
364Existing projects and makefiles that set the `LIB_SUFFIX` option will use the
365suffix chosen by the GNUInstallDirs package and the option will be ignored.
366
367
368@subsubsection mir_removed_33 Mir support
369
370The experimental Mir support has been completely removed as the Mir project has
371implemented support for the Wayland protocol and is recommending that
372applications use that instead.
373
374Existing projects and makefiles that select Mir when compiling GLFW will fail.
375Use Wayland or X11 instead.
376
377
378@subsection symbols_33 New symbols in version 3.3
379
380@subsubsection functions_33 New functions in version 3.3
381
382 - @ref glfwInitHint
383 - @ref glfwGetError
384 - @ref glfwGetMonitorWorkarea
385 - @ref glfwGetMonitorContentScale
386 - @ref glfwGetMonitorUserPointer
387 - @ref glfwSetMonitorUserPointer
388 - @ref glfwWindowHintString
389 - @ref glfwGetWindowContentScale
390 - @ref glfwGetWindowOpacity
391 - @ref glfwSetWindowOpacity
392 - @ref glfwRequestWindowAttention
393 - @ref glfwSetWindowAttrib
394 - @ref glfwSetWindowMaximizeCallback
395 - @ref glfwSetWindowContentScaleCallback
396 - @ref glfwRawMouseMotionSupported
397 - @ref glfwGetKeyScancode
398 - @ref glfwGetJoystickHats
399 - @ref glfwGetJoystickGUID
400 - @ref glfwGetJoystickUserPointer
401 - @ref glfwSetJoystickUserPointer
402 - @ref glfwJoystickIsGamepad
403 - @ref glfwUpdateGamepadMappings
404 - @ref glfwGetGamepadName
405 - @ref glfwGetGamepadState
406
407
408@subsubsection types_33 New types in version 3.3
409
410 - @ref GLFWwindowmaximizefun
411 - @ref GLFWwindowcontentscalefun
412 - @ref GLFWgamepadstate
413
414
415@subsubsection constants_33 New constants in version 3.3
416
417 - @ref GLFW_NO_ERROR
418 - @ref GLFW_JOYSTICK_HAT_BUTTONS
419 - @ref GLFW_COCOA_CHDIR_RESOURCES
420 - @ref GLFW_COCOA_MENUBAR
421 - @ref GLFW_CENTER_CURSOR
422 - @ref GLFW_TRANSPARENT_FRAMEBUFFER
423 - @ref GLFW_HOVERED
424 - @ref GLFW_FOCUS_ON_SHOW
425 - @ref GLFW_SCALE_TO_MONITOR
426 - @ref GLFW_COCOA_RETINA_FRAMEBUFFER
427 - @ref GLFW_COCOA_FRAME_NAME
428 - @ref GLFW_COCOA_GRAPHICS_SWITCHING
429 - @ref GLFW_X11_CLASS_NAME
430 - @ref GLFW_X11_INSTANCE_NAME
431 - @ref GLFW_OSMESA_CONTEXT_API
432 - @ref GLFW_HAT_CENTERED
433 - @ref GLFW_HAT_UP
434 - @ref GLFW_HAT_RIGHT
435 - @ref GLFW_HAT_DOWN
436 - @ref GLFW_HAT_LEFT
437 - @ref GLFW_HAT_RIGHT_UP
438 - @ref GLFW_HAT_RIGHT_DOWN
439 - @ref GLFW_HAT_LEFT_UP
440 - @ref GLFW_HAT_LEFT_DOWN
441 - @ref GLFW_MOD_CAPS_LOCK
442 - @ref GLFW_MOD_NUM_LOCK
443 - @ref GLFW_LOCK_KEY_MODS
444 - @ref GLFW_RAW_MOUSE_MOTION
445 - @ref GLFW_GAMEPAD_BUTTON_A
446 - @ref GLFW_GAMEPAD_BUTTON_B
447 - @ref GLFW_GAMEPAD_BUTTON_X
448 - @ref GLFW_GAMEPAD_BUTTON_Y
449 - @ref GLFW_GAMEPAD_BUTTON_LEFT_BUMPER
450 - @ref GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER
451 - @ref GLFW_GAMEPAD_BUTTON_BACK
452 - @ref GLFW_GAMEPAD_BUTTON_START
453 - @ref GLFW_GAMEPAD_BUTTON_GUIDE
454 - @ref GLFW_GAMEPAD_BUTTON_LEFT_THUMB
455 - @ref GLFW_GAMEPAD_BUTTON_RIGHT_THUMB
456 - @ref GLFW_GAMEPAD_BUTTON_DPAD_UP
457 - @ref GLFW_GAMEPAD_BUTTON_DPAD_RIGHT
458 - @ref GLFW_GAMEPAD_BUTTON_DPAD_DOWN
459 - @ref GLFW_GAMEPAD_BUTTON_DPAD_LEFT
460 - @ref GLFW_GAMEPAD_BUTTON_LAST
461 - @ref GLFW_GAMEPAD_BUTTON_CROSS
462 - @ref GLFW_GAMEPAD_BUTTON_CIRCLE
463 - @ref GLFW_GAMEPAD_BUTTON_SQUARE
464 - @ref GLFW_GAMEPAD_BUTTON_TRIANGLE
465 - @ref GLFW_GAMEPAD_AXIS_LEFT_X
466 - @ref GLFW_GAMEPAD_AXIS_LEFT_Y
467 - @ref GLFW_GAMEPAD_AXIS_RIGHT_X
468 - @ref GLFW_GAMEPAD_AXIS_RIGHT_Y
469 - @ref GLFW_GAMEPAD_AXIS_LEFT_TRIGGER
470 - @ref GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER
471 - @ref GLFW_GAMEPAD_AXIS_LAST
472
473
474@section news_32 Release notes for 3.2
475
476These are the release notes for version 3.2.  For a more detailed view including
477all fixed bugs see the [version history](https://www.glfw.org/changelog.html).
478
479
480@subsection features_32 New features in version 3.2
481
482@subsubsection news_32_vulkan Support for Vulkan
483
484GLFW now supports basic integration with Vulkan with @ref glfwVulkanSupported,
485@ref glfwGetRequiredInstanceExtensions, @ref glfwGetInstanceProcAddress, @ref
486glfwGetPhysicalDevicePresentationSupport and @ref glfwCreateWindowSurface.
487Vulkan header inclusion can be selected with
488@ref GLFW_INCLUDE_VULKAN.
489
490
491@subsubsection news_32_setwindowmonitor Window mode switching
492
493GLFW now supports switching between windowed and full screen modes and updating
494the monitor and desired resolution and refresh rate of full screen windows with
495@ref glfwSetWindowMonitor.
496
497
498@subsubsection news_32_maximize Window maxmimization support
499
500GLFW now supports window maximization with @ref glfwMaximizeWindow and the
501@ref GLFW_MAXIMIZED window hint and attribute.
502
503
504@subsubsection news_32_focus Window input focus control
505
506GLFW now supports giving windows input focus with @ref glfwFocusWindow.
507
508
509@subsubsection news_32_sizelimits Window size limit support
510
511GLFW now supports setting both absolute and relative window size limits with
512@ref glfwSetWindowSizeLimits and @ref glfwSetWindowAspectRatio.
513
514
515@subsubsection news_32_keyname Localized key names
516
517GLFW now supports querying the localized name of printable keys with @ref
518glfwGetKeyName, either by key token or by scancode.
519
520
521@subsubsection news_32_waittimeout Wait for events with timeout
522
523GLFW now supports waiting for events for a set amount of time with @ref
524glfwWaitEventsTimeout.
525
526
527@subsubsection news_32_icon Window icon support
528
529GLFW now supports setting the icon of windows with @ref glfwSetWindowIcon.
530
531
532@subsubsection news_32_timer Raw timer access
533
534GLFW now supports raw timer values with @ref glfwGetTimerValue and @ref
535glfwGetTimerFrequency.
536
537
538@subsubsection news_32_joystick Joystick connection callback
539
540GLFW now supports notifying when a joystick has been connected or disconnected
541with @ref glfwSetJoystickCallback.
542
543
544@subsubsection news_32_noapi Context-less windows
545
546GLFW now supports creating windows without a OpenGL or OpenGL ES context by
547setting the [GLFW_CLIENT_API](@ref GLFW_CLIENT_API_hint) hint to `GLFW_NO_API`.
548
549
550@subsubsection news_32_contextapi Run-time context creation API selection
551
552GLFW now supports selecting and querying the context creation API at run-time
553with the @ref GLFW_CONTEXT_CREATION_API hint and attribute.
554
555
556@subsubsection news_32_noerror Error-free context creation
557
558GLFW now supports creating and querying OpenGL and OpenGL ES contexts that do
559not emit errors with the @ref GLFW_CONTEXT_NO_ERROR hint, provided the machine
560supports the `GL_KHR_no_error` extension.
561
562
563@subsubsection news_32_cmake CMake config-file package support
564
565GLFW now supports being used as a
566[config-file package](@ref build_link_cmake_package) from other projects for
567easy linking with the library and its dependencies.
568
569
570@section news_31 Release notes for 3.1
571
572These are the release notes for version 3.1.  For a more detailed view including
573all fixed bugs see the [version history](https://www.glfw.org/changelog.html).
574
575
576@subsection features_31 New features in version 3.1
577
578@subsubsection news_31_cursor Custom mouse cursor images
579
580GLFW now supports creating and setting both custom cursor images and standard
581cursor shapes.  They are created with @ref glfwCreateCursor or @ref
582glfwCreateStandardCursor, set with @ref glfwSetCursor and destroyed with @ref
583glfwDestroyCursor.
584
585@see @ref cursor_object
586
587
588@subsubsection news_31_drop Path drop event
589
590GLFW now provides a callback for receiving the paths of files and directories
591dropped onto GLFW windows.  The callback is set with @ref glfwSetDropCallback.
592
593@see @ref path_drop
594
595
596@subsubsection news_31_emptyevent Main thread wake-up
597
598GLFW now provides the @ref glfwPostEmptyEvent function for posting an empty
599event from another thread to the main thread event queue, causing @ref
600glfwWaitEvents to return.
601
602@see @ref events
603
604
605@subsubsection news_31_framesize Window frame size query
606
607GLFW now supports querying the size, on each side, of the frame around the
608content area of a window, with @ref glfwGetWindowFrameSize.
609
610@see [Window size](@ref window_size)
611
612
613@subsubsection news_31_autoiconify Simultaneous multi-monitor rendering
614
615GLFW now supports disabling auto-iconification of full screen windows with
616the [GLFW_AUTO_ICONIFY](@ref GLFW_AUTO_ICONIFY_hint) window hint.  This is
617intended for people building multi-monitor installations, where you need windows
618to stay in full screen despite losing input focus.
619
620
621@subsubsection news_31_floating Floating windows
622
623GLFW now supports floating windows, also called topmost or always on top, for
624easier debugging with the @ref GLFW_FLOATING window hint and attribute.
625
626
627@subsubsection news_31_focused Initially unfocused windows
628
629GLFW now supports preventing a windowed mode window from gaining input focus on
630creation, with the [GLFW_FOCUSED](@ref GLFW_FOCUSED_hint) window hint.
631
632
633@subsubsection news_31_direct Direct access for window attributes and cursor position
634
635GLFW now queries the window input focus, visibility and iconification attributes
636and the cursor position directly instead of returning cached data.
637
638
639@subsubsection news_31_charmods Character with modifiers callback
640
641GLFW now provides a callback for character events with modifier key bits.  The
642callback is set with @ref glfwSetCharModsCallback.  Unlike the regular character
643callback, this will report character events that will not result in a character
644being input, for example if the Control key is held down.
645
646@see @ref input_char
647
648
649@subsubsection news_31_single Single buffered framebuffers
650
651GLFW now supports the creation of single buffered windows, with the @ref
652GLFW_DOUBLEBUFFER hint.
653
654
655@subsubsection news_31_glext Macro for including extension header
656
657GLFW now includes the extension header appropriate for the chosen OpenGL or
658OpenGL ES header when @ref GLFW_INCLUDE_GLEXT is defined.  GLFW does not provide
659these headers.  They must be provided by your development environment or your
660OpenGL or OpenGL ES SDK.
661
662
663@subsubsection news_31_release Context release behaviors
664
665GLFW now supports controlling and querying whether the pipeline is flushed when
666a context is made non-current, with the @ref GLFW_CONTEXT_RELEASE_BEHAVIOR hint
667and attribute, provided the machine supports the `GL_KHR_context_flush_control`
668extension.
669
670
671@subsubsection news_31_wayland (Experimental) Wayland support
672
673GLFW now has an _experimental_ Wayland display protocol backend that can be
674selected on Linux with a CMake option.
675
676
677@subsubsection news_31_mir (Experimental) Mir support
678
679GLFW now has an _experimental_ Mir display server backend that can be selected
680on Linux with a CMake option.
681
682
683@section news_30 Release notes for 3.0
684
685These are the release notes for version 3.0.  For a more detailed view including
686all fixed bugs see the [version history](https://www.glfw.org/changelog.html).
687
688
689@subsection features_30 New features in version 3.0
690
691@subsubsection news_30_cmake CMake build system
692
693GLFW now uses the CMake build system instead of the various makefiles and
694project files used by earlier versions.  CMake is available for all platforms
695supported by GLFW, is present in most package systems and can generate
696makefiles and/or project files for most popular development environments.
697
698For more information on how to use CMake, see the
699[CMake manual](https://cmake.org/cmake/help/documentation.html).
700
701
702@subsubsection news_30_multiwnd Multi-window support
703
704GLFW now supports the creation of multiple windows, each with their own OpenGL
705or OpenGL ES context, and all window functions now take a window handle.  Event
706callbacks are now per-window and are provided with the handle of the window that
707received the event.  The @ref glfwMakeContextCurrent function has been added to
708select which context is current on a given thread.
709
710
711@subsubsection news_30_multimon Multi-monitor support
712
713GLFW now explicitly supports multiple monitors.  They can be enumerated with
714@ref glfwGetMonitors, queried with @ref glfwGetVideoModes, @ref
715glfwGetMonitorPos, @ref glfwGetMonitorName and @ref glfwGetMonitorPhysicalSize,
716and specified at window creation to make the newly created window full screen on
717that specific monitor.
718
719
720@subsubsection news_30_unicode Unicode support
721
722All string arguments to GLFW functions and all strings returned by GLFW now use
723the UTF-8 encoding.  This includes the window title, error string, clipboard
724text, monitor and joystick names as well as the extension function arguments (as
725ASCII is a subset of UTF-8).
726
727
728@subsubsection news_30_clipboard Clipboard text I/O
729
730GLFW now supports reading and writing plain text to and from the system
731clipboard, with the @ref glfwGetClipboardString and @ref glfwSetClipboardString
732functions.
733
734
735@subsubsection news_30_gamma Gamma ramp support
736
737GLFW now supports setting and reading back the gamma ramp of monitors, with the
738@ref glfwGetGammaRamp and @ref glfwSetGammaRamp functions.  There is also @ref
739glfwSetGamma, which generates a ramp from a gamma value and then sets it.
740
741
742@subsubsection news_30_gles OpenGL ES support
743
744GLFW now supports the creation of OpenGL ES contexts, by setting the
745[GLFW_CLIENT_API](@ref GLFW_CLIENT_API_hint) hint to `GLFW_OPENGL_ES_API`, where
746creation of such contexts are supported.  Note that GLFW _does not implement_
747OpenGL ES, so your driver must provide support in a way usable by GLFW.  Modern
748Nvidia and Intel drivers support creation of OpenGL ES context using the GLX and
749WGL APIs, while AMD provides an EGL implementation instead.
750
751
752@subsubsection news_30_egl (Experimental) EGL support
753
754GLFW now has an experimental EGL context creation back end that can be selected
755through CMake options.
756
757
758@subsubsection news_30_hidpi High-DPI support
759
760GLFW now supports high-DPI monitors on both Windows and macOS, giving windows
761full resolution framebuffers where other UI elements are scaled up.  To achieve
762this, @ref glfwGetFramebufferSize and @ref glfwSetFramebufferSizeCallback have
763been added.  These work with pixels, while the rest of the GLFW API works with
764screen coordinates.  This is important as OpenGL uses pixels, not screen
765coordinates.
766
767
768@subsubsection news_30_error Error callback
769
770GLFW now has an error callback, which can provide your application with much
771more detailed diagnostics than was previously possible.  The callback is passed
772an error code and a description string.
773
774
775@subsubsection news_30_wndptr Per-window user pointer
776
777Each window now has a user-defined pointer, retrieved with @ref
778glfwGetWindowUserPointer and set with @ref glfwSetWindowUserPointer, to make it
779easier to integrate GLFW into C++ code.
780
781
782@subsubsection news_30_iconifyfun Window iconification callback
783
784Each window now has a callback for iconification and restoration events,
785which is set with @ref glfwSetWindowIconifyCallback.
786
787
788@subsubsection news_30_wndposfun Window position callback
789
790Each window now has a callback for position events, which is set with @ref
791glfwSetWindowPosCallback.
792
793
794@subsubsection news_30_wndpos Window position query
795
796The position of a window can now be retrieved using @ref glfwGetWindowPos.
797
798
799@subsubsection news_30_focusfun Window focus callback
800
801Each windows now has a callback for focus events, which is set with @ref
802glfwSetWindowFocusCallback.
803
804
805@subsubsection news_30_enterleave Cursor enter/leave callback
806
807Each window now has a callback for when the mouse cursor enters or leaves its
808content area, which is set with @ref glfwSetCursorEnterCallback.
809
810
811@subsubsection news_30_wndtitle Initial window title
812
813The title of a window is now specified at creation time, as one of the arguments
814to @ref glfwCreateWindow.
815
816
817@subsubsection news_30_hidden Hidden windows
818
819Windows can now be hidden with @ref glfwHideWindow, shown using @ref
820glfwShowWindow and created initially hidden with the @ref GLFW_VISIBLE window
821hint and attribute.  This allows for off-screen rendering in a way compatible
822with most drivers, as well as moving a window to a specific position before
823showing it.
824
825
826@subsubsection news_30_undecorated Undecorated windows
827
828Windowed mode windows can now be created without decorations, e.g. things like
829a frame, a title bar, with the @ref GLFW_DECORATED window hint and attribute.
830This allows for the creation of things like splash screens.
831
832
833@subsubsection news_30_keymods Modifier key bit masks
834
835[Modifier key bit mask](@ref mods) parameters have been added to the
836[mouse button](@ref GLFWmousebuttonfun) and [key](@ref GLFWkeyfun) callbacks.
837
838
839@subsubsection news_30_scancode Platform-specific scancodes
840
841A scancode parameter has been added to the [key callback](@ref GLFWkeyfun). Keys
842that don't have a [key token](@ref keys) still get passed on with the key
843parameter set to `GLFW_KEY_UNKNOWN`.  These scancodes will vary between machines
844and are intended to be used for key bindings.
845
846
847@subsubsection news_30_jsname Joystick names
848
849The name of a joystick can now be retrieved using @ref glfwGetJoystickName.
850
851
852@subsubsection news_30_doxygen Doxygen documentation
853
854You are reading it.
855
856*/
857