Commit Graph

96 Commits

Author SHA1 Message Date
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
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
Doug Binks
166611cef5 Win32: Update all monitor handles on config change
Closes #1761.
2020-10-05 23:24:12 +02:00
Camilla Löwy
da3f20d860 Win32: Add missing include for wcscmp 2019-12-15 18:37:57 +01:00
Camilla Löwy
cbf23e5615 Win32: Fix VS static analysis false positive
This way is perhaps also more readable for humans.
2019-08-28 20:59:49 +02:00
Camilla Löwy
56aad76b16 Add C dialect reminders to each source file
Files built for Win32 must use C89 style declarations for compatibility
with VS 2010 and 2012, which are still supported by GLFW.
2019-05-24 14:43:49 +02:00
Camilla Löwy
a337c56848 Start 3.4 2019-04-16 23:08:39 +02:00
Camilla Löwy
ab118b2529 Fix copyright years (somewhat) 2019-04-15 20:50:00 +02:00
Camilla Löwy
d82e7b5cb1 Win32: Use cached monitor handle for work area
This facility was added after the original PR was made.

Related to #1322.
2019-03-05 16:58:45 +01:00
Camilla Löwy
0118743333 Formatting
Related to #1322.
2019-03-05 16:58:45 +01:00
Doug Binks
f7733c7b4f Win32: Add missing out parameter NULL checks
This fixes _glfwPlatformGetMonitorWorkarea not checking if its out
parameters were NULL.

Related to #1322.
2019-03-05 16:10:59 +01:00
Doug Binks
5c752355cb Win32: Fix and simplify work area retrieval
Related to #1322.
2019-03-05 16:10:59 +01:00
Felipe Ferreira da Silva
be295ccbea Add glfwGetMonitorWorkarea
This function retrieves the work area rectangle of the specified
monitor.

Related to #920.
Closes #989.
2019-03-05 16:10:59 +01:00
Camilla Löwy
52c7a4fc7f Fix glfwGetGammaRamp error handling
This makes glfwGetGammaRamp return NULL on platform error as specified.

Related to #1387.
2018-12-26 15:00:39 +01:00
Camilla Löwy
5294439595 Win32: Add support for Per-Monitor V2 awareness
This adds basic support for the Per-Monitor V2 level of DPI awareness
in Windows 10, which allows for automatic DPI scaling of window
decorations.

This commit does not include resizing the window content area to match
the new window content scale.

Related to #1115.
Fixes #1294.
2018-09-03 23:12:39 +02:00
Emmanuel Gil Peyrot
8d98a6e37d Add a FreeMonitor platform API
This fixes the leak of a wl_output object everytime a monitor is freed.
2018-03-01 08:31:54 +01:00
Camilla Löwy
1d75b205cb Cleanup
Allow window creation despite video mode setting failure.

Video mode setting failure is ignored the rest of the time and the
desired video mode has never been a hard constraint anyway.
2018-02-07 16:46:58 +01:00
Camilla Löwy
16bf872117 Add content scale queries
This adds glfwGetWindowContentScale and glfwGetMonitorContentScale for
querying the recommended drawing scale factor for DPI-aware rendering.

Parts of this patch are based on code by @ferreiradaselva.

Fixes #235.
Fixes #439.
Fixes #677.
Fixes #845.
Fixes #898.
2017-10-26 17:26:36 +02:00
Camilla Löwy
d8551b73f6 Cleanup 2017-08-28 18:31:14 +02:00
Camilla Löwy
45ca8b8d19 Win32: Add HMONITOR to monitor data 2017-08-28 18:27:55 +02:00
Camilla Löwy
b215a989f5 Win32: Check for monitor object creation failure 2017-03-26 16:46:17 +02:00
Camilla Löwy
0df9cc2fc5 Win32: Improve monitor enumeration
This changes enumeration to add as a GLFW monitor any active adapter
without displays, even if other active adapters do have displays.

