mirror of
https://github.com/glfw/glfw.git
synced 2024-11-14 14:33:52 +00:00
56a4cb0a3a
This adds compile-time support for multiple platforms and runtime detection of them. Window system related platform functions are now called from shared code via the function pointer struct _GLFWplatform. The timer, thread and module loading platform functions are still called directly by name and the implementation chosen at link-time. These functions are the same for any backend on a given OS, including the Null backend. The platforms are now enabled via CMake dependent options following the GLFW_BUILD_<platform> pattern instead of a mix of automagic and ad-hoc option names. There is no longer any option for the Null backend as it is now always enabled. Much of the struct stitching work in platform.h was based on an earlier experimental branch for runtime platform selection by @ronchaine. Every platform function related to windows, contexts, monitors, input, event processing and Vulkan have been renamed so that multiple sets of them can exist without colliding. Calls to these are now routed through the _glfw.platform struct member. These changes makes up most of this commit. For Wayland and X11 the client library loading and display creation is used to detect a running compositor/server. The XDG_SESSION_TYPE environment variable is ignored for now, as X11 is still by far the more complete implementation. Closes #1655 Closes #1958
223 lines
7.9 KiB
Plaintext
223 lines
7.9 KiB
Plaintext
/*!
|
|
|
|
@page news Release notes
|
|
|
|
@tableofcontents
|
|
|
|
|
|
@section news_34 Release notes for version 3.4
|
|
|
|
@subsection features_34 New features in version 3.4
|
|
|
|
@subsubsection runtime_platform_34 Runtime platform selection
|
|
|
|
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.
|
|
|
|
|
|
@subsubsection standard_cursors_34 More standard cursors
|
|
|
|
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 omni-directional 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.
|
|
|
|
|
|
@subsubsection mouse_passthrough_34 Mouse event passthrough
|
|
|
|
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).
|
|
|
|
|
|
@subsubsection features_34_angle_backend Support for ANGLE rendering backend selection
|
|
|
|
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](https://chromium.googlesource.com/angle/angle/) to create OpenGL ES
|
|
contexts.
|
|
|
|
|
|
@subsubsection features_34_init_allocator Support for custom memory 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.
|
|
|
|
|
|
@subsubsection features_34_win32_keymenu Support for keyboard access to Windows window menu
|
|
|
|
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.
|
|
|
|
|
|
@subsection caveats Caveats for version 3.4
|
|
|
|
@subsubsection native_34 Multiple sets of native access functions
|
|
|
|
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.
|
|
|
|
|
|
@subsubsection version_string_34 Version string format has been changed
|
|
|
|
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.
|
|
|
|
|
|
@subsubsection joysticks_34 Joystick support is initialized on demand
|
|
|
|
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).
|
|
|
|
|
|
@subsubsection standalone_34 Tests and examples are disabled when built as a sub-project
|
|
|
|
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.
|
|
|
|
@code{.cmake}
|
|
set(GLFW_BUILD_EXAMPLES ON CACHE BOOL "" FORCE)
|
|
set(GLFW_BUILD_TESTS ON CACHE BOOL "" FORCE)
|
|
add_subdirectory(path/to/glfw)
|
|
@endcode
|
|
|
|
|
|
@subsubsection initmenu_34 macOS main menu now created at initialization
|
|
|
|
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.
|
|
|
|
|
|
@subsubsection corevideo_34 CoreVideo dependency has been removed
|
|
|
|
GLFW no longer depends on the CoreVideo framework on macOS and it no longer
|
|
needs to be specified during compilation or linking.
|
|
|
|
|
|
@subsubsection caveat_fbtransparency_34 Framebuffer transparency requires DWM transparency
|
|
|
|
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).
|
|
|
|
|
|
@subsection deprecations_34 Deprecations in version 3.4
|
|
|
|
@subsection removals_34 Removals in 3.4
|
|
|
|
@subsubsection osmesa_option_34 GLFW_USE_OSMESA CMake option has been removed
|
|
|
|
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.
|
|
|
|
|
|
@subsubsection wl_shell_34 Support for the wl_shell protocol has been removed
|
|
|
|
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.
|
|
|
|
|
|
@subsection symbols_34 New symbols in version 3.4
|
|
|
|
@subsubsection functions_34 New functions in version 3.4
|
|
|
|
- @ref glfwInitAllocator
|
|
- @ref glfwGetPlatform
|
|
- @ref glfwPlatformSupported
|
|
|
|
|
|
@subsubsection types_34 New types in version 3.4
|
|
|
|
- @ref GLFWallocator
|
|
- @ref GLFWallocatefun
|
|
- @ref GLFWreallocatefun
|
|
- @ref GLFWdeallocatefun
|
|
|
|
|
|
@subsubsection constants_34 New constants in version 3.4
|
|
|
|
- @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_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
|
|
|
|
|
|
@section news_archive Release notes for earlier versions
|
|
|
|
- [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)
|
|
|
|
*/
|