Commit Graph

497 Commits

Author SHA1 Message Date
Camilla Löwy
cd22e28495 X11: Fix empty event race condition with a pipe
There is a seemingly unavoidable race condition when waiting for data on
the X11 display connection, as long as any other thread is also making
Xlib calls.  The event data we are waiting for could be read by the
other thread as part of looking for the reply to its request, before our
poll has begun.

This commit replaces the X11 event sent by glfwPostEmptyEvent with
writing to an unnamed pipe.  The race condition remains if other Xlib
calls are made on other threads, but glfwPostEmptyEvent should now be
race-free.

This commit is based on work by pcwalton, OlivierSohn, kovidgoyal and
joaodasilva.

Closes #2033
Related to #379
Related to #1281
Related to #1285
2022-03-03 22:16:59 +01:00
Camilla Löwy
e023618daa Remove Doxyfile tag deprecated by Doxygen 1.9.3 2022-02-02 21:49:06 +01:00
Camilla Löwy
293d19a153 Wayland: Require xkbcommon 0.5.0 or greater
The Wayland backend now requires xkbcommon-compose, which was added in
version 0.5.0.  xkbcommon 0.5.0 was released in 2014.

This removes the non-composing fallback path for text input.
2021-12-31 13:27:22 +01:00
Camilla Löwy
76a5f781db Add glfwInitVulkanLoader
This removes the GLFW_VULKAN_STATIC CMake option and the
_GLFW_VULKAN_STATIC configuration macro and replaces them with the
glfwInitVulkanLoader function, allowing a single library binary to
provide both behaviors.

This is based on the design from PR #1374 by @pmuetschard.

Closes #1374
Closes #1890
2021-10-27 18:22:05 +02:00
Camilla Löwy
393eac458b Improve Vulkan guide header section 2021-10-27 18:22:05 +02:00
Camilla Löwy
6efaaec9ce Improve headings and TOC layout in Doxygen docs
This more or less restores the original custom layout where the TOC is
on the right side, with a CSS workaround added for portrait orientation.

The indentation of sub-lists in the TOC has been decreased.

The sizes of HTML headings and the "h0" div generated for each Doxygen
page have been adjusted to look better together now that they can meet.

A few headings have been shortened to fit better in the narrower TOC.
2021-10-25 23:38:41 +02:00
Camilla Löwy
38dd515524 Use Win32 instead of Windows in Doxygen headings
This was especially bad in the window guide, where the TOC ended up
having "Window related hints" and "Windows specific window hints" close
to one another.

This commit only fixes headings.  There are likely issues in the actual
text as well.
2021-10-23 20:28:47 +02:00
Camilla Löwy
56a4cb0a3a Add runtime platform selection
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
2021-10-13 21:47:11 +02:00
Camilla Löwy
0a9488e3f0 Remove configuration header 2021-10-12 12:54:35 +02:00
Camilla Löwy
0391b7b277 Remove Doxyfile tags deprecated by Doxygen 1.9.2 2021-10-12 12:54:35 +02:00
Camilla Löwy
63da04e5ce Add HTML header and footer to docs dependencies
This should have been included in
150744ecca.
2021-08-26 17:49:54 +02:00
Camilla Löwy
150744ecca Only rebuild documentation when necessary
This teaches CMake about the dependencies of the Doxygen generated
documentation so it isn't rebuilt every time.
2021-08-26 16:03:58 +02:00
Camilla Löwy
8c8def5de5 Start making use of CMake 3.4 string(APPEND) 2021-08-26 16:03:58 +02:00
Camilla Löwy
22b586b3d8 Add pluggable heap allocator
This adds the glfwInitAllocator function for specifying a custom memory
allocator to use instead of the C runtime library.

The allocator is a struct of type GLFWallocator with fields
corresponding to malloc, realloc and free, while the internal API
corresponds to calloc, realloc and free.

Heap allocation calls are filtered before reaching the user-provided
functions, so deallocation of NULL and allocations of zero bytes are not
passed on, reallocating NULL is transformed into an allocation and
reallocating to size zero is transformed into deallocation.