Related to #441.
Fixes #960.
2017-03-14 19:10:57 +01:00
Camilla Löwy
980f955f6c Fix undefined behavior
Fixes #950.
2017-02-16 05:23:10 +01:00
Camilla Löwy
c28778e28c Win32: Improve platform error messages
Related to #733.
2017-01-20 01:35:24 +01:00
Camilla Löwy
04f559e28d Restructure monitor enumeration
This way is both kinder on event-based enumeration and less work to
unwind allocations for when properly implementing GLFW_OUT_OF_MEMORY.
2017-01-02 06:03:02 +01:00
Camilla Löwy
f4d0c83181 Paperwork done 2016-11-30 14:00:41 +01:00
Camilla Berglund
53fafad915 Start 3.3 2016-08-18 23:55:49 +02:00
Camilla Berglund
757eea2779 Update email address 2016-06-01 21:25:20 +02:00
Camilla Berglund
6a8e169001 Update copyright notice year 2016-06-01 21:25:19 +02:00
Camilla Berglund
4b63f70285 Fix no monitors found on VMware Windows guest
Monitor enumeration now switches to adapters if no displays are
connected to active adapters.  This should provide usable monitor
objects on headless and VMware guest systems.

Fixes #441.
Fixes #556.
Fixes #594.
2016-02-27 21:51:59 +01:00
Camilla Berglund
d956dbbd2c Cleanup 2016-02-23 11:06:55 +01:00
Camilla Berglund
12b6c56903 Add suffixes to platform specific helper functions
Also merge win32_tls.h into win32_platform.h.
2015-12-13 14:50:59 +01:00
Camilla Berglund
fdc65e49e4 Fix bad Win32 updates 2015-12-10 12:16:13 +01:00
Camilla Berglund
72632a846b Cleanup 2015-12-09 19:39:16 +01:00
Camilla Berglund
5668b64839 Fix segfault on DISP_CHANGE_RESTART
Fixes #647.
2015-12-09 19:39:16 +01:00
Camilla Berglund
afb04c9133 Clarify Win32 monitor physical size retrieval 2015-10-28 20:47:29 +01:00
Camilla Berglund
0eccf75f65 Replace GL booleans with public macros 2015-10-13 00:46:02 +02:00
Camilla Berglund
95a07f3340 Start 3.2 2015-10-12 21:59:49 +02:00
Camilla Berglund
842aeb8c47 Make Win32 video mode enumeration faster 2015-10-04 13:51:35 +02:00
Camilla Berglund
bb50368d55 Fixed enumeration of invalid video modes.
Fixes #350.
2015-06-07 21:34:46 +02:00
Camilla Berglund
49cf82a0ac Cleaned up monitor and video mode enumeration. 2015-04-09 17:40:27 +02:00
Camilla Berglund
d493a82f9e Various error fixes.
Fixed incorrect error types.  Added missing error string prefixes.
Removed some invalid or superfluous error emissions.  Clarified some
error strings.  Joined error string lines to aid grep.  Replaced some
generic error strings with specific ones.  Documentation work.

Fixes #450.
2015-03-15 15:52:27 +01:00
Camilla Berglund
49ec306a0a Added glfwGet*Adapter to native API. 2014-10-29 02:55:02 +01:00
Camilla Berglund
99cedceef5 Expose display device name as UTF-8.
This makes interaction with libOVR simpler, as it provides the display
device name in the same encoding.
2014-09-16 18:28:08 +02:00
Camilla Berglund
1b6d8a6ed6 Enabled enumeration of mirroring displays.
This exposes all monitors in every mirroring group, which is needed for
robust detection of an Oculus Rift.
2014-09-16 18:27:33 +02:00
Camilla Berglund
8fd69bc6c2 Fixed monitor size using wrong incorrect value.
The display device string was used, instead of the adapter device name,
leading to the wrong incorrect physical size being returned for
non-primary monitors.  The right incorrect physical size is now returned
for all monitors.
2014-09-15 17:11:35 +02:00
Camilla Berglund
5bbb837635 Fixed gamma functions acting on whole desktop.
Fixes #336.
2014-09-12 14:40:28 +02:00
Camilla Berglund
59d1aa52f2 Merged gamma files into monitor files. 2014-08-18 12:31:48 +02:00
Camilla Berglund
87dd7b89f5 Video mode detection cleanup. 2014-03-10 12:36:23 +01:00
Camilla Berglund
0701d4ce6e Made use of Win32 W-suffixed symbols explicit. 2014-03-06 18:30:14 +01:00