mirror of
https://github.com/glfw/glfw.git
synced 2024-11-10 00:51:47 +00:00
1fb7f0e120
Resolves #2235 Co-authored-by: mightgoyardstill <mightgoyardstill@users.noreply.github.com>
334 lines
12 KiB
Markdown
334 lines
12 KiB
Markdown
# Release notes {#news}
|
|
|
|
[TOC]
|
|
|
|
|
|
## Release notes for version 3.4 {#news_34}
|
|
|
|
### New features in version 3.4 {#features_34}
|
|
|
|
#### Cocoa NSView native access function {#native_cocoa_nsview_34}
|
|
|
|
GLFW now provides the @ref glfwGetCocoaView native access function
|
|
for returning the Cocoa NSView.
|
|
|
|
|
|
#### Runtime platform selection {#runtime_platform_34}
|
|
|
|
GLFW now supports being compiled for multiple backends and selecting between
|
|
them at runtime with the @ref GLFW_PLATFORM init hint. After initialization the
|
|
selected platform can be queried with @ref glfwGetPlatform. You can check if
|
|
support for a given platform is compiled in with @ref glfwPlatformSupported.
|
|
|
|
|
|
#### More standard cursor shapes {#standard_cursors_34}
|
|
|
|
GLFW now provides the standard cursor shapes @ref GLFW_RESIZE_NWSE_CURSOR and
|
|
@ref GLFW_RESIZE_NESW_CURSOR for diagonal resizing, @ref GLFW_RESIZE_ALL_CURSOR
|
|
for omnidirectional resizing and @ref GLFW_NOT_ALLOWED_CURSOR for showing an
|
|
action is not allowed.
|
|
|
|
Unlike the original set, these shapes may not be available everywhere and
|
|
creation will then fail with the new @ref GLFW_CURSOR_UNAVAILABLE error.
|
|
|
|
The cursors for horizontal and vertical resizing are now referred to as @ref
|
|
GLFW_RESIZE_EW_CURSOR and @ref GLFW_RESIZE_NS_CURSOR, and the pointing hand
|
|
cursor is now referred to as @ref GLFW_POINTING_HAND_CURSOR. The older names
|
|
are still available.
|
|
|
|
For more information see @ref cursor_standard.
|
|
|
|
|
|
#### Mouse event passthrough {#mouse_passthrough_34}
|
|
|
|
GLFW now provides the [GLFW_MOUSE_PASSTHROUGH](@ref GLFW_MOUSE_PASSTHROUGH_hint)
|
|
window hint for making a window transparent to mouse input, lettings events pass
|
|
to whatever window is behind it. This can also be changed after window
|
|
creation with the matching [window attribute](@ref GLFW_MOUSE_PASSTHROUGH_attrib).
|
|
|
|
|
|
#### Ability to get window title {#features_34_window_title}
|
|
|
|
GLFW now supports querying the title of a window with the @ref glfwGetWindowTitle
|
|
function.
|
|
|
|
For more information see @ref window_title.
|
|
|
|
|
|
#### Captured cursor mode {#captured_cursor_34}
|
|
|
|
GLFW now supports confining the cursor to the window content area with the @ref
|
|
GLFW_CURSOR_CAPTURED cursor mode.
|
|
|
|
For more information see @ref cursor_mode.
|
|
|
|
|
|
#### Support for custom heap memory allocator {#features_34_init_allocator}
|
|
|
|
GLFW now supports plugging a custom memory allocator at initialization with @ref
|
|
glfwInitAllocator. The allocator is a struct of type @ref GLFWallocator with
|
|
function pointers corresponding to the standard library functions `malloc`,
|
|
`realloc` and `free`.
|
|
|
|
For more information see @ref init_allocator.
|
|
|
|
|
|
#### Window hint for framebuffer scaling {#scale_framebuffer_34}
|
|
|
|
GLFW now allows provides the
|
|
[GLFW_SCALE_FRAMEBUFFER](@ref GLFW_SCALE_FRAMEBUFFER_hint) window hint for
|
|
controlling framebuffer scaling on platforms that handle scaling by keeping the
|
|
window size the same while resizing the framebuffer. The default value is to
|
|
allow framebuffer scaling.
|
|
|
|
This was already possible on macOS via the
|
|
[GLFW_COCOA_RETINA_FRAMEBUFFER](@ref GLFW_COCOA_RETINA_FRAMEBUFFER_hint) window
|
|
hint. This hint is now another name for
|
|
[GLFW_SCALE_FRAMEBUFFER](@ref GLFW_SCALE_FRAMEBUFFER_hint).
|
|
|
|
For more information see @ref window_scale.
|
|
|
|
|
|
#### Window hints for initial window position {#features_34_position_hint}
|
|
|
|
GLFW now provides the @ref GLFW_POSITION_X and @ref GLFW_POSITION_Y window hints for
|
|
specifying the initial position of the window. This removes the need to create a hidden
|
|
window, move it and then show it. The default value of these hints is
|
|
`GLFW_ANY_POSITION`, which selects the previous behavior.
|
|
|
|
For more information see @ref window_pos.
|
|
|
|
|
|
#### Support for keyboard access to Windows window menu {#features_34_win32_keymenu}
|
|
|
|
GLFW now provides the
|
|
[GLFW_WIN32_KEYBOARD_MENU](@ref GLFW_WIN32_KEYBOARD_MENU_hint) window hint for
|
|
enabling keyboard access to the window menu via the Alt+Space and
|
|
Alt-and-then-Space shortcuts. This may be useful for more GUI-oriented
|
|
applications.
|
|
|
|
|
|
#### Support for applying STARTUPINFO show command {#features_34_win32_showdefault}
|
|
|
|
GLFW now provides the [GLFW_WIN32_SHOWDEFAULT](@ref GLFW_WIN32_SHOWDEFAULT_hint) window
|
|
hint for applying the show command in the program's `STARTUPINFO` when showing the window
|
|
for the first time. This may be useful for the main window of a windowed-mode tool.
|
|
|
|
|
|
#### Wayland libdecor decorations {#wayland_libdecor_34}
|
|
|
|
GLFW now supports improved fallback window decorations via
|
|
[libdecor](https://gitlab.freedesktop.org/libdecor/libdecor).
|
|
|
|
Support for libdecor can be toggled before GLFW is initialized with the
|
|
[GLFW_WAYLAND_LIBDECOR](@ref GLFW_WAYLAND_LIBDECOR_hint) init hint. It is
|
|
enabled by default.
|
|
|
|
|
|
#### Window hint for Wayland app_id {#wayland_app_id_34}
|
|
|
|
GLFW now supports specifying the app_id for a Wayland window using the
|
|
[GLFW_WAYLAND_APP_ID](@ref GLFW_WAYLAND_APP_ID_hint) window hint string.
|
|
|
|
|
|
#### Support for ANGLE rendering backend selection {#features_34_angle_backend}
|
|
|
|
GLFW now provides the
|
|
[GLFW_ANGLE_PLATFORM_TYPE](@ref GLFW_ANGLE_PLATFORM_TYPE_hint) init hint for
|
|
requesting a specific rendering backend when using [ANGLE][] to create OpenGL ES
|
|
contexts.
|
|
|
|
[ANGLE]: https://chromium.googlesource.com/angle/angle/
|
|
|
|
|
|
### Caveats for version 3.4 {#caveats}
|
|
|
|
#### Multiple sets of native access functions {#native_34}
|
|
|
|
Because GLFW now supports runtime selection of platform (window system), a library binary
|
|
may export native access functions for multiple platforms. Starting with version 3.4 you
|
|
must not assume that GLFW is running on a platform just because it exports native access
|
|
functions for it. After initialization, you can query the selected platform with @ref
|
|
glfwGetPlatform.
|
|
|
|
|
|
#### Version string format has been changed {#version_string_34}
|
|
|
|
Because GLFW now supports runtime selection of platform (window system), the version
|
|
string returned by @ref glfwGetVersionString has been expanded. It now contains the names
|
|
of all APIs for all the platforms that the library binary supports.
|
|
|
|
|
|
#### Joystick support is initialized on demand {#joysticks_34}
|
|
|
|
The joystick part of GLFW is now initialized when first used, primarily to work
|
|
around faulty Windows drivers that cause DirectInput to take up to several
|
|
seconds to enumerate devices.
|
|
|
|
This change will usually not be observable. However, if your application waits
|
|
for events without having first called any joystick function or created any
|
|
visible windows, the wait may never unblock as GLFW may not yet have subscribed
|
|
to joystick related OS events.
|
|
|
|
To work around this, call any joystick function before waiting for events, for
|
|
example by setting a [joystick callback](@ref joystick_event).
|
|
|
|
|
|
#### Framebuffer may lack alpha channel on older Wayland systems {#wayland_alpha_34}
|
|
|
|
On Wayland, when creating an EGL context on a machine lacking the new
|
|
`EGL_EXT_present_opaque` extension, the @ref GLFW_ALPHA_BITS window hint will be
|
|
ignored and the framebuffer will have no alpha channel. This is because some
|
|
Wayland compositors treat any buffer with an alpha channel as per-pixel
|
|
transparent.
|
|
|
|
If you want a per-pixel transparent window, see the
|
|
[GLFW_TRANSPARENT_FRAMEBUFFER](@ref GLFW_TRANSPARENT_FRAMEBUFFER_hint) window
|
|
hint.
|
|
|
|
|
|
#### Tests and examples are disabled when built as a subproject {#standalone_34}
|
|
|
|
GLFW now does not build the tests and examples when it is added as
|
|
a subdirectory of another CMake project. To enable these, set the @ref
|
|
GLFW_BUILD_TESTS and @ref GLFW_BUILD_EXAMPLES cache variables before adding the
|
|
GLFW subdirectory.
|
|
|
|
```cmake
|
|
set(GLFW_BUILD_EXAMPLES ON CACHE BOOL "" FORCE)
|
|
set(GLFW_BUILD_TESTS ON CACHE BOOL "" FORCE)
|
|
add_subdirectory(path/to/glfw)
|
|
```
|
|
|
|
|
|
#### macOS main menu now created at initialization {#initmenu_34}
|
|
|
|
GLFW now creates the main menu and completes the initialization of NSApplication
|
|
during initialization. Programs that do not want a main menu can disable it
|
|
with the [GLFW_COCOA_MENUBAR](@ref GLFW_COCOA_MENUBAR_hint) init hint.
|
|
|
|
|
|
#### CoreVideo dependency has been removed {#corevideo_34}
|
|
|
|
GLFW no longer depends on the CoreVideo framework on macOS and it no longer
|
|
needs to be specified during compilation or linking.
|
|
|
|
|
|
#### Framebuffer transparency requires DWM transparency {#caveat_fbtransparency_34}
|
|
|
|
GLFW no longer supports framebuffer transparency enabled via @ref
|
|
GLFW_TRANSPARENT_FRAMEBUFFER on Windows 7 if DWM transparency is off
|
|
(the Transparency setting under Personalization > Window Color).
|
|
|
|
|
|
#### Empty events on X11 no longer round-trip to server {#emptyevents_34}
|
|
|
|
Events posted with @ref glfwPostEmptyEvent now use a separate unnamed pipe
|
|
instead of sending an X11 client event to the helper window.
|
|
|
|
|
|
### Deprecations in version 3.4 {#deprecations_34}
|
|
|
|
### Removals in 3.4 {#removals_34}
|
|
|
|
#### GLFW_VULKAN_STATIC CMake option has been removed {#vulkan_static_34}
|
|
|
|
This option was used to compile GLFW directly linked with the Vulkan loader, instead of
|
|
using dynamic loading to get hold of `vkGetInstanceProcAddr` at initialization. This is
|
|
now done by calling the @ref glfwInitVulkanLoader function before initialization.
|
|
|
|
If you need backward compatibility, this macro can still be defined for GLFW 3.4 and will
|
|
have no effect. The call to @ref glfwInitVulkanLoader can be conditionally enabled in
|
|
your code by checking the @ref GLFW_VERSION_MAJOR and @ref GLFW_VERSION_MINOR macros.
|
|
|
|
|
|
#### GLFW_USE_OSMESA CMake option has been removed {#osmesa_option_34}
|
|
|
|
This option was used to compile GLFW for the Null platform. The Null platform is now
|
|
always supported. To produce a library binary that only supports this platform, the way
|
|
this CMake option used to do, you will instead need to disable the default platform for
|
|
the target OS. This means setting the @ref GLFW_BUILD_WIN32, @ref GLFW_BUILD_COCOA or
|
|
@ref GLFW_BUILD_X11 CMake option to false.
|
|
|
|
You can set all of them to false and the ones that don't apply for the target OS will be
|
|
ignored.
|
|
|
|
|
|
#### Support for the wl_shell protocol has been removed {#wl_shell_34}
|
|
|
|
Support for the wl_shell protocol has been removed and GLFW now only supports
|
|
the XDG-Shell protocol. If your Wayland compositor does not support XDG-Shell
|
|
then GLFW will fail to initialize.
|
|
|
|
|
|
### New symbols in version 3.4 {#symbols_34}
|
|
|
|
#### New functions in version 3.4 {#functions_34}
|
|
|
|
- @ref glfwInitAllocator
|
|
- @ref glfwGetPlatform
|
|
- @ref glfwPlatformSupported
|
|
- @ref glfwInitVulkanLoader
|
|
- @ref glfwGetWindowTitle
|
|
|
|
|
|
#### New types in version 3.4 {#types_34}
|
|
|
|
- @ref GLFWallocator
|
|
- @ref GLFWallocatefun
|
|
- @ref GLFWreallocatefun
|
|
- @ref GLFWdeallocatefun
|
|
|
|
|
|
#### New constants in version 3.4 {#constants_34}
|
|
|
|
- @ref GLFW_PLATFORM
|
|
- @ref GLFW_ANY_PLATFORM
|
|
- @ref GLFW_PLATFORM_WIN32
|
|
- @ref GLFW_PLATFORM_COCOA
|
|
- @ref GLFW_PLATFORM_WAYLAND
|
|
- @ref GLFW_PLATFORM_X11
|
|
- @ref GLFW_PLATFORM_NULL
|
|
- @ref GLFW_PLATFORM_UNAVAILABLE
|
|
- @ref GLFW_POINTING_HAND_CURSOR
|
|
- @ref GLFW_RESIZE_EW_CURSOR
|
|
- @ref GLFW_RESIZE_NS_CURSOR
|
|
- @ref GLFW_RESIZE_NWSE_CURSOR
|
|
- @ref GLFW_RESIZE_NESW_CURSOR
|
|
- @ref GLFW_RESIZE_ALL_CURSOR
|
|
- @ref GLFW_MOUSE_PASSTHROUGH
|
|
- @ref GLFW_NOT_ALLOWED_CURSOR
|
|
- @ref GLFW_CURSOR_UNAVAILABLE
|
|
- @ref GLFW_WIN32_KEYBOARD_MENU
|
|
- @ref GLFW_WIN32_SHOWDEFAULT
|
|
- @ref GLFW_CONTEXT_DEBUG
|
|
- @ref GLFW_FEATURE_UNAVAILABLE
|
|
- @ref GLFW_FEATURE_UNIMPLEMENTED
|
|
- @ref GLFW_ANGLE_PLATFORM_TYPE
|
|
- @ref GLFW_ANGLE_PLATFORM_TYPE_NONE
|
|
- @ref GLFW_ANGLE_PLATFORM_TYPE_OPENGL
|
|
- @ref GLFW_ANGLE_PLATFORM_TYPE_OPENGLES
|
|
- @ref GLFW_ANGLE_PLATFORM_TYPE_D3D9
|
|
- @ref GLFW_ANGLE_PLATFORM_TYPE_D3D11
|
|
- @ref GLFW_ANGLE_PLATFORM_TYPE_VULKAN
|
|
- @ref GLFW_ANGLE_PLATFORM_TYPE_METAL
|
|
- @ref GLFW_X11_XCB_VULKAN_SURFACE
|
|
- @ref GLFW_CURSOR_CAPTURED
|
|
- @ref GLFW_POSITION_X
|
|
- @ref GLFW_POSITION_Y
|
|
- @ref GLFW_ANY_POSITION
|
|
- @ref GLFW_WAYLAND_APP_ID
|
|
- @ref GLFW_WAYLAND_LIBDECOR
|
|
- @ref GLFW_WAYLAND_PREFER_LIBDECOR
|
|
- @ref GLFW_WAYLAND_DISABLE_LIBDECOR
|
|
- @ref GLFW_SCALE_FRAMEBUFFER
|
|
|
|
|
|
## Release notes for earlier versions {#news_archive}
|
|
|
|
- [Release notes for 3.3](https://www.glfw.org/docs/3.3/news.html)
|
|
- [Release notes for 3.2](https://www.glfw.org/docs/3.2/news.html)
|
|
- [Release notes for 3.1](https://www.glfw.org/docs/3.1/news.html)
|
|
- [Release notes for 3.0](https://www.glfw.org/docs/3.0/news.html)
|
|
|