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