The clearing of a new block to zero is performed by the internal
calloc-like function.

Closes #544.
Fixes #1628.
Closes #1947.
2021-08-25 21:00:10 +02:00
Camilla Löwy
d83849792b Add override variable for CMake library type
This adds the GLFW_LIBRARY_TYPE CMake cache variable, which allows users
and higher-level projects to set what type of library GLFW is built as.

When not empty, this value overrides the standard BUILD_SHARED_LIBS
option for GLFW while still allowing it to control the type of other
libraries in a larger project.

This also allows building GLFW as an object library without adding dummy
source files (as required by Xcode) or producing unused library
binaries.

Projects using CMake 3.12 or later can link the resulting GLFW object
library normally using target_link_libraries.

Fixes #279.
Related to #1307.
Closes #1497.
Closes #1574.
Closes #1928.
2021-08-15 22:44:43 +02:00
Camilla Löwy
01778329ec Add custom target for updating gamepad mappings 2021-08-01 20:16:17 +02:00
Camilla Löwy
3dc7349c35 Expand list of distro derivatives slightly 2021-07-29 21:50:24 +02:00
Camilla Löwy
9e1ee3f263 Add Fedora package names to compilation guide 2021-07-29 21:50:24 +02:00
Camilla Löwy
3b95970482 Improve library compilation guide somewhat
Related to #1931.
2021-07-16 19:36:10 +02:00
David V. McKay
1a5e07fd4b
realizing "as you would" is platform dependent
specified "for linux or unix" and added a bit about using Visual Studio on Windows.
2021-07-07 23:44:22 -04:00
David V. McKay
f010d8b77d
Clarify "as you would" for beginners.
fixes #1088
2021-07-07 23:25:35 -04:00
A. Tombs
52d8347d34 Consistent subsections in compile guide
In the compile guide, the "Dependencies for Linux and OSMesa" section
looks to be one level too high in the hierarchy. I've moved it to be in
line with the similarly-named sub-sub-sections.

Closes #1923.
2021-06-23 21:30:07 +02:00
Camilla Löwy
787295b3af Fix some documentation URLs still using http:
Some URLs in the documentation were overlooked during the switch to
https: for the GLFW website.  This updates those and a few third-party
URLs.
2021-06-14 19:50:32 +02:00
Camilla Löwy
78380c7761 Update IRC network to Libera.Chat
The `#glfw` IRC channel is moving to the Libera.Chat network due to the
recent takeover of the Freenode network.
2021-06-14 19:50:32 +02:00
Camilla Löwy
04f21abb52 Make GLFW_DOUBLEBUFFER a window attribute 2021-05-14 19:02:25 +02:00
Camilla Löwy
a39115a27b Remove claim that EGL is not supported on macOS 2021-05-13 15:03:49 +02:00
Camilla Löwy
bbbbd3e870 Clarify documentation for hints 2021-05-13 15:03:19 +02:00
Camilla Löwy
ec621a00bd Replace GL_ARB_debug_output in context guide
New code should use GL_KHR_debug instead but it's not as good an example
to use in this case as the symbols it adds has no suffixes.
2021-04-22 22:37:37 +02:00
Camilla Löwy
a25e8eb50d Add docs for GLFW_X11_XCB_VULKAN_SURFACE
Related to #1793.
2021-04-22 22:33:07 +02:00
Camilla Löwy
f4a7329604 Update USE_MSVC_RUNTIME_LIBRARY_DLL for CMake 3.15
This makes USE_MSVC_RUNTIME_LIBRARY_DLL update the directory scope
CMAKE_MSVC_RUNTIME_LIBRARY variable instead of CMAKE_C_FLAGS on CMake
3.15 and later.

Solution proposed by @moritz-h.

Fixes #1783.
Closes #1796.
2021-04-14 22:50:32 +02:00
Camilla Löwy
291f6dc32c Remove deprecated Doxygen tag
Fixes #1867.
2021-03-19 14:24:50 +01:00
Bhee
0b9e48fa3d Fix minor typo: If if -> If. 2020-12-14 12:27:57 +01:00
Emmanuel Gil Peyrot
40d150c399 Docs: Remove mentions of extra-cmake-modules 2020-09-30 17:04:20 +02:00
Camilla Löwy
73ef5f0abb Update CODEOWNERS for move to SCSS 2020-09-22 19:50:40 +02:00
Luflosi
58df92acad
Use consistent indentation for Doxygen custom stylesheet
Most of this file is indented with tabs but parts are indented with spaces.

Closes #1770.
2020-09-18 14:27:57 +02:00
Siavash Eliasi
96f9f5c4b9 Migrate to Sass for Doxygen custom stylesheets
Closes #1759.
2020-09-07 20:50:57 +02:00
Siavash Eliasi
bb1d917c2f Improve docs scaling on mobile and small screens
Closes #1757.
2020-09-02 21:50:57 +02:00
Camilla Löwy
59196f9ad8 Make old debug context hint/attrib name searchable 2020-09-02 21:27:43 +02:00
Camilla Löwy
b9dfce0070 Fix formatting in transition guide 2020-09-02 17:41:38 +02:00
Camilla Löwy
05dd2fa298 Win32: Disable fb transparency when it is broken
On Windows 7, when GLFW framebuffer transparency and the DWM are enabled
but DWM transparency is disabled (i.e. when the Transparency setting is
disabled under Personalization > Color), the contents of the framebuffer
is combined with the last frame using additive blending instead of
replacing the previous contents.

This commit limits GLFW framebuffer transparency on Windows 7 to when
DWM transparency is enabled, removing the previous workaround of setting
a layered window color key that led to rendering artifacts.

Fixes #1512.
2020-07-29 15:21:45 +02:00
Camilla Löwy
e0f7ce402b Documentation fix
"Joystick token" is not used anywhere else in the documentation.
2020-07-21 18:06:13 +02:00
Camilla Löwy
782e6b6cef Make joystick platform code init on demand
This makes joystick support initialize the first time a joystick
function is called, including those gamepad functions that are layered
on top of joystick functions.

Related to #1284.
Related to #1646.
2020-07-21 17:38:56 +02:00
Camilla Löwy
3207fc7120 Add window property test 2020-07-15 19:08:04 +02:00
Camilla Löwy
a122d91303 Documentation work for GLFW_MOUSE_PASSTHROUGH
Related to #1568.
2020-07-15 18:02:38 +02:00
Camilla Löwy
f5f060e6bf Init hint documentation work
The documentation for window hints had several features that had not
been carried over to init hints.

This also removes listing glfwInitHint for each hint, which was an
artifact of the removal of glfwInitHintString.
2020-06-29 00:02:41 +02:00
Camilla Löwy
0dea8a4441 EGL: Add support for EGL_ANGLE_platform_angle
This adds basic support for selecting the platform type (rendering
backend) when running on ANGLE.

Related to #1380.
2020-06-29 00:02:22 +02:00
Camilla Löwy
36f8250321 Add missing entries to new symbols list
Related to #1692.
2020-06-28 19:27:49 +02:00
Camilla Löwy
b420ca7404 Add GLFW_CONTEXT_DEBUG window hint alias
This adds GLFW_CONTEXT_DEBUG as a preferred alias for
the GLFW_OPENGL_DEBUG_CONTEXT window hint, as debug contexts are
defined for both OpenGL and OpenGL ES.

Related to #1720.
2020-06-28 19:27:48 +02:00
Camilla Löwy
4e3b43383a Re-word docs for GLFW_OPENGL_DEBUG_CONTEXT attrib
Related to #1720.
2020-06-28 19:25:28 +02:00
A. Tombs
8a69a0d7e5 Re-word docs for OPENGL_DEBUG_CONTEXT hint
Re-worded documentation for the `GLFW_OPENGL_DEBUG_CONTEXT` window hint
to avoid implying that it only applies to OpenGL contexts. Added a link
to the relevant Khronos extension description.

Closes #1720.
2020-06-26 17:48:46 +02:00