mirror of
https://github.com/glfw/glfw.git
synced 2026-09-19 23:43:15 +00:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 413ba1dceb | |||
| e59b5e1fda |
@@ -3,5 +3,3 @@
|
|||||||
.gitattributes export-ignore
|
.gitattributes export-ignore
|
||||||
.travis.yml export-ignore
|
.travis.yml export-ignore
|
||||||
.appveyor.yml export-ignore
|
.appveyor.yml export-ignore
|
||||||
.mailmap export-ignore
|
|
||||||
.github export-ignore
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ jobs:
|
|||||||
CC: clang
|
CC: clang
|
||||||
CFLAGS: -Werror
|
CFLAGS: -Werror
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v4
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
sudo apt update
|
sudo apt update
|
||||||
@@ -57,7 +57,7 @@ jobs:
|
|||||||
MACOSX_DEPLOYMENT_TARGET: 10.11
|
MACOSX_DEPLOYMENT_TARGET: 10.11
|
||||||
CMAKE_OSX_ARCHITECTURES: x86_64;arm64
|
CMAKE_OSX_ARCHITECTURES: x86_64;arm64
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Configure Null shared library
|
- name: Configure Null shared library
|
||||||
run: cmake -B build-null-shared -D GLFW_BUILD_COCOA=OFF -D BUILD_SHARED_LIBS=ON
|
run: cmake -B build-null-shared -D GLFW_BUILD_COCOA=OFF -D BUILD_SHARED_LIBS=ON
|
||||||
@@ -74,27 +74,27 @@ jobs:
|
|||||||
- name: Build Cocoa shared library
|
- name: Build Cocoa shared library
|
||||||
run: cmake --build build-cocoa-shared --parallel
|
run: cmake --build build-cocoa-shared --parallel
|
||||||
|
|
||||||
build-windows-msvc:
|
build-windows-vs2022:
|
||||||
name: Windows (MSVC)
|
name: Windows (VS2022)
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
timeout-minutes: 4
|
timeout-minutes: 4
|
||||||
env:
|
env:
|
||||||
CFLAGS: /WX
|
CFLAGS: /WX
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Configure Win32 shared x86 library
|
- name: Configure Win32 shared x86 library
|
||||||
run: cmake -B build-win32-shared-x86 -A Win32 -D BUILD_SHARED_LIBS=ON
|
run: cmake -B build-win32-shared-x86 -G "Visual Studio 17 2022" -A Win32 -D BUILD_SHARED_LIBS=ON
|
||||||
- name: Build Win32 shared x86 library
|
- name: Build Win32 shared x86 library
|
||||||
run: cmake --build build-win32-shared-x86 --parallel
|
run: cmake --build build-win32-shared-x86 --parallel
|
||||||
|
|
||||||
- name: Configure Win32 static x64 library
|
- name: Configure Win32 static x64 library
|
||||||
run: cmake -B build-win32-static-x64 -A x64
|
run: cmake -B build-win32-static-x64 -G "Visual Studio 17 2022" -A x64
|
||||||
- name: Build Win32 static x64 library
|
- name: Build Win32 static x64 library
|
||||||
run: cmake --build build-win32-static-x64 --parallel
|
run: cmake --build build-win32-static-x64 --parallel
|
||||||
|
|
||||||
- name: Configure Win32 shared x64 library
|
- name: Configure Win32 shared x64 library
|
||||||
run: cmake -B build-win32-shared-x64 -A x64 -D BUILD_SHARED_LIBS=ON
|
run: cmake -B build-win32-shared-x64 -G "Visual Studio 17 2022" -A x64 -D BUILD_SHARED_LIBS=ON
|
||||||
- name: Build Win32 shared x64 library
|
- name: Build Win32 shared x64 library
|
||||||
run: cmake --build build-win32-shared-x64 --parallel
|
run: cmake --build build-win32-shared-x64 --parallel
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -57,11 +57,11 @@ src/glfw3ConfigVersion.cmake
|
|||||||
# Compiled binaries
|
# Compiled binaries
|
||||||
src/libglfw.so
|
src/libglfw.so
|
||||||
src/libglfw.so.3
|
src/libglfw.so.3
|
||||||
src/libglfw.so.3.6
|
src/libglfw.so.3.5
|
||||||
src/libglfw.dylib
|
src/libglfw.dylib
|
||||||
src/libglfw.dylib
|
src/libglfw.dylib
|
||||||
src/libglfw.3.dylib
|
src/libglfw.3.dylib
|
||||||
src/libglfw.3.6.dylib
|
src/libglfw.3.5.dylib
|
||||||
src/libglfw3.a
|
src/libglfw3.a
|
||||||
src/glfw3.lib
|
src/glfw3.lib
|
||||||
src/glfw3.dll
|
src/glfw3.dll
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
cmake_minimum_required(VERSION 3.16...3.28 FATAL_ERROR)
|
cmake_minimum_required(VERSION 3.16...3.28 FATAL_ERROR)
|
||||||
|
|
||||||
project(GLFW VERSION 3.6.0 LANGUAGES C HOMEPAGE_URL "https://www.glfw.org/")
|
project(GLFW VERSION 3.5.0 LANGUAGES C HOMEPAGE_URL "https://www.glfw.org/")
|
||||||
|
|
||||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||||
|
|
||||||
|
|||||||
@@ -6,12 +6,10 @@ excludes other invaluable contributions like language bindings and text and
|
|||||||
video tutorials.
|
video tutorials.
|
||||||
|
|
||||||
- Bobyshev Alexander
|
- Bobyshev Alexander
|
||||||
- Alzathar
|
|
||||||
- Laurent Aphecetche
|
- Laurent Aphecetche
|
||||||
- Matt Arsenault
|
- Matt Arsenault
|
||||||
- Takuro Ashie
|
- Takuro Ashie
|
||||||
- ashishgamedev
|
- ashishgamedev
|
||||||
- avagordon01
|
|
||||||
- David Avedissian
|
- David Avedissian
|
||||||
- Luca Bacci
|
- Luca Bacci
|
||||||
- Keith Bauer
|
- Keith Bauer
|
||||||
@@ -57,9 +55,7 @@ video tutorials.
|
|||||||
- Bill Currie
|
- Bill Currie
|
||||||
- Jason Daly
|
- Jason Daly
|
||||||
- danhambleton
|
- danhambleton
|
||||||
- danijel1023
|
|
||||||
- Jarrod Davis
|
- Jarrod Davis
|
||||||
- Aaron Day
|
|
||||||
- decce
|
- decce
|
||||||
- Olivier Delannoy
|
- Olivier Delannoy
|
||||||
- Paul R. Deppe
|
- Paul R. Deppe
|
||||||
@@ -79,7 +75,6 @@ video tutorials.
|
|||||||
- Nikita Fediuchin
|
- Nikita Fediuchin
|
||||||
- Felipe Ferreira
|
- Felipe Ferreira
|
||||||
- Michael Fogleman
|
- Michael Fogleman
|
||||||
- Folling
|
|
||||||
- forworldm
|
- forworldm
|
||||||
- Jason Francis
|
- Jason Francis
|
||||||
- Gerald Franz
|
- Gerald Franz
|
||||||
@@ -100,7 +95,6 @@ video tutorials.
|
|||||||
- Andrew Gutekanst
|
- Andrew Gutekanst
|
||||||
- Stephen Gutekanst
|
- Stephen Gutekanst
|
||||||
- Jonathan Hale
|
- Jonathan Hale
|
||||||
- halx99
|
|
||||||
- Daniel Hauser
|
- Daniel Hauser
|
||||||
- hdf89shfdfs
|
- hdf89shfdfs
|
||||||
- Moritz Heinemann
|
- Moritz Heinemann
|
||||||
@@ -167,7 +161,6 @@ video tutorials.
|
|||||||
- Bryce Mehring
|
- Bryce Mehring
|
||||||
- Jonathan Mercier
|
- Jonathan Mercier
|
||||||
- Marcel Metz
|
- Marcel Metz
|
||||||
- Lucas Michaudel
|
|
||||||
- Liam Middlebrook
|
- Liam Middlebrook
|
||||||
- mightgoyardstill
|
- mightgoyardstill
|
||||||
- Mihail
|
- Mihail
|
||||||
@@ -184,7 +177,6 @@ video tutorials.
|
|||||||
- Jon Morton
|
- Jon Morton
|
||||||
- Pierre Moulon
|
- Pierre Moulon
|
||||||
- Martins Mozeiko
|
- Martins Mozeiko
|
||||||
- Tomáš Mráz
|
|
||||||
- Pascal Muetschard
|
- Pascal Muetschard
|
||||||
- James Murphy
|
- James Murphy
|
||||||
- Julian Møller
|
- Julian Møller
|
||||||
@@ -231,7 +223,6 @@ video tutorials.
|
|||||||
- Philip Rideout
|
- Philip Rideout
|
||||||
- Eddie Ringle
|
- Eddie Ringle
|
||||||
- Max Risuhin
|
- Max Risuhin
|
||||||
- road2react
|
|
||||||
- Joe Roback
|
- Joe Roback
|
||||||
- Jorge Rodriguez
|
- Jorge Rodriguez
|
||||||
- Jari Ronkainen
|
- Jari Ronkainen
|
||||||
@@ -239,7 +230,6 @@ video tutorials.
|
|||||||
- Ed Ropple
|
- Ed Ropple
|
||||||
- Aleksey Rybalkin
|
- Aleksey Rybalkin
|
||||||
- Mikko Rytkönen
|
- Mikko Rytkönen
|
||||||
- saikyun
|
|
||||||
- Riku Salminen
|
- Riku Salminen
|
||||||
- Yoshinori Sano
|
- Yoshinori Sano
|
||||||
- Brandon Schaefer
|
- Brandon Schaefer
|
||||||
|
|||||||
@@ -118,9 +118,54 @@ guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
|
|||||||
information on what to include when reporting a bug.
|
information on what to include when reporting a bug.
|
||||||
|
|
||||||
|
|
||||||
## Changelog since 3.5
|
## Changelog since 3.4
|
||||||
|
|
||||||
None.
|
- Added `GLFW_UNLIMITED_MOUSE_BUTTONS` input mode that allows mouse buttons beyond
|
||||||
|
the limit of the mouse button tokens to be reported (#2423)
|
||||||
|
- Added `glfwGetEGLConfig` function to query the `EGLConfig` of a window (#2045)
|
||||||
|
- Added `glfwGetGLXFBConfig` function to query the `GLXFBConfig` of a window (#1925)
|
||||||
|
- Updated minimum CMake version to 3.16 (#2541)
|
||||||
|
- Removed support for building with original MinGW (#2540)
|
||||||
|
- [Win32] Removed support for Windows XP and Vista (#2505)
|
||||||
|
- [Cocoa] Added `QuartzCore` framework as link-time dependency
|
||||||
|
- [Cocoa] Removed support for OS X 10.10 Yosemite and earlier (#2506)
|
||||||
|
- [Wayland] Bugfix: The fractional scaling related objects were not destroyed
|
||||||
|
- [Wayland] Bugfix: `glfwInit` would segfault on compositor with no seat (#2517)
|
||||||
|
- [Wayland] Bugfix: A drag entering a non-GLFW surface could cause a segfault
|
||||||
|
- [Wayland] Bugfix: Ignore key repeat events when no window has keyboard focus (#2727)
|
||||||
|
- [Wayland] Bugfix: Reset key repeat timer when window destroyed (#2741,#2727)
|
||||||
|
- [Wayland] Bugfix: Memory would leak if reading a data offer failed midway
|
||||||
|
- [Wayland] Bugfix: Retrieved cursor position would be incorrect when hovering over
|
||||||
|
fallback decorations
|
||||||
|
- [Wayland] Bugfix: Fallback decorations would report scroll events
|
||||||
|
- [Wayland] Bugfix: Keyboard repeat events halted when any key is released (#2568)
|
||||||
|
- [Wayland] Bugfix: Fallback decorations would show menu at wrong position
|
||||||
|
- [Wayland] Bugfix: The cursor was not updated when clicking through from
|
||||||
|
a modal to a fallback decoration
|
||||||
|
- [Wayland] Bugfix: The cursor position was not updated when clicking through
|
||||||
|
from a modal to the content area
|
||||||
|
- [Wayland] Bugfix: free modules at end of terminate function to resolve
|
||||||
|
potential segmentation fault (#2744)
|
||||||
|
- [Wayland] Bugfix: Confining or disabling the cursor could segfault on
|
||||||
|
compositors without `pointer-constraints-unstable-v1`
|
||||||
|
- [Wayland] Bugfix: Key repeat did not function on very old compositors
|
||||||
|
- [Wayland] Bugfix: The `libwayland-client` library was not unloaded at termination
|
||||||
|
- [Wayland] Bugfix: Scroll events were sent twice on some versions of GNOME (#2494)
|
||||||
|
- [Wayland] Bugfix: Two-dimensional scroll input was emitted as separate axes
|
||||||
|
- [Wayland] Bugfix: `glfwSwapBuffers` would halt with nonzero swap interval when window
|
||||||
|
was suspended (#1350,#2582,#2640,#2719,#2723,#2800)
|
||||||
|
- [X11] Bugfix: Running without a WM could trigger an assert (#2593,#2601,#2631)
|
||||||
|
- [X11] Bugfix: Occasional crash when an idle display awakes (#2766)
|
||||||
|
- [X11] Bugfix: Prevent BadWindow when creating small windows with a content scale
|
||||||
|
less than 1 (#2754)
|
||||||
|
- [X11] Bugfix: Clamp width and height to >= 1 to prevent BadValue error and app exit
|
||||||
|
- [X11] Bugfix: Floating windows silently became non-floating when hidden (#2276)
|
||||||
|
- [X11] Bugfix: The `libXext` library was not unloaded at termination
|
||||||
|
- [Linux] Bugfix: The header for `ioctl` was only implicitly included (#2778)
|
||||||
|
- [Null] Added Vulkan 'window' surface creation via `VK_EXT_headless_surface`
|
||||||
|
- [Null] Added EGL context creation on Mesa via `EGL_MESA_platform_surfaceless`
|
||||||
|
- [EGL] Allowed native access on Wayland with `GLFW_CONTEXT_CREATION_API` set to
|
||||||
|
`GLFW_NATIVE_CONTEXT_API` (#2518)
|
||||||
|
|
||||||
|
|
||||||
## Contact
|
## Contact
|
||||||
|
|||||||
+1
-1
@@ -310,7 +310,7 @@ With a few changes to your `CMakeLists.txt` you can locate the package and
|
|||||||
target files generated when GLFW is installed.
|
target files generated when GLFW is installed.
|
||||||
|
|
||||||
```cmake
|
```cmake
|
||||||
find_package(glfw3 3.6 REQUIRED)
|
find_package(glfw3 3.5 REQUIRED)
|
||||||
```
|
```
|
||||||
|
|
||||||
Once GLFW has been added to the project, link against it with the `glfw` target.
|
Once GLFW has been added to the project, link against it with the `glfw` target.
|
||||||
|
|||||||
+3
-3
@@ -621,17 +621,17 @@ The format of the string is as follows:
|
|||||||
- The names of the always supported context creation APIs EGL and OSMesa
|
- The names of the always supported context creation APIs EGL and OSMesa
|
||||||
- Any additional compile-time options, APIs and (on Windows) what compiler was used
|
- Any additional compile-time options, APIs and (on Windows) what compiler was used
|
||||||
|
|
||||||
For example, compiling GLFW 3.6 with MinGW-64 as a DLL for Windows, may result
|
For example, compiling GLFW 3.5 with MinGW-64 as a DLL for Windows, may result
|
||||||
in a version string like this:
|
in a version string like this:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
3.6.0 Win32 WGL Null EGL OSMesa MinGW-w64 DLL
|
3.5.0 Win32 WGL Null EGL OSMesa MinGW-w64 DLL
|
||||||
```
|
```
|
||||||
|
|
||||||
Compiling GLFW as a static library for Linux, with both Wayland and X11 enabled, may
|
Compiling GLFW as a static library for Linux, with both Wayland and X11 enabled, may
|
||||||
result in a version string like this:
|
result in a version string like this:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
3.6.0 Wayland X11 GLX Null EGL OSMesa monotonic
|
3.5.0 Wayland X11 GLX Null EGL OSMesa monotonic
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
+44
-2
@@ -1,27 +1,69 @@
|
|||||||
# Release notes for version 3.6 {#news}
|
# Release notes for version 3.5 {#news}
|
||||||
|
|
||||||
[TOC]
|
[TOC]
|
||||||
|
|
||||||
|
|
||||||
## New features {#features}
|
## New features {#features}
|
||||||
|
|
||||||
|
### Unlimited mouse buttons {#unlimited_mouse_buttons}
|
||||||
|
|
||||||
|
GLFW now has an input mode which allows an unlimited number of mouse buttons to
|
||||||
|
be reported by the mouse buttton callback, rather than just the associated
|
||||||
|
[mouse button tokens](@ref buttons). This allows using mouse buttons with
|
||||||
|
values over 8. For compatibility with older versions, the
|
||||||
|
@ref GLFW_UNLIMITED_MOUSE_BUTTONS input mode needs to be set to make use of
|
||||||
|
this.
|
||||||
|
|
||||||
|
|
||||||
|
### EGLConfig native access function {#eglconfig}
|
||||||
|
|
||||||
|
GLFW now provides the @ref glfwGetEGLConfig native access function for querying
|
||||||
|
the `EGLConfig` of a window that has a `EGLSurface`.
|
||||||
|
|
||||||
|
|
||||||
|
### GLXFBConfig native access function {#glxfbconfig}
|
||||||
|
|
||||||
|
GLFW now provides the @ref glfwGetGLXFBConfig native access function for
|
||||||
|
querying the `GLXFBConfig` of a window that has a `GLXWindow`.
|
||||||
|
|
||||||
|
|
||||||
## Caveats {#caveats}
|
## Caveats {#caveats}
|
||||||
|
|
||||||
## Deprecations {#deprecations}
|
## Deprecations {#deprecations}
|
||||||
|
|
||||||
## Removals {#removals}
|
## Removals {#removals}
|
||||||
|
|
||||||
|
### Windows XP and Vista support has been removed {#winxp_vista}
|
||||||
|
|
||||||
|
Support for Windows XP and Vista has been removed. Windows XP has been out of extended
|
||||||
|
support since 2014.
|
||||||
|
|
||||||
|
|
||||||
|
### Original MinGW support has been removed {#original_mingw}
|
||||||
|
|
||||||
|
Support for the now unmaintained original MinGW distribution has been removed.
|
||||||
|
|
||||||
|
This does not apply to the much more capable [MinGW-w64](https://www.mingw-w64.org/),
|
||||||
|
which remains fully supported. MinGW-w64 can build both 32- and 64-bit binaries, is
|
||||||
|
actively maintained and available on many platforms.
|
||||||
|
|
||||||
|
|
||||||
## New symbols {#new_symbols}
|
## New symbols {#new_symbols}
|
||||||
|
|
||||||
### New functions {#new_functions}
|
### New functions {#new_functions}
|
||||||
|
|
||||||
|
- @ref glfwGetEGLConfig
|
||||||
|
- @ref glfwGetGLXFBConfig
|
||||||
|
|
||||||
|
|
||||||
### New types {#new_types}
|
### New types {#new_types}
|
||||||
|
|
||||||
### New constants {#new_constants}
|
### New constants {#new_constants}
|
||||||
|
|
||||||
|
- @ref GLFW_UNLIMITED_MOUSE_BUTTONS
|
||||||
|
|
||||||
## Release notes for earlier versions {#news_archive}
|
## Release notes for earlier versions {#news_archive}
|
||||||
|
|
||||||
- [Release notes for 3.5](https://www.glfw.org/docs/3.5/news.html)
|
|
||||||
- [Release notes for 3.4](https://www.glfw.org/docs/3.4/news.html)
|
- [Release notes for 3.4](https://www.glfw.org/docs/3.4/news.html)
|
||||||
- [Release notes for 3.3](https://www.glfw.org/docs/3.3/news.html)
|
- [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.2](https://www.glfw.org/docs/3.2/news.html)
|
||||||
|
|||||||
+2
-10
@@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* GLFW 3.6 - www.glfw.org
|
* GLFW 3.5 - www.glfw.org
|
||||||
* A library for OpenGL, window and input
|
* A library for OpenGL, window and input
|
||||||
*------------------------------------------------------------------------
|
*------------------------------------------------------------------------
|
||||||
* Copyright (c) 2002-2006 Marcus Geelnard
|
* Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
@@ -291,7 +291,7 @@ extern "C" {
|
|||||||
* features are added to the API but it remains backward-compatible.
|
* features are added to the API but it remains backward-compatible.
|
||||||
* @ingroup init
|
* @ingroup init
|
||||||
*/
|
*/
|
||||||
#define GLFW_VERSION_MINOR 6
|
#define GLFW_VERSION_MINOR 5
|
||||||
/*! @brief The revision number of the GLFW header.
|
/*! @brief The revision number of the GLFW header.
|
||||||
*
|
*
|
||||||
* The revision number of the GLFW header. This is incremented when a bug fix
|
* The revision number of the GLFW header. This is incremented when a bug fix
|
||||||
@@ -1344,10 +1344,6 @@ extern "C" {
|
|||||||
#define GLFW_PLATFORM_NULL 0x00060005
|
#define GLFW_PLATFORM_NULL 0x00060005
|
||||||
/*! @} */
|
/*! @} */
|
||||||
|
|
||||||
/* Reserved platform define for external Emscripten ports: 0x00060006
|
|
||||||
* See https://github.com/pongasoft/emscripten-glfw
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define GLFW_DONT_CARE -1
|
#define GLFW_DONT_CARE -1
|
||||||
|
|
||||||
|
|
||||||
@@ -6174,10 +6170,6 @@ GLFWAPI GLFWwindow* glfwGetCurrentContext(void);
|
|||||||
* @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
|
* @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
|
||||||
* GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR.
|
* GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR.
|
||||||
*
|
*
|
||||||
* @remark __Wayland:__ When the swap interval is greater than zero and the
|
|
||||||
* window is not in view, this function may take a few extra milliseconds to
|
|
||||||
* return.
|
|
||||||
*
|
|
||||||
* @remark __EGL:__ The context of the specified window must be current on the
|
* @remark __EGL:__ The context of the specified window must be current on the
|
||||||
* calling thread.
|
* calling thread.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* GLFW 3.6 - www.glfw.org
|
* GLFW 3.5 - www.glfw.org
|
||||||
* A library for OpenGL, window and input
|
* A library for OpenGL, window and input
|
||||||
*------------------------------------------------------------------------
|
*------------------------------------------------------------------------
|
||||||
* Copyright (c) 2002-2006 Marcus Geelnard
|
* Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
|
|||||||
+5
-10
@@ -10,7 +10,7 @@ add_library(glfw ${GLFW_LIBRARY_TYPE}
|
|||||||
# The time, thread and module code is shared between all backends on a given OS,
|
# The time, thread and module code is shared between all backends on a given OS,
|
||||||
# including the null backend, which still needs those bits to be functional
|
# including the null backend, which still needs those bits to be functional
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
target_sources(glfw PRIVATE macos_time.h macos_time.c posix_thread.h
|
target_sources(glfw PRIVATE cocoa_time.h cocoa_time.c posix_thread.h
|
||||||
posix_module.c posix_thread.c)
|
posix_module.c posix_thread.c)
|
||||||
elseif (WIN32)
|
elseif (WIN32)
|
||||||
target_sources(glfw PRIVATE win32_time.h win32_thread.h win32_module.c
|
target_sources(glfw PRIVATE win32_time.h win32_thread.h win32_module.c
|
||||||
@@ -46,7 +46,7 @@ endif()
|
|||||||
|
|
||||||
if (GLFW_BUILD_X11)
|
if (GLFW_BUILD_X11)
|
||||||
target_compile_definitions(glfw PRIVATE _GLFW_X11)
|
target_compile_definitions(glfw PRIVATE _GLFW_X11)
|
||||||
target_sources(glfw PRIVATE x11_platform.h x11_init.c
|
target_sources(glfw PRIVATE x11_platform.h xkb_unicode.h x11_init.c
|
||||||
x11_monitor.c x11_window.c xkb_unicode.c
|
x11_monitor.c x11_window.c xkb_unicode.c
|
||||||
glx_context.c)
|
glx_context.c)
|
||||||
endif()
|
endif()
|
||||||
@@ -145,11 +145,11 @@ endif()
|
|||||||
if (GLFW_BUILD_COCOA)
|
if (GLFW_BUILD_COCOA)
|
||||||
target_link_libraries(glfw PRIVATE "-framework Cocoa"
|
target_link_libraries(glfw PRIVATE "-framework Cocoa"
|
||||||
"-framework IOKit"
|
"-framework IOKit"
|
||||||
|
"-framework CoreFoundation"
|
||||||
"-framework QuartzCore")
|
"-framework QuartzCore")
|
||||||
|
|
||||||
list(APPEND glfw_PKG_LIBS "-framework Cocoa"
|
set(glfw_PKG_DEPS "")
|
||||||
"-framework IOKit"
|
set(glfw_PKG_LIBS "-framework Cocoa -framework IOKit -framework CoreFoundation -framework QuartzCore")
|
||||||
"-framework QuartzCore")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (GLFW_BUILD_WAYLAND)
|
if (GLFW_BUILD_WAYLAND)
|
||||||
@@ -234,11 +234,6 @@ if (UNIX AND NOT APPLE)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (APPLE)
|
|
||||||
target_link_libraries(glfw PRIVATE "-framework CoreFoundation")
|
|
||||||
list(APPEND glfw_PKG_LIBS "-framework CoreFoundation")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
if (GLFW_USE_HYBRID_HPG)
|
if (GLFW_USE_HYBRID_HPG)
|
||||||
target_compile_definitions(glfw PRIVATE _GLFW_USE_HYBRID_HPG)
|
target_compile_definitions(glfw PRIVATE _GLFW_USE_HYBRID_HPG)
|
||||||
|
|||||||
+36
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Cocoa - www.glfw.org
|
// GLFW 3.5 macOS - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2009-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2009-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
//
|
//
|
||||||
@@ -450,6 +450,41 @@ static GLFWbool initializeTIS(void)
|
|||||||
|
|
||||||
@end // GLFWApplicationDelegate
|
@end // GLFWApplicationDelegate
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
////// GLFW internal API //////
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void* _glfwLoadLocalVulkanLoaderCocoa(void)
|
||||||
|
{
|
||||||
|
CFBundleRef bundle = CFBundleGetMainBundle();
|
||||||
|
if (!bundle)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
CFURLRef frameworksUrl = CFBundleCopyPrivateFrameworksURL(bundle);
|
||||||
|
if (!frameworksUrl)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
CFURLRef loaderUrl = CFURLCreateCopyAppendingPathComponent(
|
||||||
|
kCFAllocatorDefault, frameworksUrl, CFSTR("libvulkan.1.dylib"), false);
|
||||||
|
if (!loaderUrl)
|
||||||
|
{
|
||||||
|
CFRelease(frameworksUrl);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
char path[PATH_MAX];
|
||||||
|
void* handle = NULL;
|
||||||
|
|
||||||
|
if (CFURLGetFileSystemRepresentation(loaderUrl, true, (UInt8*) path, sizeof(path) - 1))
|
||||||
|
handle = _glfwPlatformLoadModule(path);
|
||||||
|
|
||||||
|
CFRelease(loaderUrl);
|
||||||
|
CFRelease(frameworksUrl);
|
||||||
|
return handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
////// GLFW platform API //////
|
////// GLFW platform API //////
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Cocoa - www.glfw.org
|
// GLFW 3.5 Cocoa - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Cocoa - www.glfw.org
|
// GLFW 3.5 Cocoa - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2009-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2009-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
// Copyright (c) 2012 Torsten Walluhn <tw@mad-cad.net>
|
// Copyright (c) 2012 Torsten Walluhn <tw@mad-cad.net>
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Cocoa - www.glfw.org
|
// GLFW 3.5 macOS - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Cocoa - www.glfw.org
|
// GLFW 3.5 macOS - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2009-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2009-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
//
|
//
|
||||||
@@ -291,6 +291,8 @@ void _glfwRestoreVideoModeCocoa(_GLFWmonitor* monitor);
|
|||||||
|
|
||||||
float _glfwTransformYCocoa(float y);
|
float _glfwTransformYCocoa(float y);
|
||||||
|
|
||||||
|
void* _glfwLoadLocalVulkanLoaderCocoa(void);
|
||||||
|
|
||||||
GLFWbool _glfwInitNSGL(void);
|
GLFWbool _glfwInitNSGL(void);
|
||||||
void _glfwTerminateNSGL(void);
|
void _glfwTerminateNSGL(void);
|
||||||
GLFWbool _glfwCreateContextNSGL(_GLFWwindow* window,
|
GLFWbool _glfwCreateContextNSGL(_GLFWwindow* window,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 macOS - www.glfw.org
|
// GLFW 3.5 macOS - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2009-2016 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2009-2016 Camilla Löwy <elmindreda@glfw.org>
|
||||||
//
|
//
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
#if defined(GLFW_BUILD_MACOS_TIMER)
|
#if defined(GLFW_BUILD_COCOA_TIMER)
|
||||||
|
|
||||||
#include <mach/mach_time.h>
|
#include <mach/mach_time.h>
|
||||||
|
|
||||||
@@ -40,7 +40,7 @@ void _glfwPlatformInitTimer(void)
|
|||||||
mach_timebase_info_data_t info;
|
mach_timebase_info_data_t info;
|
||||||
mach_timebase_info(&info);
|
mach_timebase_info(&info);
|
||||||
|
|
||||||
_glfw.timer.macos.frequency = (info.denom * 1e9) / info.numer;
|
_glfw.timer.ns.frequency = (info.denom * 1e9) / info.numer;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t _glfwPlatformGetTimerValue(void)
|
uint64_t _glfwPlatformGetTimerValue(void)
|
||||||
@@ -50,8 +50,8 @@ uint64_t _glfwPlatformGetTimerValue(void)
|
|||||||
|
|
||||||
uint64_t _glfwPlatformGetTimerFrequency(void)
|
uint64_t _glfwPlatformGetTimerFrequency(void)
|
||||||
{
|
{
|
||||||
return _glfw.timer.macos.frequency;
|
return _glfw.timer.ns.frequency;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // GLFW_BUILD_MACOS_TIMER
|
#endif // GLFW_BUILD_COCOA_TIMER
|
||||||
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 macOS - www.glfw.org
|
// GLFW 3.5 macOS - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2009-2021 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2009-2021 Camilla Löwy <elmindreda@glfw.org>
|
||||||
//
|
//
|
||||||
@@ -24,12 +24,12 @@
|
|||||||
//
|
//
|
||||||
//========================================================================
|
//========================================================================
|
||||||
|
|
||||||
#define GLFW_MACOS_LIBRARY_TIMER_STATE _GLFWtimerMacOS macos;
|
#define GLFW_COCOA_LIBRARY_TIMER_STATE _GLFWtimerNS ns;
|
||||||
|
|
||||||
// macOS-specific global timer data
|
// Cocoa-specific global timer data
|
||||||
//
|
//
|
||||||
typedef struct _GLFWtimerMacOS
|
typedef struct _GLFWtimerNS
|
||||||
{
|
{
|
||||||
uint64_t frequency;
|
uint64_t frequency;
|
||||||
} _GLFWtimerMacOS;
|
} _GLFWtimerNS;
|
||||||
|
|
||||||
+1
-29
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Cocoa - www.glfw.org
|
// GLFW 3.5 macOS - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2009-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2009-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
//
|
//
|
||||||
@@ -599,34 +599,6 @@ static const NSRange kEmptyRange = { NSNotFound, 0 };
|
|||||||
_glfwInputKey(window, key, [event keyCode], GLFW_RELEASE, mods);
|
_glfwInputKey(window, key, [event keyCode], GLFW_RELEASE, mods);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)performKeyEquivalent:(NSEvent *)event
|
|
||||||
{
|
|
||||||
// HACK: Some key combinations are consumed before reaching keyDown:
|
|
||||||
// so we claim those events and emit them here
|
|
||||||
const int key = translateKey([event keyCode]);
|
|
||||||
const int mods = translateFlags([event modifierFlags]);
|
|
||||||
|
|
||||||
if (mods & GLFW_MOD_CONTROL)
|
|
||||||
{
|
|
||||||
if (key == GLFW_KEY_TAB || key == GLFW_KEY_ESCAPE)
|
|
||||||
{
|
|
||||||
_glfwInputKey(window, key, [event keyCode], GLFW_PRESS, mods);
|
|
||||||
return YES;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mods & GLFW_MOD_SUPER)
|
|
||||||
{
|
|
||||||
if (key == GLFW_KEY_PERIOD)
|
|
||||||
{
|
|
||||||
_glfwInputKey(window, key, [event keyCode], GLFW_PRESS, mods);
|
|
||||||
return YES;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return [super performKeyEquivalent:event];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)scrollWheel:(NSEvent *)event
|
- (void)scrollWheel:(NSEvent *)event
|
||||||
{
|
{
|
||||||
double deltaX = [event scrollingDeltaX];
|
double deltaX = [event scrollingDeltaX];
|
||||||
|
|||||||
+2
-2
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 - www.glfw.org
|
// GLFW 3.5 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2016 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2016 Camilla Löwy <elmindreda@glfw.org>
|
||||||
@@ -195,7 +195,7 @@ const _GLFWfbconfig* _glfwChooseFBConfig(const _GLFWfbconfig* desired,
|
|||||||
{
|
{
|
||||||
current = alternatives + i;
|
current = alternatives + i;
|
||||||
|
|
||||||
if (desired->stereo && !current->stereo)
|
if (desired->stereo > 0 && current->stereo == 0)
|
||||||
{
|
{
|
||||||
// Stereo is a hard constraint
|
// Stereo is a hard constraint
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
+2
-3
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 EGL - www.glfw.org
|
// GLFW 3.5 EGL - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
@@ -32,7 +32,6 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
|
|
||||||
// Return a description of the specified EGL error
|
// Return a description of the specified EGL error
|
||||||
//
|
//
|
||||||
static const char* getEGLErrorString(EGLint error)
|
static const char* getEGLErrorString(EGLint error)
|
||||||
@@ -675,7 +674,7 @@ GLFWbool _glfwCreateContextEGL(_GLFWwindow* window,
|
|||||||
if (ctxconfig->noerror)
|
if (ctxconfig->noerror)
|
||||||
{
|
{
|
||||||
if (_glfw.egl.KHR_create_context_no_error)
|
if (_glfw.egl.KHR_create_context_no_error)
|
||||||
SET_ATTRIB(EGL_CONTEXT_OPENGL_NO_ERROR_KHR, true);
|
SET_ATTRIB(EGL_CONTEXT_OPENGL_NO_ERROR_KHR, GLFW_TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mask)
|
if (mask)
|
||||||
|
|||||||
+16
-14
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 GLX - www.glfw.org
|
// GLFW 3.5 GLX - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
@@ -119,7 +119,9 @@ static GLFWbool chooseGLXFBConfig(const _GLFWfbconfig* desired,
|
|||||||
u->accumAlphaBits = getGLXFBConfigAttrib(n, GLX_ACCUM_ALPHA_SIZE);
|
u->accumAlphaBits = getGLXFBConfigAttrib(n, GLX_ACCUM_ALPHA_SIZE);
|
||||||
|
|
||||||
u->auxBuffers = getGLXFBConfigAttrib(n, GLX_AUX_BUFFERS);
|
u->auxBuffers = getGLXFBConfigAttrib(n, GLX_AUX_BUFFERS);
|
||||||
u->stereo = getGLXFBConfigAttrib(n, GLX_STEREO);
|
|
||||||
|
if (getGLXFBConfigAttrib(n, GLX_STEREO))
|
||||||
|
u->stereo = GLFW_TRUE;
|
||||||
|
|
||||||
if (_glfw.glx.ARB_multisample)
|
if (_glfw.glx.ARB_multisample)
|
||||||
u->samples = getGLXFBConfigAttrib(n, GLX_SAMPLES);
|
u->samples = getGLXFBConfigAttrib(n, GLX_SAMPLES);
|
||||||
@@ -365,7 +367,7 @@ GLFWbool _glfwInitGLX(void)
|
|||||||
getProcAddressGLX("glXSwapIntervalEXT");
|
getProcAddressGLX("glXSwapIntervalEXT");
|
||||||
|
|
||||||
if (_glfw.glx.SwapIntervalEXT)
|
if (_glfw.glx.SwapIntervalEXT)
|
||||||
_glfw.glx.EXT_swap_control = true;
|
_glfw.glx.EXT_swap_control = GLFW_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (extensionSupportedGLX("GLX_SGI_swap_control"))
|
if (extensionSupportedGLX("GLX_SGI_swap_control"))
|
||||||
@@ -374,7 +376,7 @@ GLFWbool _glfwInitGLX(void)
|
|||||||
getProcAddressGLX("glXSwapIntervalSGI");
|
getProcAddressGLX("glXSwapIntervalSGI");
|
||||||
|
|
||||||
if (_glfw.glx.SwapIntervalSGI)
|
if (_glfw.glx.SwapIntervalSGI)
|
||||||
_glfw.glx.SGI_swap_control = true;
|
_glfw.glx.SGI_swap_control = GLFW_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (extensionSupportedGLX("GLX_MESA_swap_control"))
|
if (extensionSupportedGLX("GLX_MESA_swap_control"))
|
||||||
@@ -383,17 +385,17 @@ GLFWbool _glfwInitGLX(void)
|
|||||||
getProcAddressGLX("glXSwapIntervalMESA");
|
getProcAddressGLX("glXSwapIntervalMESA");
|
||||||
|
|
||||||
if (_glfw.glx.SwapIntervalMESA)
|
if (_glfw.glx.SwapIntervalMESA)
|
||||||
_glfw.glx.MESA_swap_control = true;
|
_glfw.glx.MESA_swap_control = GLFW_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (extensionSupportedGLX("GLX_ARB_multisample"))
|
if (extensionSupportedGLX("GLX_ARB_multisample"))
|
||||||
_glfw.glx.ARB_multisample = true;
|
_glfw.glx.ARB_multisample = GLFW_TRUE;
|
||||||
|
|
||||||
if (extensionSupportedGLX("GLX_ARB_framebuffer_sRGB"))
|
if (extensionSupportedGLX("GLX_ARB_framebuffer_sRGB"))
|
||||||
_glfw.glx.ARB_framebuffer_sRGB = true;
|
_glfw.glx.ARB_framebuffer_sRGB = GLFW_TRUE;
|
||||||
|
|
||||||
if (extensionSupportedGLX("GLX_EXT_framebuffer_sRGB"))
|
if (extensionSupportedGLX("GLX_EXT_framebuffer_sRGB"))
|
||||||
_glfw.glx.EXT_framebuffer_sRGB = true;
|
_glfw.glx.EXT_framebuffer_sRGB = GLFW_TRUE;
|
||||||
|
|
||||||
if (extensionSupportedGLX("GLX_ARB_create_context"))
|
if (extensionSupportedGLX("GLX_ARB_create_context"))
|
||||||
{
|
{
|
||||||
@@ -401,23 +403,23 @@ GLFWbool _glfwInitGLX(void)
|
|||||||
getProcAddressGLX("glXCreateContextAttribsARB");
|
getProcAddressGLX("glXCreateContextAttribsARB");
|
||||||
|
|
||||||
if (_glfw.glx.CreateContextAttribsARB)
|
if (_glfw.glx.CreateContextAttribsARB)
|
||||||
_glfw.glx.ARB_create_context = true;
|
_glfw.glx.ARB_create_context = GLFW_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (extensionSupportedGLX("GLX_ARB_create_context_robustness"))
|
if (extensionSupportedGLX("GLX_ARB_create_context_robustness"))
|
||||||
_glfw.glx.ARB_create_context_robustness = true;
|
_glfw.glx.ARB_create_context_robustness = GLFW_TRUE;
|
||||||
|
|
||||||
if (extensionSupportedGLX("GLX_ARB_create_context_profile"))
|
if (extensionSupportedGLX("GLX_ARB_create_context_profile"))
|
||||||
_glfw.glx.ARB_create_context_profile = true;
|
_glfw.glx.ARB_create_context_profile = GLFW_TRUE;
|
||||||
|
|
||||||
if (extensionSupportedGLX("GLX_EXT_create_context_es2_profile"))
|
if (extensionSupportedGLX("GLX_EXT_create_context_es2_profile"))
|
||||||
_glfw.glx.EXT_create_context_es2_profile = true;
|
_glfw.glx.EXT_create_context_es2_profile = GLFW_TRUE;
|
||||||
|
|
||||||
if (extensionSupportedGLX("GLX_ARB_create_context_no_error"))
|
if (extensionSupportedGLX("GLX_ARB_create_context_no_error"))
|
||||||
_glfw.glx.ARB_create_context_no_error = true;
|
_glfw.glx.ARB_create_context_no_error = GLFW_TRUE;
|
||||||
|
|
||||||
if (extensionSupportedGLX("GLX_ARB_context_flush_control"))
|
if (extensionSupportedGLX("GLX_ARB_context_flush_control"))
|
||||||
_glfw.glx.ARB_context_flush_control = true;
|
_glfw.glx.ARB_context_flush_control = GLFW_TRUE;
|
||||||
|
|
||||||
return GLFW_TRUE;
|
return GLFW_TRUE;
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-5
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 - www.glfw.org
|
// GLFW 3.5 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2018 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2018 Camilla Löwy <elmindreda@glfw.org>
|
||||||
@@ -49,18 +49,18 @@ static GLFWerrorfun _glfwErrorCallback;
|
|||||||
static GLFWallocator _glfwInitAllocator;
|
static GLFWallocator _glfwInitAllocator;
|
||||||
static _GLFWinitconfig _glfwInitHints =
|
static _GLFWinitconfig _glfwInitHints =
|
||||||
{
|
{
|
||||||
.hatButtons = true,
|
.hatButtons = GLFW_TRUE,
|
||||||
.angleType = GLFW_ANGLE_PLATFORM_TYPE_NONE,
|
.angleType = GLFW_ANGLE_PLATFORM_TYPE_NONE,
|
||||||
.platformID = GLFW_ANY_PLATFORM,
|
.platformID = GLFW_ANY_PLATFORM,
|
||||||
.vulkanLoader = NULL,
|
.vulkanLoader = NULL,
|
||||||
.ns =
|
.ns =
|
||||||
{
|
{
|
||||||
.menubar = true,
|
.menubar = GLFW_TRUE,
|
||||||
.chdir = true
|
.chdir = GLFW_TRUE
|
||||||
},
|
},
|
||||||
.x11 =
|
.x11 =
|
||||||
{
|
{
|
||||||
.xcbVulkanSurface = true,
|
.xcbVulkanSurface = GLFW_TRUE,
|
||||||
},
|
},
|
||||||
.wl =
|
.wl =
|
||||||
{
|
{
|
||||||
|
|||||||
+12
-8
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 - www.glfw.org
|
// GLFW 3.5 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
@@ -333,8 +333,10 @@ void _glfwInputChar(_GLFWwindow* window, uint32_t codepoint, int mods, GLFWbool
|
|||||||
void _glfwInputScroll(_GLFWwindow* window, double xoffset, double yoffset)
|
void _glfwInputScroll(_GLFWwindow* window, double xoffset, double yoffset)
|
||||||
{
|
{
|
||||||
assert(window != NULL);
|
assert(window != NULL);
|
||||||
assert(isfinite(xoffset));
|
assert(xoffset > -FLT_MAX);
|
||||||
assert(isfinite(yoffset));
|
assert(xoffset < FLT_MAX);
|
||||||
|
assert(yoffset > -FLT_MAX);
|
||||||
|
assert(yoffset < FLT_MAX);
|
||||||
|
|
||||||
if (window->callbacks.scroll)
|
if (window->callbacks.scroll)
|
||||||
window->callbacks.scroll((GLFWwindow*) window, xoffset, yoffset);
|
window->callbacks.scroll((GLFWwindow*) window, xoffset, yoffset);
|
||||||
@@ -373,8 +375,10 @@ void _glfwInputMouseClick(_GLFWwindow* window, int button, int action, int mods)
|
|||||||
void _glfwInputCursorPos(_GLFWwindow* window, double xpos, double ypos)
|
void _glfwInputCursorPos(_GLFWwindow* window, double xpos, double ypos)
|
||||||
{
|
{
|
||||||
assert(window != NULL);
|
assert(window != NULL);
|
||||||
assert(isfinite(xpos));
|
assert(xpos > -FLT_MAX);
|
||||||
assert(isfinite(ypos));
|
assert(xpos < FLT_MAX);
|
||||||
|
assert(ypos > -FLT_MAX);
|
||||||
|
assert(ypos < FLT_MAX);
|
||||||
|
|
||||||
if (window->virtualCursorPosX == xpos && window->virtualCursorPosY == ypos)
|
if (window->virtualCursorPosX == xpos && window->virtualCursorPosY == ypos)
|
||||||
return;
|
return;
|
||||||
@@ -432,7 +436,6 @@ void _glfwInputJoystickAxis(_GLFWjoystick* js, int axis, float value)
|
|||||||
assert(js != NULL);
|
assert(js != NULL);
|
||||||
assert(axis >= 0);
|
assert(axis >= 0);
|
||||||
assert(axis < js->axisCount);
|
assert(axis < js->axisCount);
|
||||||
assert(isfinite(value));
|
|
||||||
|
|
||||||
js->axes[axis] = value;
|
js->axes[axis] = value;
|
||||||
}
|
}
|
||||||
@@ -815,7 +818,8 @@ GLFWAPI void glfwSetCursorPos(GLFWwindow* handle, double xpos, double ypos)
|
|||||||
_GLFWwindow* window = (_GLFWwindow*) handle;
|
_GLFWwindow* window = (_GLFWwindow*) handle;
|
||||||
assert(window != NULL);
|
assert(window != NULL);
|
||||||
|
|
||||||
if (!isfinite(xpos) || !isfinite(ypos))
|
if (xpos != xpos || xpos < -DBL_MAX || xpos > DBL_MAX ||
|
||||||
|
ypos != ypos || ypos < -DBL_MAX || ypos > DBL_MAX)
|
||||||
{
|
{
|
||||||
_glfwInputError(GLFW_INVALID_VALUE,
|
_glfwInputError(GLFW_INVALID_VALUE,
|
||||||
"Invalid cursor position %f %f",
|
"Invalid cursor position %f %f",
|
||||||
@@ -1495,7 +1499,7 @@ GLFWAPI void glfwSetTime(double time)
|
|||||||
{
|
{
|
||||||
_GLFW_REQUIRE_INIT();
|
_GLFW_REQUIRE_INIT();
|
||||||
|
|
||||||
if (!isfinite(time) || time < 0.0 || time > 18446744073.0)
|
if (time != time || time < 0.0 || time > 18446744073.0)
|
||||||
{
|
{
|
||||||
_glfwInputError(GLFW_INVALID_VALUE, "Invalid time %f", time);
|
_glfwInputError(GLFW_INVALID_VALUE, "Invalid time %f", time);
|
||||||
return;
|
return;
|
||||||
|
|||||||
+51
-51
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 - www.glfw.org
|
// GLFW 3.5 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
@@ -375,16 +375,16 @@ struct _GLFWerror
|
|||||||
//
|
//
|
||||||
struct _GLFWinitconfig
|
struct _GLFWinitconfig
|
||||||
{
|
{
|
||||||
bool hatButtons;
|
GLFWbool hatButtons;
|
||||||
int angleType;
|
int angleType;
|
||||||
int platformID;
|
int platformID;
|
||||||
PFN_vkGetInstanceProcAddr vulkanLoader;
|
PFN_vkGetInstanceProcAddr vulkanLoader;
|
||||||
struct {
|
struct {
|
||||||
bool menubar;
|
GLFWbool menubar;
|
||||||
bool chdir;
|
GLFWbool chdir;
|
||||||
} ns;
|
} ns;
|
||||||
struct {
|
struct {
|
||||||
bool xcbVulkanSurface;
|
GLFWbool xcbVulkanSurface;
|
||||||
} x11;
|
} x11;
|
||||||
struct {
|
struct {
|
||||||
int libdecorMode;
|
int libdecorMode;
|
||||||
@@ -403,18 +403,18 @@ struct _GLFWwndconfig
|
|||||||
int ypos;
|
int ypos;
|
||||||
int width;
|
int width;
|
||||||
int height;
|
int height;
|
||||||
bool resizable;
|
GLFWbool resizable;
|
||||||
bool visible;
|
GLFWbool visible;
|
||||||
bool decorated;
|
GLFWbool decorated;
|
||||||
bool focused;
|
GLFWbool focused;
|
||||||
bool autoIconify;
|
GLFWbool autoIconify;
|
||||||
bool floating;
|
GLFWbool floating;
|
||||||
bool maximized;
|
GLFWbool maximized;
|
||||||
bool centerCursor;
|
GLFWbool centerCursor;
|
||||||
bool focusOnShow;
|
GLFWbool focusOnShow;
|
||||||
bool mousePassthrough;
|
GLFWbool mousePassthrough;
|
||||||
bool scaleToMonitor;
|
GLFWbool scaleToMonitor;
|
||||||
bool scaleFramebuffer;
|
GLFWbool scaleFramebuffer;
|
||||||
struct {
|
struct {
|
||||||
char frameName[256];
|
char frameName[256];
|
||||||
} ns;
|
} ns;
|
||||||
@@ -423,8 +423,8 @@ struct _GLFWwndconfig
|
|||||||
char instanceName[256];
|
char instanceName[256];
|
||||||
} x11;
|
} x11;
|
||||||
struct {
|
struct {
|
||||||
bool keymenu;
|
GLFWbool keymenu;
|
||||||
bool showDefault;
|
GLFWbool showDefault;
|
||||||
} win32;
|
} win32;
|
||||||
struct {
|
struct {
|
||||||
char appId[256];
|
char appId[256];
|
||||||
@@ -443,15 +443,15 @@ struct _GLFWctxconfig
|
|||||||
int source;
|
int source;
|
||||||
int major;
|
int major;
|
||||||
int minor;
|
int minor;
|
||||||
bool forward;
|
GLFWbool forward;
|
||||||
bool debug;
|
GLFWbool debug;
|
||||||
bool noerror;
|
GLFWbool noerror;
|
||||||
int profile;
|
int profile;
|
||||||
int robustness;
|
int robustness;
|
||||||
int release;
|
int release;
|
||||||
_GLFWwindow* share;
|
_GLFWwindow* share;
|
||||||
struct {
|
struct {
|
||||||
bool offline;
|
GLFWbool offline;
|
||||||
} nsgl;
|
} nsgl;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -476,11 +476,11 @@ struct _GLFWfbconfig
|
|||||||
int accumBlueBits;
|
int accumBlueBits;
|
||||||
int accumAlphaBits;
|
int accumAlphaBits;
|
||||||
int auxBuffers;
|
int auxBuffers;
|
||||||
bool stereo;
|
GLFWbool stereo;
|
||||||
int samples;
|
int samples;
|
||||||
bool sRGB;
|
GLFWbool sRGB;
|
||||||
bool doublebuffer;
|
GLFWbool doublebuffer;
|
||||||
bool transparent;
|
GLFWbool transparent;
|
||||||
uintptr_t handle;
|
uintptr_t handle;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -807,22 +807,22 @@ struct _GLFWlibrary
|
|||||||
EGLint major, minor;
|
EGLint major, minor;
|
||||||
GLFWbool prefix;
|
GLFWbool prefix;
|
||||||
|
|
||||||
bool KHR_create_context;
|
GLFWbool KHR_create_context;
|
||||||
bool KHR_create_context_no_error;
|
GLFWbool KHR_create_context_no_error;
|
||||||
bool KHR_gl_colorspace;
|
GLFWbool KHR_gl_colorspace;
|
||||||
bool KHR_get_all_proc_addresses;
|
GLFWbool KHR_get_all_proc_addresses;
|
||||||
bool KHR_context_flush_control;
|
GLFWbool KHR_context_flush_control;
|
||||||
bool EXT_client_extensions;
|
GLFWbool EXT_client_extensions;
|
||||||
bool EXT_platform_base;
|
GLFWbool EXT_platform_base;
|
||||||
bool EXT_platform_x11;
|
GLFWbool EXT_platform_x11;
|
||||||
bool EXT_platform_wayland;
|
GLFWbool EXT_platform_wayland;
|
||||||
bool EXT_present_opaque;
|
GLFWbool EXT_present_opaque;
|
||||||
bool ANGLE_platform_angle;
|
GLFWbool ANGLE_platform_angle;
|
||||||
bool ANGLE_platform_angle_opengl;
|
GLFWbool ANGLE_platform_angle_opengl;
|
||||||
bool ANGLE_platform_angle_d3d;
|
GLFWbool ANGLE_platform_angle_d3d;
|
||||||
bool ANGLE_platform_angle_vulkan;
|
GLFWbool ANGLE_platform_angle_vulkan;
|
||||||
bool ANGLE_platform_angle_metal;
|
GLFWbool ANGLE_platform_angle_metal;
|
||||||
bool MESA_platform_surfaceless;
|
GLFWbool MESA_platform_surfaceless;
|
||||||
|
|
||||||
void* handle;
|
void* handle;
|
||||||
|
|
||||||
@@ -866,14 +866,14 @@ struct _GLFWlibrary
|
|||||||
void* handle;
|
void* handle;
|
||||||
char* extensions[2];
|
char* extensions[2];
|
||||||
PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
|
PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
|
||||||
bool KHR_surface;
|
GLFWbool KHR_surface;
|
||||||
bool KHR_win32_surface;
|
GLFWbool KHR_win32_surface;
|
||||||
bool MVK_macos_surface;
|
GLFWbool MVK_macos_surface;
|
||||||
bool EXT_metal_surface;
|
GLFWbool EXT_metal_surface;
|
||||||
bool KHR_xlib_surface;
|
GLFWbool KHR_xlib_surface;
|
||||||
bool KHR_xcb_surface;
|
GLFWbool KHR_xcb_surface;
|
||||||
bool KHR_wayland_surface;
|
GLFWbool KHR_wayland_surface;
|
||||||
bool EXT_headless_surface;
|
GLFWbool EXT_headless_surface;
|
||||||
} vk;
|
} vk;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Linux - www.glfw.org
|
// GLFW 3.5 Linux - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Linux - www.glfw.org
|
// GLFW 3.5 Linux - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2014 Jonas Ådahl <jadahl@gmail.com>
|
// Copyright (c) 2014 Jonas Ådahl <jadahl@gmail.com>
|
||||||
//
|
//
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 - www.glfw.org
|
// GLFW 3.5 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2006-2018 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2018 Camilla Löwy <elmindreda@glfw.org>
|
||||||
//
|
//
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 - www.glfw.org
|
// GLFW 3.5 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2006-2018 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2018 Camilla Löwy <elmindreda@glfw.org>
|
||||||
//
|
//
|
||||||
|
|||||||
+3
-4
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 - www.glfw.org
|
// GLFW 3.5 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
@@ -467,15 +467,14 @@ GLFWAPI void glfwSetGamma(GLFWmonitor* handle, float gamma)
|
|||||||
unsigned short* values;
|
unsigned short* values;
|
||||||
GLFWgammaramp ramp;
|
GLFWgammaramp ramp;
|
||||||
const GLFWgammaramp* original;
|
const GLFWgammaramp* original;
|
||||||
|
|
||||||
assert(gamma > 0.f);
|
assert(gamma > 0.f);
|
||||||
assert(isfinite(gamma));
|
assert(gamma <= FLT_MAX);
|
||||||
|
|
||||||
_GLFW_REQUIRE_INIT();
|
_GLFW_REQUIRE_INIT();
|
||||||
|
|
||||||
assert(handle != NULL);
|
assert(handle != NULL);
|
||||||
|
|
||||||
if (!isfinite(gamma) || gamma <= 0.f)
|
if (gamma != gamma || gamma <= 0.f || gamma > FLT_MAX)
|
||||||
{
|
{
|
||||||
_glfwInputError(GLFW_INVALID_VALUE, "Invalid gamma value %f", gamma);
|
_glfwInputError(GLFW_INVALID_VALUE, "Invalid gamma value %f", gamma);
|
||||||
return;
|
return;
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 macOS - www.glfw.org
|
// GLFW 3.5 macOS - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2009-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2009-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
//
|
//
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 - www.glfw.org
|
// GLFW 3.5 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2016 Google Inc.
|
// Copyright (c) 2016 Google Inc.
|
||||||
// Copyright (c) 2016-2017 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2016-2017 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 - www.glfw.org
|
// GLFW 3.5 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2016-2017 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2016-2017 Camilla Löwy <elmindreda@glfw.org>
|
||||||
//
|
//
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 - www.glfw.org
|
// GLFW 3.5 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
||||||
//
|
//
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 - www.glfw.org
|
// GLFW 3.5 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2016 Google Inc.
|
// Copyright (c) 2016 Google Inc.
|
||||||
// Copyright (c) 2016-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2016-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 - www.glfw.org
|
// GLFW 3.5 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2016 Google Inc.
|
// Copyright (c) 2016 Google Inc.
|
||||||
// Copyright (c) 2016-2017 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2016-2017 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 - www.glfw.org
|
// GLFW 3.5 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2016 Google Inc.
|
// Copyright (c) 2016 Google Inc.
|
||||||
// Copyright (c) 2016-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2016-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 OSMesa - www.glfw.org
|
// GLFW 3.5 OSMesa - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2016 Google Inc.
|
// Copyright (c) 2016 Google Inc.
|
||||||
// Copyright (c) 2016-2017 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2016-2017 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 - www.glfw.org
|
// GLFW 3.5 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2018 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2018 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
|||||||
+6
-7
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 - www.glfw.org
|
// GLFW 3.5 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2018 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2018 Camilla Löwy <elmindreda@glfw.org>
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
#if defined(GLFW_BUILD_WIN32_TIMER) || \
|
#if defined(GLFW_BUILD_WIN32_TIMER) || \
|
||||||
defined(GLFW_BUILD_WIN32_MODULE) || \
|
defined(GLFW_BUILD_WIN32_MODULE) || \
|
||||||
defined(GLFW_BUILD_WIN32_THREAD) || \
|
defined(GLFW_BUILD_WIN32_THREAD) || \
|
||||||
defined(GLFW_BUILD_MACOS_TIMER) || \
|
defined(GLFW_BUILD_COCOA_TIMER) || \
|
||||||
defined(GLFW_BUILD_POSIX_TIMER) || \
|
defined(GLFW_BUILD_POSIX_TIMER) || \
|
||||||
defined(GLFW_BUILD_POSIX_MODULE) || \
|
defined(GLFW_BUILD_POSIX_MODULE) || \
|
||||||
defined(GLFW_BUILD_POSIX_THREAD) || \
|
defined(GLFW_BUILD_POSIX_THREAD) || \
|
||||||
@@ -184,7 +184,7 @@
|
|||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
#define GLFW_BUILD_WIN32_TIMER
|
#define GLFW_BUILD_WIN32_TIMER
|
||||||
#elif defined(__APPLE__)
|
#elif defined(__APPLE__)
|
||||||
#define GLFW_BUILD_MACOS_TIMER
|
#define GLFW_BUILD_COCOA_TIMER
|
||||||
#else
|
#else
|
||||||
#define GLFW_BUILD_POSIX_TIMER
|
#define GLFW_BUILD_POSIX_TIMER
|
||||||
#endif
|
#endif
|
||||||
@@ -192,9 +192,9 @@
|
|||||||
#if defined(GLFW_BUILD_WIN32_TIMER)
|
#if defined(GLFW_BUILD_WIN32_TIMER)
|
||||||
#include "win32_time.h"
|
#include "win32_time.h"
|
||||||
#define GLFW_PLATFORM_LIBRARY_TIMER_STATE GLFW_WIN32_LIBRARY_TIMER_STATE
|
#define GLFW_PLATFORM_LIBRARY_TIMER_STATE GLFW_WIN32_LIBRARY_TIMER_STATE
|
||||||
#elif defined(GLFW_BUILD_MACOS_TIMER)
|
#elif defined(GLFW_BUILD_COCOA_TIMER)
|
||||||
#include "macos_time.h"
|
#include "cocoa_time.h"
|
||||||
#define GLFW_PLATFORM_LIBRARY_TIMER_STATE GLFW_MACOS_LIBRARY_TIMER_STATE
|
#define GLFW_PLATFORM_LIBRARY_TIMER_STATE GLFW_COCOA_LIBRARY_TIMER_STATE
|
||||||
#elif defined(GLFW_BUILD_POSIX_TIMER)
|
#elif defined(GLFW_BUILD_POSIX_TIMER)
|
||||||
#include "posix_time.h"
|
#include "posix_time.h"
|
||||||
#define GLFW_PLATFORM_LIBRARY_TIMER_STATE GLFW_POSIX_LIBRARY_TIMER_STATE
|
#define GLFW_PLATFORM_LIBRARY_TIMER_STATE GLFW_POSIX_LIBRARY_TIMER_STATE
|
||||||
@@ -207,7 +207,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(_GLFW_WAYLAND) || defined(_GLFW_X11)
|
#if defined(_GLFW_WAYLAND) || defined(_GLFW_X11)
|
||||||
#include "posix_poll.h"
|
|
||||||
#define GLFW_BUILD_POSIX_POLL
|
#define GLFW_BUILD_POSIX_POLL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 POSIX - www.glfw.org
|
// GLFW 3.5 POSIX - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2021 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2021 Camilla Löwy <elmindreda@glfw.org>
|
||||||
//
|
//
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 POSIX - www.glfw.org
|
// GLFW 3.5 POSIX - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2022 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2022 Camilla Löwy <elmindreda@glfw.org>
|
||||||
//
|
//
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 POSIX - www.glfw.org
|
// GLFW 3.5 POSIX - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2022 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2022 Camilla Löwy <elmindreda@glfw.org>
|
||||||
//
|
//
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 POSIX - www.glfw.org
|
// GLFW 3.5 POSIX - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 POSIX - www.glfw.org
|
// GLFW 3.5 POSIX - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 POSIX - www.glfw.org
|
// GLFW 3.5 POSIX - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 POSIX - www.glfw.org
|
// GLFW 3.5 POSIX - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
|||||||
+12
-45
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 - www.glfw.org
|
// GLFW 3.5 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2018 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2018 Camilla Löwy <elmindreda@glfw.org>
|
||||||
@@ -34,40 +34,6 @@
|
|||||||
#define _GLFW_FIND_LOADER 1
|
#define _GLFW_FIND_LOADER 1
|
||||||
#define _GLFW_REQUIRE_LOADER 2
|
#define _GLFW_REQUIRE_LOADER 2
|
||||||
|
|
||||||
#if defined(__APPLE__)
|
|
||||||
|
|
||||||
#include <CoreFoundation/CoreFoundation.h>
|
|
||||||
|
|
||||||
static void* loadLocalVulkanLoaderMacOS(void)
|
|
||||||
{
|
|
||||||
CFBundleRef bundle = CFBundleGetMainBundle();
|
|
||||||
if (!bundle)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
CFURLRef frameworksUrl = CFBundleCopyPrivateFrameworksURL(bundle);
|
|
||||||
if (!frameworksUrl)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
CFURLRef loaderUrl = CFURLCreateCopyAppendingPathComponent(
|
|
||||||
kCFAllocatorDefault, frameworksUrl, CFSTR("libvulkan.1.dylib"), false);
|
|
||||||
if (!loaderUrl)
|
|
||||||
{
|
|
||||||
CFRelease(frameworksUrl);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
char path[PATH_MAX];
|
|
||||||
void* handle = NULL;
|
|
||||||
|
|
||||||
if (CFURLGetFileSystemRepresentation(loaderUrl, true, (UInt8*) path, sizeof(path) - 1))
|
|
||||||
handle = _glfwPlatformLoadModule(path);
|
|
||||||
|
|
||||||
CFRelease(loaderUrl);
|
|
||||||
CFRelease(frameworksUrl);
|
|
||||||
return handle;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // __APPLE__
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
////// GLFW internal API //////
|
////// GLFW internal API //////
|
||||||
@@ -91,10 +57,11 @@ GLFWbool _glfwInitVulkan(int mode)
|
|||||||
_glfw.vk.handle = _glfwPlatformLoadModule(_GLFW_VULKAN_LIBRARY);
|
_glfw.vk.handle = _glfwPlatformLoadModule(_GLFW_VULKAN_LIBRARY);
|
||||||
#elif defined(_WIN32)
|
#elif defined(_WIN32)
|
||||||
_glfw.vk.handle = _glfwPlatformLoadModule("vulkan-1.dll");
|
_glfw.vk.handle = _glfwPlatformLoadModule("vulkan-1.dll");
|
||||||
#elif defined(__APPLE__)
|
#elif defined(_GLFW_COCOA)
|
||||||
_glfw.vk.handle = _glfwPlatformLoadModule("libvulkan.1.dylib");
|
_glfw.vk.handle = _glfwPlatformLoadModule("libvulkan.1.dylib");
|
||||||
if (!_glfw.vk.handle)
|
if (!_glfw.vk.handle)
|
||||||
_glfw.vk.handle = loadLocalVulkanLoaderMacOS();
|
_glfw.vk.handle = _glfwLoadLocalVulkanLoaderCocoa();
|
||||||
|
#elif defined(__APPLE__)
|
||||||
#elif defined(__OpenBSD__) || defined(__NetBSD__)
|
#elif defined(__OpenBSD__) || defined(__NetBSD__)
|
||||||
_glfw.vk.handle = _glfwPlatformLoadModule("libvulkan.so");
|
_glfw.vk.handle = _glfwPlatformLoadModule("libvulkan.so");
|
||||||
#else
|
#else
|
||||||
@@ -163,21 +130,21 @@ GLFWbool _glfwInitVulkan(int mode)
|
|||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
if (strcmp(ep[i].extensionName, "VK_KHR_surface") == 0)
|
if (strcmp(ep[i].extensionName, "VK_KHR_surface") == 0)
|
||||||
_glfw.vk.KHR_surface = true;
|
_glfw.vk.KHR_surface = GLFW_TRUE;
|
||||||
else if (strcmp(ep[i].extensionName, "VK_KHR_win32_surface") == 0)
|
else if (strcmp(ep[i].extensionName, "VK_KHR_win32_surface") == 0)
|
||||||
_glfw.vk.KHR_win32_surface = true;
|
_glfw.vk.KHR_win32_surface = GLFW_TRUE;
|
||||||
else if (strcmp(ep[i].extensionName, "VK_MVK_macos_surface") == 0)
|
else if (strcmp(ep[i].extensionName, "VK_MVK_macos_surface") == 0)
|
||||||
_glfw.vk.MVK_macos_surface = true;
|
_glfw.vk.MVK_macos_surface = GLFW_TRUE;
|
||||||
else if (strcmp(ep[i].extensionName, "VK_EXT_metal_surface") == 0)
|
else if (strcmp(ep[i].extensionName, "VK_EXT_metal_surface") == 0)
|
||||||
_glfw.vk.EXT_metal_surface = true;
|
_glfw.vk.EXT_metal_surface = GLFW_TRUE;
|
||||||
else if (strcmp(ep[i].extensionName, "VK_KHR_xlib_surface") == 0)
|
else if (strcmp(ep[i].extensionName, "VK_KHR_xlib_surface") == 0)
|
||||||
_glfw.vk.KHR_xlib_surface = true;
|
_glfw.vk.KHR_xlib_surface = GLFW_TRUE;
|
||||||
else if (strcmp(ep[i].extensionName, "VK_KHR_xcb_surface") == 0)
|
else if (strcmp(ep[i].extensionName, "VK_KHR_xcb_surface") == 0)
|
||||||
_glfw.vk.KHR_xcb_surface = true;
|
_glfw.vk.KHR_xcb_surface = GLFW_TRUE;
|
||||||
else if (strcmp(ep[i].extensionName, "VK_KHR_wayland_surface") == 0)
|
else if (strcmp(ep[i].extensionName, "VK_KHR_wayland_surface") == 0)
|
||||||
_glfw.vk.KHR_wayland_surface = true;
|
_glfw.vk.KHR_wayland_surface = GLFW_TRUE;
|
||||||
else if (strcmp(ep[i].extensionName, "VK_EXT_headless_surface") == 0)
|
else if (strcmp(ep[i].extensionName, "VK_EXT_headless_surface") == 0)
|
||||||
_glfw.vk.EXT_headless_surface = true;
|
_glfw.vk.EXT_headless_surface = GLFW_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
_glfw_free(ep);
|
_glfw_free(ep);
|
||||||
|
|||||||
+15
-7
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 WGL - www.glfw.org
|
// GLFW 3.5 WGL - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
@@ -186,22 +186,28 @@ static int choosePixelFormatWGL(_GLFWwindow* window,
|
|||||||
u->accumAlphaBits = FIND_ATTRIB_VALUE(WGL_ACCUM_ALPHA_BITS_ARB);
|
u->accumAlphaBits = FIND_ATTRIB_VALUE(WGL_ACCUM_ALPHA_BITS_ARB);
|
||||||
|
|
||||||
u->auxBuffers = FIND_ATTRIB_VALUE(WGL_AUX_BUFFERS_ARB);
|
u->auxBuffers = FIND_ATTRIB_VALUE(WGL_AUX_BUFFERS_ARB);
|
||||||
u->stereo = FIND_ATTRIB_VALUE(WGL_STEREO_ARB);
|
|
||||||
|
if (FIND_ATTRIB_VALUE(WGL_STEREO_ARB))
|
||||||
|
u->stereo = GLFW_TRUE;
|
||||||
|
|
||||||
if (_glfw.wgl.ARB_multisample)
|
if (_glfw.wgl.ARB_multisample)
|
||||||
u->samples = FIND_ATTRIB_VALUE(WGL_SAMPLES_ARB);
|
u->samples = FIND_ATTRIB_VALUE(WGL_SAMPLES_ARB);
|
||||||
|
|
||||||
if (ctxconfig->client == GLFW_OPENGL_API)
|
if (ctxconfig->client == GLFW_OPENGL_API)
|
||||||
{
|
{
|
||||||
if (_glfw.wgl.ARB_framebuffer_sRGB || _glfw.wgl.EXT_framebuffer_sRGB)
|
if (_glfw.wgl.ARB_framebuffer_sRGB ||
|
||||||
u->sRGB = FIND_ATTRIB_VALUE(WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB);
|
_glfw.wgl.EXT_framebuffer_sRGB)
|
||||||
|
{
|
||||||
|
if (FIND_ATTRIB_VALUE(WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB))
|
||||||
|
u->sRGB = GLFW_TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (_glfw.wgl.EXT_colorspace)
|
if (_glfw.wgl.EXT_colorspace)
|
||||||
{
|
{
|
||||||
if (FIND_ATTRIB_VALUE(WGL_COLORSPACE_EXT) == WGL_COLORSPACE_SRGB_EXT)
|
if (FIND_ATTRIB_VALUE(WGL_COLORSPACE_EXT) == WGL_COLORSPACE_SRGB_EXT)
|
||||||
u->sRGB = true;
|
u->sRGB = GLFW_TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -255,7 +261,9 @@ static int choosePixelFormatWGL(_GLFWwindow* window,
|
|||||||
u->accumAlphaBits = pfd.cAccumAlphaBits;
|
u->accumAlphaBits = pfd.cAccumAlphaBits;
|
||||||
|
|
||||||
u->auxBuffers = pfd.cAuxBuffers;
|
u->auxBuffers = pfd.cAuxBuffers;
|
||||||
u->stereo = (pfd.dwFlags & PFD_STEREO);
|
|
||||||
|
if (pfd.dwFlags & PFD_STEREO)
|
||||||
|
u->stereo = GLFW_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
u->handle = pixelFormat;
|
u->handle = pixelFormat;
|
||||||
@@ -656,7 +664,7 @@ GLFWbool _glfwCreateContextWGL(_GLFWwindow* window,
|
|||||||
if (ctxconfig->noerror)
|
if (ctxconfig->noerror)
|
||||||
{
|
{
|
||||||
if (_glfw.wgl.ARB_create_context_no_error)
|
if (_glfw.wgl.ARB_create_context_no_error)
|
||||||
SET_ATTRIB(WGL_CONTEXT_OPENGL_NO_ERROR_ARB, true);
|
SET_ATTRIB(WGL_CONTEXT_OPENGL_NO_ERROR_ARB, GLFW_TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: Only request an explicitly versioned context when necessary, as
|
// NOTE: Only request an explicitly versioned context when necessary, as
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Win32 - www.glfw.org
|
// GLFW 3.5 Win32 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Win32 - www.glfw.org
|
// GLFW 3.5 Win32 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Win32 - www.glfw.org
|
// GLFW 3.5 Win32 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
||||||
//
|
//
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Win32 - www.glfw.org
|
// GLFW 3.5 Win32 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2021 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2021 Camilla Löwy <elmindreda@glfw.org>
|
||||||
//
|
//
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Win32 - www.glfw.org
|
// GLFW 3.5 Win32 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
|||||||
+13
-13
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Win32 - www.glfw.org
|
// GLFW 3.5 Win32 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
@@ -336,18 +336,18 @@ typedef struct _GLFWlibraryWGL
|
|||||||
PFNWGLGETEXTENSIONSSTRINGEXTPROC GetExtensionsStringEXT;
|
PFNWGLGETEXTENSIONSSTRINGEXTPROC GetExtensionsStringEXT;
|
||||||
PFNWGLGETEXTENSIONSSTRINGARBPROC GetExtensionsStringARB;
|
PFNWGLGETEXTENSIONSSTRINGARBPROC GetExtensionsStringARB;
|
||||||
PFNWGLCREATECONTEXTATTRIBSARBPROC CreateContextAttribsARB;
|
PFNWGLCREATECONTEXTATTRIBSARBPROC CreateContextAttribsARB;
|
||||||
bool EXT_swap_control;
|
GLFWbool EXT_swap_control;
|
||||||
bool EXT_colorspace;
|
GLFWbool EXT_colorspace;
|
||||||
bool ARB_multisample;
|
GLFWbool ARB_multisample;
|
||||||
bool ARB_framebuffer_sRGB;
|
GLFWbool ARB_framebuffer_sRGB;
|
||||||
bool EXT_framebuffer_sRGB;
|
GLFWbool EXT_framebuffer_sRGB;
|
||||||
bool ARB_pixel_format;
|
GLFWbool ARB_pixel_format;
|
||||||
bool ARB_create_context;
|
GLFWbool ARB_create_context;
|
||||||
bool ARB_create_context_profile;
|
GLFWbool ARB_create_context_profile;
|
||||||
bool EXT_create_context_es2_profile;
|
GLFWbool EXT_create_context_es2_profile;
|
||||||
bool ARB_create_context_robustness;
|
GLFWbool ARB_create_context_robustness;
|
||||||
bool ARB_create_context_no_error;
|
GLFWbool ARB_create_context_no_error;
|
||||||
bool ARB_context_flush_control;
|
GLFWbool ARB_context_flush_control;
|
||||||
} _GLFWlibraryWGL;
|
} _GLFWlibraryWGL;
|
||||||
|
|
||||||
// Win32-specific per-window data
|
// Win32-specific per-window data
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Win32 - www.glfw.org
|
// GLFW 3.5 Win32 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Win32 - www.glfw.org
|
// GLFW 3.5 Win32 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Win32 - www.glfw.org
|
// GLFW 3.5 Win32 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Win32 - www.glfw.org
|
// GLFW 3.5 Win32 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
|||||||
+5
-6
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Win32 - www.glfw.org
|
// GLFW 3.5 Win32 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
@@ -711,12 +711,11 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM l
|
|||||||
const int mods = getKeyMods();
|
const int mods = getKeyMods();
|
||||||
|
|
||||||
scancode = (HIWORD(lParam) & (KF_EXTENDED | 0xff));
|
scancode = (HIWORD(lParam) & (KF_EXTENDED | 0xff));
|
||||||
if (!(scancode & 0xff))
|
if (!scancode)
|
||||||
{
|
{
|
||||||
// NOTE: Both media keys and the synthetic key messages from Windows
|
// NOTE: Some synthetic key messages have a scancode of zero
|
||||||
// Clipboard History are reported with a scancode of zero
|
// HACK: Map the virtual key back to a usable scancode
|
||||||
// HACK: Map the virtual key to a scancode but preserve extended bit
|
scancode = MapVirtualKeyW((UINT) wParam, MAPVK_VK_TO_VSC);
|
||||||
scancode |= MapVirtualKeyW((UINT) wParam, MAPVK_VK_TO_VSC);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// HACK: Alt+PrtSc has a different scancode than just PrtSc
|
// HACK: Alt+PrtSc has a different scancode than just PrtSc
|
||||||
|
|||||||
+40
-39
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 - www.glfw.org
|
// GLFW 3.5 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <float.h>
|
#include <float.h>
|
||||||
#include <math.h>
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
////// GLFW event API //////
|
////// GLFW event API //////
|
||||||
@@ -135,9 +135,9 @@ void _glfwInputWindowContentScale(_GLFWwindow* window, float xscale, float yscal
|
|||||||
{
|
{
|
||||||
assert(window != NULL);
|
assert(window != NULL);
|
||||||
assert(xscale > 0.f);
|
assert(xscale > 0.f);
|
||||||
assert(isfinite(xscale));
|
assert(xscale < FLT_MAX);
|
||||||
assert(yscale > 0.f);
|
assert(yscale > 0.f);
|
||||||
assert(isfinite(yscale));
|
assert(yscale < FLT_MAX);
|
||||||
|
|
||||||
if (window->callbacks.scale)
|
if (window->callbacks.scale)
|
||||||
window->callbacks.scale((GLFWwindow*) window, xscale, yscale);
|
window->callbacks.scale((GLFWwindow*) window, xscale, yscale);
|
||||||
@@ -265,16 +265,16 @@ void glfwDefaultWindowHints(void)
|
|||||||
|
|
||||||
// The default is a focused, visible, resizable window with decorations
|
// The default is a focused, visible, resizable window with decorations
|
||||||
memset(&_glfw.hints.window, 0, sizeof(_glfw.hints.window));
|
memset(&_glfw.hints.window, 0, sizeof(_glfw.hints.window));
|
||||||
_glfw.hints.window.resizable = true;
|
_glfw.hints.window.resizable = GLFW_TRUE;
|
||||||
_glfw.hints.window.visible = true;
|
_glfw.hints.window.visible = GLFW_TRUE;
|
||||||
_glfw.hints.window.decorated = true;
|
_glfw.hints.window.decorated = GLFW_TRUE;
|
||||||
_glfw.hints.window.focused = true;
|
_glfw.hints.window.focused = GLFW_TRUE;
|
||||||
_glfw.hints.window.autoIconify = true;
|
_glfw.hints.window.autoIconify = GLFW_TRUE;
|
||||||
_glfw.hints.window.centerCursor = true;
|
_glfw.hints.window.centerCursor = GLFW_TRUE;
|
||||||
_glfw.hints.window.focusOnShow = true;
|
_glfw.hints.window.focusOnShow = GLFW_TRUE;
|
||||||
_glfw.hints.window.xpos = GLFW_ANY_POSITION;
|
_glfw.hints.window.xpos = GLFW_ANY_POSITION;
|
||||||
_glfw.hints.window.ypos = GLFW_ANY_POSITION;
|
_glfw.hints.window.ypos = GLFW_ANY_POSITION;
|
||||||
_glfw.hints.window.scaleFramebuffer = true;
|
_glfw.hints.window.scaleFramebuffer = GLFW_TRUE;
|
||||||
|
|
||||||
// The default is 24 bits of color, 24 bits of depth and 8 bits of stencil,
|
// The default is 24 bits of color, 24 bits of depth and 8 bits of stencil,
|
||||||
// double buffered
|
// double buffered
|
||||||
@@ -285,7 +285,7 @@ void glfwDefaultWindowHints(void)
|
|||||||
_glfw.hints.framebuffer.alphaBits = 8;
|
_glfw.hints.framebuffer.alphaBits = 8;
|
||||||
_glfw.hints.framebuffer.depthBits = 24;
|
_glfw.hints.framebuffer.depthBits = 24;
|
||||||
_glfw.hints.framebuffer.stencilBits = 8;
|
_glfw.hints.framebuffer.stencilBits = 8;
|
||||||
_glfw.hints.framebuffer.doublebuffer = true;
|
_glfw.hints.framebuffer.doublebuffer = GLFW_TRUE;
|
||||||
|
|
||||||
// The default is to select the highest available refresh rate
|
// The default is to select the highest available refresh rate
|
||||||
_glfw.hints.refreshRate = GLFW_DONT_CARE;
|
_glfw.hints.refreshRate = GLFW_DONT_CARE;
|
||||||
@@ -331,40 +331,40 @@ GLFWAPI void glfwWindowHint(int hint, int value)
|
|||||||
_glfw.hints.framebuffer.auxBuffers = value;
|
_glfw.hints.framebuffer.auxBuffers = value;
|
||||||
return;
|
return;
|
||||||
case GLFW_STEREO:
|
case GLFW_STEREO:
|
||||||
_glfw.hints.framebuffer.stereo = value;
|
_glfw.hints.framebuffer.stereo = value ? GLFW_TRUE : GLFW_FALSE;
|
||||||
return;
|
return;
|
||||||
case GLFW_DOUBLEBUFFER:
|
case GLFW_DOUBLEBUFFER:
|
||||||
_glfw.hints.framebuffer.doublebuffer = value;
|
_glfw.hints.framebuffer.doublebuffer = value ? GLFW_TRUE : GLFW_FALSE;
|
||||||
return;
|
return;
|
||||||
case GLFW_TRANSPARENT_FRAMEBUFFER:
|
case GLFW_TRANSPARENT_FRAMEBUFFER:
|
||||||
_glfw.hints.framebuffer.transparent = value;
|
_glfw.hints.framebuffer.transparent = value ? GLFW_TRUE : GLFW_FALSE;
|
||||||
return;
|
return;
|
||||||
case GLFW_SAMPLES:
|
case GLFW_SAMPLES:
|
||||||
_glfw.hints.framebuffer.samples = value;
|
_glfw.hints.framebuffer.samples = value;
|
||||||
return;
|
return;
|
||||||
case GLFW_SRGB_CAPABLE:
|
case GLFW_SRGB_CAPABLE:
|
||||||
_glfw.hints.framebuffer.sRGB = value;
|
_glfw.hints.framebuffer.sRGB = value ? GLFW_TRUE : GLFW_FALSE;
|
||||||
return;
|
return;
|
||||||
case GLFW_RESIZABLE:
|
case GLFW_RESIZABLE:
|
||||||
_glfw.hints.window.resizable = value;
|
_glfw.hints.window.resizable = value ? GLFW_TRUE : GLFW_FALSE;
|
||||||
return;
|
return;
|
||||||
case GLFW_DECORATED:
|
case GLFW_DECORATED:
|
||||||
_glfw.hints.window.decorated = value;
|
_glfw.hints.window.decorated = value ? GLFW_TRUE : GLFW_FALSE;
|
||||||
return;
|
return;
|
||||||
case GLFW_FOCUSED:
|
case GLFW_FOCUSED:
|
||||||
_glfw.hints.window.focused = value;
|
_glfw.hints.window.focused = value ? GLFW_TRUE : GLFW_FALSE;
|
||||||
return;
|
return;
|
||||||
case GLFW_AUTO_ICONIFY:
|
case GLFW_AUTO_ICONIFY:
|
||||||
_glfw.hints.window.autoIconify = value;
|
_glfw.hints.window.autoIconify = value ? GLFW_TRUE : GLFW_FALSE;
|
||||||
return;
|
return;
|
||||||
case GLFW_FLOATING:
|
case GLFW_FLOATING:
|
||||||
_glfw.hints.window.floating = value;
|
_glfw.hints.window.floating = value ? GLFW_TRUE : GLFW_FALSE;
|
||||||
return;
|
return;
|
||||||
case GLFW_MAXIMIZED:
|
case GLFW_MAXIMIZED:
|
||||||
_glfw.hints.window.maximized = value;
|
_glfw.hints.window.maximized = value ? GLFW_TRUE : GLFW_FALSE;
|
||||||
return;
|
return;
|
||||||
case GLFW_VISIBLE:
|
case GLFW_VISIBLE:
|
||||||
_glfw.hints.window.visible = value;
|
_glfw.hints.window.visible = value ? GLFW_TRUE : GLFW_FALSE;
|
||||||
return;
|
return;
|
||||||
case GLFW_POSITION_X:
|
case GLFW_POSITION_X:
|
||||||
_glfw.hints.window.xpos = value;
|
_glfw.hints.window.xpos = value;
|
||||||
@@ -373,29 +373,29 @@ GLFWAPI void glfwWindowHint(int hint, int value)
|
|||||||
_glfw.hints.window.ypos = value;
|
_glfw.hints.window.ypos = value;
|
||||||
return;
|
return;
|
||||||
case GLFW_WIN32_KEYBOARD_MENU:
|
case GLFW_WIN32_KEYBOARD_MENU:
|
||||||
_glfw.hints.window.win32.keymenu = value;
|
_glfw.hints.window.win32.keymenu = value ? GLFW_TRUE : GLFW_FALSE;
|
||||||
return;
|
return;
|
||||||
case GLFW_WIN32_SHOWDEFAULT:
|
case GLFW_WIN32_SHOWDEFAULT:
|
||||||
_glfw.hints.window.win32.showDefault = value;
|
_glfw.hints.window.win32.showDefault = value ? GLFW_TRUE : GLFW_FALSE;
|
||||||
return;
|
return;
|
||||||
case GLFW_COCOA_GRAPHICS_SWITCHING:
|
case GLFW_COCOA_GRAPHICS_SWITCHING:
|
||||||
_glfw.hints.context.nsgl.offline = value;
|
_glfw.hints.context.nsgl.offline = value ? GLFW_TRUE : GLFW_FALSE;
|
||||||
return;
|
return;
|
||||||
case GLFW_SCALE_TO_MONITOR:
|
case GLFW_SCALE_TO_MONITOR:
|
||||||
_glfw.hints.window.scaleToMonitor = value;
|
_glfw.hints.window.scaleToMonitor = value ? GLFW_TRUE : GLFW_FALSE;
|
||||||
return;
|
return;
|
||||||
case GLFW_SCALE_FRAMEBUFFER:
|
case GLFW_SCALE_FRAMEBUFFER:
|
||||||
case GLFW_COCOA_RETINA_FRAMEBUFFER:
|
case GLFW_COCOA_RETINA_FRAMEBUFFER:
|
||||||
_glfw.hints.window.scaleFramebuffer = value;
|
_glfw.hints.window.scaleFramebuffer = value ? GLFW_TRUE : GLFW_FALSE;
|
||||||
return;
|
return;
|
||||||
case GLFW_CENTER_CURSOR:
|
case GLFW_CENTER_CURSOR:
|
||||||
_glfw.hints.window.centerCursor = value;
|
_glfw.hints.window.centerCursor = value ? GLFW_TRUE : GLFW_FALSE;
|
||||||
return;
|
return;
|
||||||
case GLFW_FOCUS_ON_SHOW:
|
case GLFW_FOCUS_ON_SHOW:
|
||||||
_glfw.hints.window.focusOnShow = value;
|
_glfw.hints.window.focusOnShow = value ? GLFW_TRUE : GLFW_FALSE;
|
||||||
return;
|
return;
|
||||||
case GLFW_MOUSE_PASSTHROUGH:
|
case GLFW_MOUSE_PASSTHROUGH:
|
||||||
_glfw.hints.window.mousePassthrough = value;
|
_glfw.hints.window.mousePassthrough = value ? GLFW_TRUE : GLFW_FALSE;
|
||||||
return;
|
return;
|
||||||
case GLFW_CLIENT_API:
|
case GLFW_CLIENT_API:
|
||||||
_glfw.hints.context.client = value;
|
_glfw.hints.context.client = value;
|
||||||
@@ -413,13 +413,13 @@ GLFWAPI void glfwWindowHint(int hint, int value)
|
|||||||
_glfw.hints.context.robustness = value;
|
_glfw.hints.context.robustness = value;
|
||||||
return;
|
return;
|
||||||
case GLFW_OPENGL_FORWARD_COMPAT:
|
case GLFW_OPENGL_FORWARD_COMPAT:
|
||||||
_glfw.hints.context.forward = value;
|
_glfw.hints.context.forward = value ? GLFW_TRUE : GLFW_FALSE;
|
||||||
return;
|
return;
|
||||||
case GLFW_CONTEXT_DEBUG:
|
case GLFW_CONTEXT_DEBUG:
|
||||||
_glfw.hints.context.debug = value;
|
_glfw.hints.context.debug = value ? GLFW_TRUE : GLFW_FALSE;
|
||||||
return;
|
return;
|
||||||
case GLFW_CONTEXT_NO_ERROR:
|
case GLFW_CONTEXT_NO_ERROR:
|
||||||
_glfw.hints.context.noerror = value;
|
_glfw.hints.context.noerror = value ? GLFW_TRUE : GLFW_FALSE;
|
||||||
return;
|
return;
|
||||||
case GLFW_OPENGL_PROFILE:
|
case GLFW_OPENGL_PROFILE:
|
||||||
_glfw.hints.context.profile = value;
|
_glfw.hints.context.profile = value;
|
||||||
@@ -776,7 +776,7 @@ GLFWAPI float glfwGetWindowOpacity(GLFWwindow* handle)
|
|||||||
|
|
||||||
GLFWAPI void glfwSetWindowOpacity(GLFWwindow* handle, float opacity)
|
GLFWAPI void glfwSetWindowOpacity(GLFWwindow* handle, float opacity)
|
||||||
{
|
{
|
||||||
assert(isfinite(opacity));
|
assert(opacity == opacity);
|
||||||
assert(opacity >= 0.f);
|
assert(opacity >= 0.f);
|
||||||
assert(opacity <= 1.f);
|
assert(opacity <= 1.f);
|
||||||
|
|
||||||
@@ -785,7 +785,7 @@ GLFWAPI void glfwSetWindowOpacity(GLFWwindow* handle, float opacity)
|
|||||||
_GLFWwindow* window = (_GLFWwindow*) handle;
|
_GLFWwindow* window = (_GLFWwindow*) handle;
|
||||||
assert(window != NULL);
|
assert(window != NULL);
|
||||||
|
|
||||||
if (!isfinite(opacity) || opacity < 0.f || opacity > 1.f)
|
if (opacity != opacity || opacity < 0.f || opacity > 1.f)
|
||||||
{
|
{
|
||||||
_glfwInputError(GLFW_INVALID_VALUE, "Invalid window opacity %f", opacity);
|
_glfwInputError(GLFW_INVALID_VALUE, "Invalid window opacity %f", opacity);
|
||||||
return;
|
return;
|
||||||
@@ -1178,10 +1178,11 @@ GLFWAPI void glfwWaitEvents(void)
|
|||||||
GLFWAPI void glfwWaitEventsTimeout(double timeout)
|
GLFWAPI void glfwWaitEventsTimeout(double timeout)
|
||||||
{
|
{
|
||||||
_GLFW_REQUIRE_INIT();
|
_GLFW_REQUIRE_INIT();
|
||||||
assert(isfinite(timeout));
|
assert(timeout == timeout);
|
||||||
assert(timeout >= 0.0);
|
assert(timeout >= 0.0);
|
||||||
|
assert(timeout <= DBL_MAX);
|
||||||
|
|
||||||
if (!isfinite(timeout) || timeout < 0.0)
|
if (timeout != timeout || timeout < 0.0 || timeout > DBL_MAX)
|
||||||
{
|
{
|
||||||
_glfwInputError(GLFW_INVALID_VALUE, "Invalid time %f", timeout);
|
_glfwInputError(GLFW_INVALID_VALUE, "Invalid time %f", timeout);
|
||||||
return;
|
return;
|
||||||
|
|||||||
+10
-8
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Wayland - www.glfw.org
|
// GLFW 3.5 Wayland - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2014 Jonas Ådahl <jadahl@gmail.com>
|
// Copyright (c) 2014 Jonas Ådahl <jadahl@gmail.com>
|
||||||
//
|
//
|
||||||
@@ -135,7 +135,7 @@ static void registryHandleGlobal(void* userData,
|
|||||||
{
|
{
|
||||||
_glfw.wl.seat =
|
_glfw.wl.seat =
|
||||||
wl_registry_bind(registry, name, &wl_seat_interface,
|
wl_registry_bind(registry, name, &wl_seat_interface,
|
||||||
_glfw_min(8, version));
|
_glfw_min(5, version));
|
||||||
_glfwAddSeatListenerWayland(_glfw.wl.seat);
|
_glfwAddSeatListenerWayland(_glfw.wl.seat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -244,7 +244,10 @@ static void libdecorReadyCallback(void* userData,
|
|||||||
uint32_t time)
|
uint32_t time)
|
||||||
{
|
{
|
||||||
_glfw.wl.libdecor.ready = GLFW_TRUE;
|
_glfw.wl.libdecor.ready = GLFW_TRUE;
|
||||||
wl_callback_destroy(callback);
|
|
||||||
|
assert(_glfw.wl.libdecor.callback == callback);
|
||||||
|
wl_callback_destroy(_glfw.wl.libdecor.callback);
|
||||||
|
_glfw.wl.libdecor.callback = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct wl_callback_listener libdecorReadyListener =
|
static const struct wl_callback_listener libdecorReadyListener =
|
||||||
@@ -798,8 +801,6 @@ int _glfwInitWayland(void)
|
|||||||
_glfwPlatformGetModuleSymbol(_glfw.wl.libdecor.handle, "libdecor_frame_unset_capabilities");
|
_glfwPlatformGetModuleSymbol(_glfw.wl.libdecor.handle, "libdecor_frame_unset_capabilities");
|
||||||
_glfw.wl.libdecor.libdecor_frame_set_visibility_ = (PFN_libdecor_frame_set_visibility)
|
_glfw.wl.libdecor.libdecor_frame_set_visibility_ = (PFN_libdecor_frame_set_visibility)
|
||||||
_glfwPlatformGetModuleSymbol(_glfw.wl.libdecor.handle, "libdecor_frame_set_visibility");
|
_glfwPlatformGetModuleSymbol(_glfw.wl.libdecor.handle, "libdecor_frame_set_visibility");
|
||||||
_glfw.wl.libdecor.libdecor_frame_is_visible_ = (PFN_libdecor_frame_is_visible)
|
|
||||||
_glfwPlatformGetModuleSymbol(_glfw.wl.libdecor.handle, "libdecor_frame_is_visible");
|
|
||||||
_glfw.wl.libdecor.libdecor_frame_get_xdg_toplevel_ = (PFN_libdecor_frame_get_xdg_toplevel)
|
_glfw.wl.libdecor.libdecor_frame_get_xdg_toplevel_ = (PFN_libdecor_frame_get_xdg_toplevel)
|
||||||
_glfwPlatformGetModuleSymbol(_glfw.wl.libdecor.handle, "libdecor_frame_get_xdg_toplevel");
|
_glfwPlatformGetModuleSymbol(_glfw.wl.libdecor.handle, "libdecor_frame_get_xdg_toplevel");
|
||||||
_glfw.wl.libdecor.libdecor_configuration_get_content_size_ = (PFN_libdecor_configuration_get_content_size)
|
_glfw.wl.libdecor.libdecor_configuration_get_content_size_ = (PFN_libdecor_configuration_get_content_size)
|
||||||
@@ -831,7 +832,6 @@ int _glfwInitWayland(void)
|
|||||||
!_glfw.wl.libdecor.libdecor_frame_set_capabilities_ ||
|
!_glfw.wl.libdecor.libdecor_frame_set_capabilities_ ||
|
||||||
!_glfw.wl.libdecor.libdecor_frame_unset_capabilities_ ||
|
!_glfw.wl.libdecor.libdecor_frame_unset_capabilities_ ||
|
||||||
!_glfw.wl.libdecor.libdecor_frame_set_visibility_ ||
|
!_glfw.wl.libdecor.libdecor_frame_set_visibility_ ||
|
||||||
!_glfw.wl.libdecor.libdecor_frame_is_visible_ ||
|
|
||||||
!_glfw.wl.libdecor.libdecor_frame_get_xdg_toplevel_ ||
|
!_glfw.wl.libdecor.libdecor_frame_get_xdg_toplevel_ ||
|
||||||
!_glfw.wl.libdecor.libdecor_configuration_get_content_size_ ||
|
!_glfw.wl.libdecor.libdecor_configuration_get_content_size_ ||
|
||||||
!_glfw.wl.libdecor.libdecor_configuration_get_window_state_ ||
|
!_glfw.wl.libdecor.libdecor_configuration_get_window_state_ ||
|
||||||
@@ -881,8 +881,10 @@ int _glfwInitWayland(void)
|
|||||||
libdecor_dispatch(_glfw.wl.libdecor.context, 0);
|
libdecor_dispatch(_glfw.wl.libdecor.context, 0);
|
||||||
|
|
||||||
// Create sync point to "know" when libdecor is ready for use
|
// Create sync point to "know" when libdecor is ready for use
|
||||||
struct wl_callback* callback = wl_display_sync(_glfw.wl.display);
|
_glfw.wl.libdecor.callback = wl_display_sync(_glfw.wl.display);
|
||||||
wl_callback_add_listener(callback, &libdecorReadyListener, NULL);
|
wl_callback_add_listener(_glfw.wl.libdecor.callback,
|
||||||
|
&libdecorReadyListener,
|
||||||
|
NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Wayland - www.glfw.org
|
// GLFW 3.5 Wayland - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2014 Jonas Ådahl <jadahl@gmail.com>
|
// Copyright (c) 2014 Jonas Ådahl <jadahl@gmail.com>
|
||||||
//
|
//
|
||||||
|
|||||||
+5
-6
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Wayland - www.glfw.org
|
// GLFW 3.5 Wayland - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2014 Jonas Ådahl <jadahl@gmail.com>
|
// Copyright (c) 2014 Jonas Ådahl <jadahl@gmail.com>
|
||||||
//
|
//
|
||||||
@@ -42,6 +42,8 @@ typedef struct VkWaylandSurfaceCreateInfoKHR
|
|||||||
typedef VkResult (APIENTRY *PFN_vkCreateWaylandSurfaceKHR)(VkInstance,const VkWaylandSurfaceCreateInfoKHR*,const VkAllocationCallbacks*,VkSurfaceKHR*);
|
typedef VkResult (APIENTRY *PFN_vkCreateWaylandSurfaceKHR)(VkInstance,const VkWaylandSurfaceCreateInfoKHR*,const VkAllocationCallbacks*,VkSurfaceKHR*);
|
||||||
typedef VkBool32 (APIENTRY *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice,uint32_t,struct wl_display*);
|
typedef VkBool32 (APIENTRY *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice,uint32_t,struct wl_display*);
|
||||||
|
|
||||||
|
#include "posix_poll.h"
|
||||||
|
|
||||||
typedef int (* PFN_wl_display_flush)(struct wl_display* display);
|
typedef int (* PFN_wl_display_flush)(struct wl_display* display);
|
||||||
typedef void (* PFN_wl_display_cancel_read)(struct wl_display* display);
|
typedef void (* PFN_wl_display_cancel_read)(struct wl_display* display);
|
||||||
typedef int (* PFN_wl_display_dispatch_pending)(struct wl_display* display);
|
typedef int (* PFN_wl_display_dispatch_pending)(struct wl_display* display);
|
||||||
@@ -311,7 +313,6 @@ typedef void (* PFN_libdecor_frame_unset_maximized)(struct libdecor_frame*);
|
|||||||
typedef void (* PFN_libdecor_frame_set_capabilities)(struct libdecor_frame*,enum libdecor_capabilities);
|
typedef void (* PFN_libdecor_frame_set_capabilities)(struct libdecor_frame*,enum libdecor_capabilities);
|
||||||
typedef void (* PFN_libdecor_frame_unset_capabilities)(struct libdecor_frame*,enum libdecor_capabilities);
|
typedef void (* PFN_libdecor_frame_unset_capabilities)(struct libdecor_frame*,enum libdecor_capabilities);
|
||||||
typedef void (* PFN_libdecor_frame_set_visibility)(struct libdecor_frame*,bool visible);
|
typedef void (* PFN_libdecor_frame_set_visibility)(struct libdecor_frame*,bool visible);
|
||||||
typedef bool (* PFN_libdecor_frame_is_visible)(struct libdecor_frame*);
|
|
||||||
typedef struct xdg_toplevel* (* PFN_libdecor_frame_get_xdg_toplevel)(struct libdecor_frame*);
|
typedef struct xdg_toplevel* (* PFN_libdecor_frame_get_xdg_toplevel)(struct libdecor_frame*);
|
||||||
typedef bool (* PFN_libdecor_configuration_get_content_size)(struct libdecor_configuration*,struct libdecor_frame*,int*,int*);
|
typedef bool (* PFN_libdecor_configuration_get_content_size)(struct libdecor_configuration*,struct libdecor_frame*,int*,int*);
|
||||||
typedef bool (* PFN_libdecor_configuration_get_window_state)(struct libdecor_configuration*,enum libdecor_window_state*);
|
typedef bool (* PFN_libdecor_configuration_get_window_state)(struct libdecor_configuration*,enum libdecor_window_state*);
|
||||||
@@ -337,7 +338,6 @@ typedef void (* PFN_libdecor_state_free)(struct libdecor_state*);
|
|||||||
#define libdecor_frame_set_capabilities _glfw.wl.libdecor.libdecor_frame_set_capabilities_
|
#define libdecor_frame_set_capabilities _glfw.wl.libdecor.libdecor_frame_set_capabilities_
|
||||||
#define libdecor_frame_unset_capabilities _glfw.wl.libdecor.libdecor_frame_unset_capabilities_
|
#define libdecor_frame_unset_capabilities _glfw.wl.libdecor.libdecor_frame_unset_capabilities_
|
||||||
#define libdecor_frame_set_visibility _glfw.wl.libdecor.libdecor_frame_set_visibility_
|
#define libdecor_frame_set_visibility _glfw.wl.libdecor.libdecor_frame_set_visibility_
|
||||||
#define libdecor_frame_is_visible _glfw.wl.libdecor.libdecor_frame_is_visible_
|
|
||||||
#define libdecor_frame_get_xdg_toplevel _glfw.wl.libdecor.libdecor_frame_get_xdg_toplevel_
|
#define libdecor_frame_get_xdg_toplevel _glfw.wl.libdecor.libdecor_frame_get_xdg_toplevel_
|
||||||
#define libdecor_configuration_get_content_size _glfw.wl.libdecor.libdecor_configuration_get_content_size_
|
#define libdecor_configuration_get_content_size _glfw.wl.libdecor.libdecor_configuration_get_content_size_
|
||||||
#define libdecor_configuration_get_window_state _glfw.wl.libdecor.libdecor_configuration_get_window_state_
|
#define libdecor_configuration_get_window_state _glfw.wl.libdecor.libdecor_configuration_get_window_state_
|
||||||
@@ -377,6 +377,7 @@ typedef struct _GLFWwindowWayland
|
|||||||
GLFWbool transparent;
|
GLFWbool transparent;
|
||||||
GLFWbool scaleFramebuffer;
|
GLFWbool scaleFramebuffer;
|
||||||
struct wl_surface* surface;
|
struct wl_surface* surface;
|
||||||
|
struct wl_callback* callback;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
struct wl_event_queue* queue;
|
struct wl_event_queue* queue;
|
||||||
@@ -497,8 +498,6 @@ typedef struct _GLFWlibraryWayland
|
|||||||
double pointerY;
|
double pointerY;
|
||||||
double scrollX;
|
double scrollX;
|
||||||
double scrollY;
|
double scrollY;
|
||||||
double discreteX;
|
|
||||||
double discreteY;
|
|
||||||
int button;
|
int button;
|
||||||
int action;
|
int action;
|
||||||
} pending;
|
} pending;
|
||||||
@@ -596,6 +595,7 @@ typedef struct _GLFWlibraryWayland
|
|||||||
struct {
|
struct {
|
||||||
void* handle;
|
void* handle;
|
||||||
struct libdecor* context;
|
struct libdecor* context;
|
||||||
|
struct wl_callback* callback;
|
||||||
GLFWbool ready;
|
GLFWbool ready;
|
||||||
PFN_libdecor_new libdecor_new_;
|
PFN_libdecor_new libdecor_new_;
|
||||||
PFN_libdecor_unref libdecor_unref_;
|
PFN_libdecor_unref libdecor_unref_;
|
||||||
@@ -617,7 +617,6 @@ typedef struct _GLFWlibraryWayland
|
|||||||
PFN_libdecor_frame_set_capabilities libdecor_frame_set_capabilities_;
|
PFN_libdecor_frame_set_capabilities libdecor_frame_set_capabilities_;
|
||||||
PFN_libdecor_frame_unset_capabilities libdecor_frame_unset_capabilities_;
|
PFN_libdecor_frame_unset_capabilities libdecor_frame_unset_capabilities_;
|
||||||
PFN_libdecor_frame_set_visibility libdecor_frame_set_visibility_;
|
PFN_libdecor_frame_set_visibility libdecor_frame_set_visibility_;
|
||||||
PFN_libdecor_frame_is_visible libdecor_frame_is_visible_;
|
|
||||||
PFN_libdecor_frame_get_xdg_toplevel libdecor_frame_get_xdg_toplevel_;
|
PFN_libdecor_frame_get_xdg_toplevel libdecor_frame_get_xdg_toplevel_;
|
||||||
PFN_libdecor_configuration_get_content_size libdecor_configuration_get_content_size_;
|
PFN_libdecor_configuration_get_content_size libdecor_configuration_get_content_size_;
|
||||||
PFN_libdecor_configuration_get_window_state libdecor_configuration_get_window_state_;
|
PFN_libdecor_configuration_get_window_state libdecor_configuration_get_window_state_;
|
||||||
|
|||||||
+75
-117
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 Wayland - www.glfw.org
|
// GLFW 3.5 Wayland - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2014 Jonas Ådahl <jadahl@gmail.com>
|
// Copyright (c) 2014 Jonas Ådahl <jadahl@gmail.com>
|
||||||
//
|
//
|
||||||
@@ -24,9 +24,7 @@
|
|||||||
//
|
//
|
||||||
//========================================================================
|
//========================================================================
|
||||||
|
|
||||||
#if !defined(_GNU_SOURCE)
|
#define _GNU_SOURCE
|
||||||
#define _GNU_SOURCE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
@@ -57,11 +55,10 @@
|
|||||||
#define GLFW_BORDER_SIZE 4
|
#define GLFW_BORDER_SIZE 4
|
||||||
#define GLFW_CAPTION_HEIGHT 24
|
#define GLFW_CAPTION_HEIGHT 24
|
||||||
|
|
||||||
#define GLFW_PENDING_SURFACE 1
|
#define GLFW_PENDING_SURFACE 1
|
||||||
#define GLFW_PENDING_BUTTON 2
|
#define GLFW_PENDING_BUTTON 2
|
||||||
#define GLFW_PENDING_MOTION 4
|
#define GLFW_PENDING_MOTION 4
|
||||||
#define GLFW_PENDING_SCROLL 8
|
#define GLFW_PENDING_SCROLL 8
|
||||||
#define GLFW_PENDING_DISCRETE 16
|
|
||||||
|
|
||||||
static int createTmpfileCloexec(char* tmpname)
|
static int createTmpfileCloexec(char* tmpname)
|
||||||
{
|
{
|
||||||
@@ -201,16 +198,6 @@ static struct wl_buffer* createShmBuffer(const GLFWimage* image)
|
|||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void callbackHandleDone(void* userData, struct wl_callback* callback, uint32_t data)
|
|
||||||
{
|
|
||||||
wl_callback_destroy(callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct wl_callback_listener noopCallbackListener =
|
|
||||||
{
|
|
||||||
callbackHandleDone
|
|
||||||
};
|
|
||||||
|
|
||||||
static void createFallbackEdge(_GLFWwindow* window,
|
static void createFallbackEdge(_GLFWwindow* window,
|
||||||
_GLFWfallbackEdgeWayland* edge,
|
_GLFWfallbackEdgeWayland* edge,
|
||||||
struct wl_surface* parent,
|
struct wl_surface* parent,
|
||||||
@@ -478,9 +465,8 @@ static void resizeFramebuffer(_GLFWwindow* window)
|
|||||||
{
|
{
|
||||||
if (window->wl.fractionalScale)
|
if (window->wl.fractionalScale)
|
||||||
{
|
{
|
||||||
// Round halfway away from zero per fractional-scale-v1 protocol spec
|
window->wl.fbWidth = (window->wl.width * window->wl.scalingNumerator) / 120;
|
||||||
window->wl.fbWidth = (window->wl.width * window->wl.scalingNumerator + 60) / 120;
|
window->wl.fbHeight = (window->wl.height * window->wl.scalingNumerator) / 120;
|
||||||
window->wl.fbHeight = (window->wl.height * window->wl.scalingNumerator + 60) / 120;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -897,10 +883,6 @@ void libdecorFrameHandleConfigure(struct libdecor_frame* frame,
|
|||||||
libdecor_frame_commit(frame, frameState, config);
|
libdecor_frame_commit(frame, frameState, config);
|
||||||
libdecor_state_free(frameState);
|
libdecor_state_free(frameState);
|
||||||
|
|
||||||
// NOTE: Frame visibility must only be set after a frame state has been committed
|
|
||||||
if (window->decorated != libdecor_frame_is_visible(window->wl.libdecor.frame))
|
|
||||||
libdecor_frame_set_visibility(window->wl.libdecor.frame, window->decorated);
|
|
||||||
|
|
||||||
if (window->wl.activated != activated)
|
if (window->wl.activated != activated)
|
||||||
{
|
{
|
||||||
window->wl.activated = activated;
|
window->wl.activated = activated;
|
||||||
@@ -982,39 +964,36 @@ static GLFWbool createLibdecorFrame(_GLFWwindow* window)
|
|||||||
return GLFW_FALSE;
|
return GLFW_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct libdecor_state* frameState =
|
||||||
|
libdecor_state_new(window->wl.width, window->wl.height);
|
||||||
|
libdecor_frame_commit(window->wl.libdecor.frame, frameState, NULL);
|
||||||
|
libdecor_state_free(frameState);
|
||||||
|
|
||||||
if (strlen(window->wl.appId))
|
if (strlen(window->wl.appId))
|
||||||
libdecor_frame_set_app_id(window->wl.libdecor.frame, window->wl.appId);
|
libdecor_frame_set_app_id(window->wl.libdecor.frame, window->wl.appId);
|
||||||
|
|
||||||
libdecor_frame_set_title(window->wl.libdecor.frame, window->title);
|
libdecor_frame_set_title(window->wl.libdecor.frame, window->title);
|
||||||
|
|
||||||
if (window->resizable)
|
if (window->minwidth != GLFW_DONT_CARE &&
|
||||||
|
window->minheight != GLFW_DONT_CARE)
|
||||||
{
|
{
|
||||||
if (window->minwidth != GLFW_DONT_CARE &&
|
libdecor_frame_set_min_content_size(window->wl.libdecor.frame,
|
||||||
window->minheight != GLFW_DONT_CARE)
|
window->minwidth,
|
||||||
{
|
window->minheight);
|
||||||
libdecor_frame_set_min_content_size(window->wl.libdecor.frame,
|
|
||||||
window->minwidth,
|
|
||||||
window->minheight);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (window->maxwidth != GLFW_DONT_CARE &&
|
|
||||||
window->maxheight != GLFW_DONT_CARE)
|
|
||||||
{
|
|
||||||
libdecor_frame_set_max_content_size(window->wl.libdecor.frame,
|
|
||||||
window->maxwidth,
|
|
||||||
window->maxheight);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (window->maxwidth != GLFW_DONT_CARE &&
|
||||||
|
window->maxheight != GLFW_DONT_CARE)
|
||||||
|
{
|
||||||
|
libdecor_frame_set_max_content_size(window->wl.libdecor.frame,
|
||||||
|
window->maxwidth,
|
||||||
|
window->maxheight);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!window->resizable)
|
||||||
{
|
{
|
||||||
libdecor_frame_unset_capabilities(window->wl.libdecor.frame,
|
libdecor_frame_unset_capabilities(window->wl.libdecor.frame,
|
||||||
LIBDECOR_ACTION_RESIZE);
|
LIBDECOR_ACTION_RESIZE);
|
||||||
libdecor_frame_set_min_content_size(window->wl.libdecor.frame,
|
|
||||||
window->wl.width,
|
|
||||||
window->wl.height);
|
|
||||||
libdecor_frame_set_max_content_size(window->wl.libdecor.frame,
|
|
||||||
window->wl.width,
|
|
||||||
window->wl.height);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (window->monitor)
|
if (window->monitor)
|
||||||
@@ -1025,11 +1004,12 @@ static GLFWbool createLibdecorFrame(_GLFWwindow* window)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Frame visibility is applied in libdecorFrameHandleConfigure
|
|
||||||
|
|
||||||
if (window->wl.maximized)
|
if (window->wl.maximized)
|
||||||
libdecor_frame_set_maximized(window->wl.libdecor.frame);
|
libdecor_frame_set_maximized(window->wl.libdecor.frame);
|
||||||
|
|
||||||
|
if (!window->decorated)
|
||||||
|
libdecor_frame_set_visibility(window->wl.libdecor.frame, false);
|
||||||
|
|
||||||
setIdleInhibitor(window, GLFW_FALSE);
|
setIdleInhibitor(window, GLFW_FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1382,27 +1362,24 @@ static void handleEvents(double* timeout)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
GLFWbool event = GLFW_FALSE;
|
GLFWbool event = GLFW_FALSE;
|
||||||
enum { DISPLAY_FD, KEYREPEAT_FD, CURSOR_FD };
|
enum { DISPLAY_FD, KEYREPEAT_FD, CURSOR_FD, LIBDECOR_FD };
|
||||||
struct pollfd fds[] =
|
struct pollfd fds[] =
|
||||||
{
|
{
|
||||||
[DISPLAY_FD] = { wl_display_get_fd(_glfw.wl.display), POLLIN },
|
[DISPLAY_FD] = { wl_display_get_fd(_glfw.wl.display), POLLIN },
|
||||||
[KEYREPEAT_FD] = { _glfw.wl.keyRepeatTimerfd, POLLIN },
|
[KEYREPEAT_FD] = { _glfw.wl.keyRepeatTimerfd, POLLIN },
|
||||||
[CURSOR_FD] = { _glfw.wl.cursorTimerfd, POLLIN }
|
[CURSOR_FD] = { _glfw.wl.cursorTimerfd, POLLIN },
|
||||||
|
[LIBDECOR_FD] = { -1, POLLIN }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (_glfw.wl.libdecor.context)
|
||||||
|
fds[LIBDECOR_FD].fd = libdecor_get_fd(_glfw.wl.libdecor.context);
|
||||||
|
|
||||||
while (!event)
|
while (!event)
|
||||||
{
|
{
|
||||||
if (_glfw.wl.libdecor.context)
|
|
||||||
{
|
|
||||||
// Dispatch unconditionally because it also processes non-Wayland events
|
|
||||||
if (libdecor_dispatch(_glfw.wl.libdecor.context, 0) > 0)
|
|
||||||
event = GLFW_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (wl_display_prepare_read(_glfw.wl.display) != 0)
|
while (wl_display_prepare_read(_glfw.wl.display) != 0)
|
||||||
{
|
{
|
||||||
if (wl_display_dispatch_pending(_glfw.wl.display) > 0)
|
if (wl_display_dispatch_pending(_glfw.wl.display) > 0)
|
||||||
event = GLFW_TRUE;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If an error other than EAGAIN happens, we have likely been disconnected
|
// If an error other than EAGAIN happens, we have likely been disconnected
|
||||||
@@ -1421,11 +1398,6 @@ static void handleEvents(double* timeout)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
double immediate = 0.0;
|
|
||||||
|
|
||||||
if (event)
|
|
||||||
timeout = &immediate;
|
|
||||||
|
|
||||||
if (!_glfwPollPOSIX(fds, sizeof(fds) / sizeof(fds[0]), timeout))
|
if (!_glfwPollPOSIX(fds, sizeof(fds) / sizeof(fds[0]), timeout))
|
||||||
{
|
{
|
||||||
wl_display_cancel_read(_glfw.wl.display);
|
wl_display_cancel_read(_glfw.wl.display);
|
||||||
@@ -1472,6 +1444,12 @@ static void handleEvents(double* timeout)
|
|||||||
if (read(_glfw.wl.cursorTimerfd, &repeats, sizeof(repeats)) == 8)
|
if (read(_glfw.wl.cursorTimerfd, &repeats, sizeof(repeats)) == 8)
|
||||||
incrementCursorImage();
|
incrementCursorImage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fds[LIBDECOR_FD].revents & POLLIN)
|
||||||
|
{
|
||||||
|
if (libdecor_dispatch(_glfw.wl.libdecor.context, 0) > 0)
|
||||||
|
event = GLFW_TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1762,9 +1740,7 @@ static void pointerHandleFrame(void* userData, struct wl_pointer* pointer)
|
|||||||
if (_glfw.wl.pending.events & GLFW_PENDING_BUTTON)
|
if (_glfw.wl.pending.events & GLFW_PENDING_BUTTON)
|
||||||
processPointerButton(_glfw.wl.pending.button, _glfw.wl.pending.action);
|
processPointerButton(_glfw.wl.pending.button, _glfw.wl.pending.action);
|
||||||
|
|
||||||
if (_glfw.wl.pending.events & GLFW_PENDING_DISCRETE)
|
if (_glfw.wl.pending.events & GLFW_PENDING_SCROLL)
|
||||||
processPointerScroll(_glfw.wl.pending.discreteX, _glfw.wl.pending.discreteY);
|
|
||||||
else if (_glfw.wl.pending.events & GLFW_PENDING_SCROLL)
|
|
||||||
processPointerScroll(_glfw.wl.pending.scrollX, _glfw.wl.pending.scrollY);
|
processPointerScroll(_glfw.wl.pending.scrollX, _glfw.wl.pending.scrollY);
|
||||||
|
|
||||||
memset(&_glfw.wl.pending, 0, sizeof(_glfw.wl.pending));
|
memset(&_glfw.wl.pending, 0, sizeof(_glfw.wl.pending));
|
||||||
@@ -1790,21 +1766,6 @@ static void pointerHandleAxisDiscrete(void* userData,
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pointerHandleAxisValue120(void* data,
|
|
||||||
struct wl_pointer* pointer,
|
|
||||||
uint32_t axis,
|
|
||||||
int32_t value120)
|
|
||||||
{
|
|
||||||
if (!_glfw.wl.pointerSurface)
|
|
||||||
return;
|
|
||||||
|
|
||||||
_glfw.wl.pending.events |= GLFW_PENDING_DISCRETE;
|
|
||||||
if (axis == WL_POINTER_AXIS_HORIZONTAL_SCROLL)
|
|
||||||
_glfw.wl.pending.discreteX = -(value120 / 120.0);
|
|
||||||
else if (axis == WL_POINTER_AXIS_VERTICAL_SCROLL)
|
|
||||||
_glfw.wl.pending.discreteY = -(value120 / 120.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct wl_pointer_listener pointerListener =
|
static const struct wl_pointer_listener pointerListener =
|
||||||
{
|
{
|
||||||
pointerHandleEnter,
|
pointerHandleEnter,
|
||||||
@@ -1815,8 +1776,7 @@ static const struct wl_pointer_listener pointerListener =
|
|||||||
pointerHandleFrame,
|
pointerHandleFrame,
|
||||||
pointerHandleAxisSource,
|
pointerHandleAxisSource,
|
||||||
pointerHandleAxisStop,
|
pointerHandleAxisStop,
|
||||||
pointerHandleAxisDiscrete,
|
pointerHandleAxisDiscrete
|
||||||
pointerHandleAxisValue120
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void keyboardHandleKeymap(void* userData,
|
static void keyboardHandleKeymap(void* userData,
|
||||||
@@ -1839,7 +1799,7 @@ static void keyboardHandleKeymap(void* userData,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mapStr = mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0);
|
mapStr = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0);
|
||||||
if (mapStr == MAP_FAILED)
|
if (mapStr == MAP_FAILED)
|
||||||
{
|
{
|
||||||
close(fd);
|
close(fd);
|
||||||
@@ -2341,37 +2301,41 @@ void _glfwAddDataDeviceListenerWayland(struct wl_data_device* device)
|
|||||||
|
|
||||||
GLFWbool _glfwWaitForEGLFrameWayland(_GLFWwindow* window)
|
GLFWbool _glfwWaitForEGLFrameWayland(_GLFWwindow* window)
|
||||||
{
|
{
|
||||||
double timeout = 0.02;
|
for (int i = 0; i < window->wl.egl.interval; i++)
|
||||||
|
|
||||||
while (window->wl.egl.callback)
|
|
||||||
{
|
{
|
||||||
if (wl_display_prepare_read_queue(_glfw.wl.display, window->wl.egl.queue) != 0)
|
double timeout = 0.02;
|
||||||
|
|
||||||
|
while (window->wl.egl.callback)
|
||||||
{
|
{
|
||||||
|
while (wl_display_prepare_read_queue(_glfw.wl.display, window->wl.egl.queue) != 0)
|
||||||
|
wl_display_dispatch_queue_pending(_glfw.wl.display, window->wl.egl.queue);
|
||||||
|
|
||||||
|
if (!flushDisplay())
|
||||||
|
{
|
||||||
|
wl_display_cancel_read(_glfw.wl.display);
|
||||||
|
return GLFW_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct pollfd fd = { wl_display_get_fd(_glfw.wl.display), POLLIN };
|
||||||
|
|
||||||
|
if (!_glfwPollPOSIX(&fd, 1, &timeout))
|
||||||
|
{
|
||||||
|
wl_display_cancel_read(_glfw.wl.display);
|
||||||
|
return GLFW_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
wl_display_read_events(_glfw.wl.display);
|
||||||
wl_display_dispatch_queue_pending(_glfw.wl.display, window->wl.egl.queue);
|
wl_display_dispatch_queue_pending(_glfw.wl.display, window->wl.egl.queue);
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!flushDisplay())
|
window->wl.egl.callback = wl_surface_frame(window->wl.egl.wrapper);
|
||||||
{
|
wl_callback_add_listener(window->wl.egl.callback, &frameCallbackListener, window);
|
||||||
wl_display_cancel_read(_glfw.wl.display);
|
|
||||||
return GLFW_FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct pollfd fd = { wl_display_get_fd(_glfw.wl.display), POLLIN };
|
// Commit the old buffer for every frame but the last one so we get new callbacks
|
||||||
|
if (i + 1 < window->wl.egl.interval)
|
||||||
if (!_glfwPollPOSIX(&fd, 1, &timeout))
|
wl_surface_commit(window->wl.surface);
|
||||||
{
|
|
||||||
wl_display_cancel_read(_glfw.wl.display);
|
|
||||||
return GLFW_FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
wl_display_read_events(_glfw.wl.display);
|
|
||||||
wl_display_dispatch_queue_pending(_glfw.wl.display, window->wl.egl.queue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
window->wl.egl.callback = wl_surface_frame(window->wl.egl.wrapper);
|
|
||||||
wl_callback_add_listener(window->wl.egl.callback, &frameCallbackListener, window);
|
|
||||||
|
|
||||||
// If the window is hidden when the wait is over then don't swap
|
// If the window is hidden when the wait is over then don't swap
|
||||||
return window->wl.visible;
|
return window->wl.visible;
|
||||||
}
|
}
|
||||||
@@ -2422,8 +2386,6 @@ GLFWbool _glfwCreateWindowWayland(_GLFWwindow* window,
|
|||||||
wl_proxy_set_queue((struct wl_proxy*) window->wl.egl.wrapper,
|
wl_proxy_set_queue((struct wl_proxy*) window->wl.egl.wrapper,
|
||||||
window->wl.egl.queue);
|
window->wl.egl.queue);
|
||||||
|
|
||||||
window->wl.egl.interval = 1;
|
|
||||||
|
|
||||||
if (!_glfwInitEGL())
|
if (!_glfwInitEGL())
|
||||||
return GLFW_FALSE;
|
return GLFW_FALSE;
|
||||||
if (!_glfwCreateContextEGL(window, ctxconfig, fbconfig))
|
if (!_glfwCreateContextEGL(window, ctxconfig, fbconfig))
|
||||||
@@ -2737,8 +2699,6 @@ void _glfwHideWindowWayland(_GLFWwindow* window)
|
|||||||
|
|
||||||
wl_surface_attach(window->wl.surface, NULL, 0, 0);
|
wl_surface_attach(window->wl.surface, NULL, 0, 0);
|
||||||
wl_surface_commit(window->wl.surface);
|
wl_surface_commit(window->wl.surface);
|
||||||
|
|
||||||
flushDisplay();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2953,9 +2913,7 @@ void _glfwWaitEventsTimeoutWayland(double timeout)
|
|||||||
|
|
||||||
void _glfwPostEmptyEventWayland(void)
|
void _glfwPostEmptyEventWayland(void)
|
||||||
{
|
{
|
||||||
struct wl_callback* callback = wl_display_sync(_glfw.wl.display);
|
wl_display_sync(_glfw.wl.display);
|
||||||
wl_callback_add_listener(callback, &noopCallbackListener, NULL);
|
|
||||||
|
|
||||||
flushDisplay();
|
flushDisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 X11 - www.glfw.org
|
// GLFW 3.5 X11 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 X11 - www.glfw.org
|
// GLFW 3.5 X11 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
|
|||||||
+16
-16
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 X11 - www.glfw.org
|
// GLFW 3.5 X11 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
@@ -452,6 +452,9 @@ typedef VkBool32 (APIENTRY *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(V
|
|||||||
typedef VkResult (APIENTRY *PFN_vkCreateXcbSurfaceKHR)(VkInstance,const VkXcbSurfaceCreateInfoKHR*,const VkAllocationCallbacks*,VkSurfaceKHR*);
|
typedef VkResult (APIENTRY *PFN_vkCreateXcbSurfaceKHR)(VkInstance,const VkXcbSurfaceCreateInfoKHR*,const VkAllocationCallbacks*,VkSurfaceKHR*);
|
||||||
typedef VkBool32 (APIENTRY *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice,uint32_t,xcb_connection_t*,xcb_visualid_t);
|
typedef VkBool32 (APIENTRY *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice,uint32_t,xcb_connection_t*,xcb_visualid_t);
|
||||||
|
|
||||||
|
#include "xkb_unicode.h"
|
||||||
|
#include "posix_poll.h"
|
||||||
|
|
||||||
#define GLFW_X11_WINDOW_STATE _GLFWwindowX11 x11;
|
#define GLFW_X11_WINDOW_STATE _GLFWwindowX11 x11;
|
||||||
#define GLFW_X11_LIBRARY_WINDOW_STATE _GLFWlibraryX11 x11;
|
#define GLFW_X11_LIBRARY_WINDOW_STATE _GLFWlibraryX11 x11;
|
||||||
#define GLFW_X11_MONITOR_STATE _GLFWmonitorX11 x11;
|
#define GLFW_X11_MONITOR_STATE _GLFWmonitorX11 x11;
|
||||||
@@ -460,7 +463,6 @@ typedef VkBool32 (APIENTRY *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(Vk
|
|||||||
#define GLFW_GLX_CONTEXT_STATE _GLFWcontextGLX glx;
|
#define GLFW_GLX_CONTEXT_STATE _GLFWcontextGLX glx;
|
||||||
#define GLFW_GLX_LIBRARY_CONTEXT_STATE _GLFWlibraryGLX glx;
|
#define GLFW_GLX_LIBRARY_CONTEXT_STATE _GLFWlibraryGLX glx;
|
||||||
|
|
||||||
#define GLFW_INVALID_CODEPOINT 0xffffffffu
|
|
||||||
|
|
||||||
// GLX-specific per-context data
|
// GLX-specific per-context data
|
||||||
//
|
//
|
||||||
@@ -503,18 +505,18 @@ typedef struct _GLFWlibraryGLX
|
|||||||
PFNGLXSWAPINTERVALEXTPROC SwapIntervalEXT;
|
PFNGLXSWAPINTERVALEXTPROC SwapIntervalEXT;
|
||||||
PFNGLXSWAPINTERVALMESAPROC SwapIntervalMESA;
|
PFNGLXSWAPINTERVALMESAPROC SwapIntervalMESA;
|
||||||
PFNGLXCREATECONTEXTATTRIBSARBPROC CreateContextAttribsARB;
|
PFNGLXCREATECONTEXTATTRIBSARBPROC CreateContextAttribsARB;
|
||||||
bool SGI_swap_control;
|
GLFWbool SGI_swap_control;
|
||||||
bool EXT_swap_control;
|
GLFWbool EXT_swap_control;
|
||||||
bool MESA_swap_control;
|
GLFWbool MESA_swap_control;
|
||||||
bool ARB_multisample;
|
GLFWbool ARB_multisample;
|
||||||
bool ARB_framebuffer_sRGB;
|
GLFWbool ARB_framebuffer_sRGB;
|
||||||
bool EXT_framebuffer_sRGB;
|
GLFWbool EXT_framebuffer_sRGB;
|
||||||
bool ARB_create_context;
|
GLFWbool ARB_create_context;
|
||||||
bool ARB_create_context_profile;
|
GLFWbool ARB_create_context_profile;
|
||||||
bool ARB_create_context_robustness;
|
GLFWbool ARB_create_context_robustness;
|
||||||
bool EXT_create_context_es2_profile;
|
GLFWbool EXT_create_context_es2_profile;
|
||||||
bool ARB_create_context_no_error;
|
GLFWbool ARB_create_context_no_error;
|
||||||
bool ARB_context_flush_control;
|
GLFWbool ARB_context_flush_control;
|
||||||
} _GLFWlibraryGLX;
|
} _GLFWlibraryGLX;
|
||||||
|
|
||||||
// X11-specific per-window data
|
// X11-specific per-window data
|
||||||
@@ -983,8 +985,6 @@ unsigned long _glfwGetWindowPropertyX11(Window window,
|
|||||||
unsigned char** value);
|
unsigned char** value);
|
||||||
GLFWbool _glfwIsVisualTransparentX11(Visual* visual);
|
GLFWbool _glfwIsVisualTransparentX11(Visual* visual);
|
||||||
|
|
||||||
uint32_t _glfwKeySym2UnicodeX11(unsigned int keysym);
|
|
||||||
|
|
||||||
void _glfwGrabErrorHandlerX11(void);
|
void _glfwGrabErrorHandlerX11(void);
|
||||||
void _glfwReleaseErrorHandlerX11(void);
|
void _glfwReleaseErrorHandlerX11(void);
|
||||||
void _glfwInputErrorX11(int error, const char* message);
|
void _glfwInputErrorX11(int error, const char* message);
|
||||||
|
|||||||
+3
-3
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 X11 - www.glfw.org
|
// GLFW 3.5 X11 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
||||||
@@ -1308,7 +1308,7 @@ static void processEvent(XEvent *event)
|
|||||||
|
|
||||||
_glfwInputKey(window, key, keycode, GLFW_PRESS, mods);
|
_glfwInputKey(window, key, keycode, GLFW_PRESS, mods);
|
||||||
|
|
||||||
const uint32_t codepoint = _glfwKeySym2UnicodeX11(keysym);
|
const uint32_t codepoint = _glfwKeySym2Unicode(keysym);
|
||||||
if (codepoint != GLFW_INVALID_CODEPOINT)
|
if (codepoint != GLFW_INVALID_CODEPOINT)
|
||||||
_glfwInputChar(window, codepoint, mods, plain);
|
_glfwInputChar(window, codepoint, mods, plain);
|
||||||
}
|
}
|
||||||
@@ -2944,7 +2944,7 @@ const char* _glfwGetScancodeNameX11(int scancode)
|
|||||||
if (keysym == NoSymbol)
|
if (keysym == NoSymbol)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
const uint32_t codepoint = _glfwKeySym2UnicodeX11(keysym);
|
const uint32_t codepoint = _glfwKeySym2Unicode(keysym);
|
||||||
if (codepoint == GLFW_INVALID_CODEPOINT)
|
if (codepoint == GLFW_INVALID_CODEPOINT)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -1,5 +1,5 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
// GLFW 3.6 X11 - www.glfw.org
|
// GLFW 3.5 X11 - www.glfw.org
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||||
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
#if defined(_GLFW_X11)
|
#if defined(_GLFW_X11) || defined(_GLFW_WAYLAND)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Marcus: This code was originally written by Markus G. Kuhn.
|
* Marcus: This code was originally written by Markus G. Kuhn.
|
||||||
@@ -906,7 +906,7 @@ static const struct codepair {
|
|||||||
|
|
||||||
// Convert XKB KeySym to Unicode
|
// Convert XKB KeySym to Unicode
|
||||||
//
|
//
|
||||||
uint32_t _glfwKeySym2UnicodeX11(unsigned int keysym)
|
uint32_t _glfwKeySym2Unicode(unsigned int keysym)
|
||||||
{
|
{
|
||||||
int min = 0;
|
int min = 0;
|
||||||
int max = sizeof(keysymtab) / sizeof(struct codepair) - 1;
|
int max = sizeof(keysymtab) / sizeof(struct codepair) - 1;
|
||||||
@@ -939,5 +939,5 @@ uint32_t _glfwKeySym2UnicodeX11(unsigned int keysym)
|
|||||||
return GLFW_INVALID_CODEPOINT;
|
return GLFW_INVALID_CODEPOINT;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // _GLFW_X11
|
#endif // _GLFW_WAYLAND or _GLFW_X11
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
//========================================================================
|
||||||
|
// GLFW 3.5 Linux - www.glfw.org
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
// Copyright (c) 2014 Jonas Ådahl <jadahl@gmail.com>
|
||||||
|
//
|
||||||
|
// This software is provided 'as-is', without any express or implied
|
||||||
|
// warranty. In no event will the authors be held liable for any damages
|
||||||
|
// arising from the use of this software.
|
||||||
|
//
|
||||||
|
// Permission is granted to anyone to use this software for any purpose,
|
||||||
|
// including commercial applications, and to alter it and redistribute it
|
||||||
|
// freely, subject to the following restrictions:
|
||||||
|
//
|
||||||
|
// 1. The origin of this software must not be misrepresented; you must not
|
||||||
|
// claim that you wrote the original software. If you use this software
|
||||||
|
// in a product, an acknowledgment in the product documentation would
|
||||||
|
// be appreciated but is not required.
|
||||||
|
//
|
||||||
|
// 2. Altered source versions must be plainly marked as such, and must not
|
||||||
|
// be misrepresented as being the original software.
|
||||||
|
//
|
||||||
|
// 3. This notice may not be removed or altered from any source
|
||||||
|
// distribution.
|
||||||
|
//
|
||||||
|
//========================================================================
|
||||||
|
|
||||||
|
#define GLFW_INVALID_CODEPOINT 0xffffffffu
|
||||||
|
|
||||||
|
uint32_t _glfwKeySym2Unicode(unsigned int keysym);
|
||||||
|
|
||||||
+30
-75
@@ -23,10 +23,7 @@
|
|||||||
//
|
//
|
||||||
//========================================================================
|
//========================================================================
|
||||||
//
|
//
|
||||||
// This test is intended to verify that the posting of empty events works.
|
// This test is intended to verify that posting of empty events works
|
||||||
// Background colors are produced on a secondary thread, which then wakes
|
|
||||||
// the main thread with glfwPostEmptyEvent when a new one is available.
|
|
||||||
// This allows the main thread to wait for events unconditionally.
|
|
||||||
//
|
//
|
||||||
//========================================================================
|
//========================================================================
|
||||||
|
|
||||||
@@ -40,53 +37,25 @@
|
|||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
struct State
|
static volatile int running = GLFW_TRUE;
|
||||||
{
|
|
||||||
mtx_t lock;
|
|
||||||
bool running;
|
|
||||||
bool needs_update;
|
|
||||||
int width;
|
|
||||||
int height;
|
|
||||||
float r, g, b;
|
|
||||||
};
|
|
||||||
|
|
||||||
static void error_callback(int error, const char* description)
|
static void error_callback(int error, const char* description)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error: %s\n", description);
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void generate_color(struct State* state)
|
|
||||||
{
|
|
||||||
const float r = (float) rand() / (float) RAND_MAX;
|
|
||||||
const float g = (float) rand() / (float) RAND_MAX;
|
|
||||||
const float b = (float) rand() / (float) RAND_MAX;
|
|
||||||
const float l = sqrtf(r * r + g * g + b * b);
|
|
||||||
|
|
||||||
mtx_lock(&state->lock);
|
|
||||||
state->r = r / l;
|
|
||||||
state->g = g / l;
|
|
||||||
state->b = b / l;
|
|
||||||
state->needs_update = true;
|
|
||||||
mtx_unlock(&state->lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int thread_main(void* data)
|
static int thread_main(void* data)
|
||||||
{
|
{
|
||||||
struct State* const state = data;
|
struct timespec time;
|
||||||
|
|
||||||
srand((unsigned int) time(NULL));
|
while (running)
|
||||||
|
|
||||||
while (state->running)
|
|
||||||
{
|
{
|
||||||
generate_color(state);
|
|
||||||
glfwPostEmptyEvent();
|
|
||||||
|
|
||||||
struct timespec time;
|
|
||||||
clock_gettime(CLOCK_REALTIME, &time);
|
clock_gettime(CLOCK_REALTIME, &time);
|
||||||
time.tv_sec += 1;
|
time.tv_sec += 1;
|
||||||
thrd_sleep(&time, NULL);
|
thrd_sleep(&time, NULL);
|
||||||
|
|
||||||
|
glfwPostEmptyEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -95,38 +64,28 @@ static int thread_main(void* data)
|
|||||||
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
|
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
|
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
|
||||||
glfwSetWindowShouldClose(window, true);
|
glfwSetWindowShouldClose(window, GLFW_TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void framebuffer_size_callback(GLFWwindow* window, int width, int height)
|
static float nrand(void)
|
||||||
{
|
{
|
||||||
struct State* const state = glfwGetWindowUserPointer(window);
|
return (float) rand() / (float) RAND_MAX;
|
||||||
|
|
||||||
mtx_lock(&state->lock);
|
|
||||||
state->width = width;
|
|
||||||
state->height = height;
|
|
||||||
state->needs_update = true;
|
|
||||||
mtx_unlock(&state->lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
struct State state = { .running = true };
|
int result;
|
||||||
|
thrd_t thread;
|
||||||
|
GLFWwindow* window;
|
||||||
|
|
||||||
if (mtx_init(&state.lock, mtx_plain) != thrd_success)
|
srand((unsigned int) time(NULL));
|
||||||
{
|
|
||||||
glfwTerminate();
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
generate_color(&state);
|
|
||||||
|
|
||||||
glfwSetErrorCallback(error_callback);
|
glfwSetErrorCallback(error_callback);
|
||||||
|
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
|
|
||||||
GLFWwindow* window = glfwCreateWindow(640, 480, "Empty Event Test", NULL, NULL);
|
window = glfwCreateWindow(640, 480, "Empty Event Test", NULL, NULL);
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
@@ -136,13 +95,8 @@ int main(void)
|
|||||||
glfwMakeContextCurrent(window);
|
glfwMakeContextCurrent(window);
|
||||||
gladLoadGL(glfwGetProcAddress);
|
gladLoadGL(glfwGetProcAddress);
|
||||||
glfwSetKeyCallback(window, key_callback);
|
glfwSetKeyCallback(window, key_callback);
|
||||||
glfwSetWindowUserPointer(window, &state);
|
|
||||||
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
|
|
||||||
glfwGetFramebufferSize(window, &state.width, &state.height);
|
|
||||||
|
|
||||||
thrd_t color_thread;
|
if (thrd_create(&thread, thread_main, NULL) != thrd_success)
|
||||||
|
|
||||||
if (thrd_create(&color_thread, thread_main, &state) != thrd_success)
|
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to create secondary thread\n");
|
fprintf(stderr, "Failed to create secondary thread\n");
|
||||||
|
|
||||||
@@ -150,27 +104,28 @@ int main(void)
|
|||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!glfwWindowShouldClose(window))
|
while (running)
|
||||||
{
|
{
|
||||||
if (state.needs_update)
|
int width, height;
|
||||||
{
|
float r = nrand(), g = nrand(), b = nrand();
|
||||||
mtx_lock(&state.lock);
|
float l = (float) sqrt(r * r + g * g + b * b);
|
||||||
glViewport(0, 0, state.width, state.height);
|
|
||||||
glClearColor(state.r, state.g, state.b, 1.f);
|
|
||||||
state.needs_update = false;
|
|
||||||
mtx_unlock(&state.lock);
|
|
||||||
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glfwGetFramebufferSize(window, &width, &height);
|
||||||
glfwSwapBuffers(window);
|
|
||||||
}
|
glViewport(0, 0, width, height);
|
||||||
|
glClearColor(r / l, g / l, b / l, 1.f);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
glfwSwapBuffers(window);
|
||||||
|
|
||||||
glfwWaitEvents();
|
glfwWaitEvents();
|
||||||
|
|
||||||
|
if (glfwWindowShouldClose(window))
|
||||||
|
running = GLFW_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
glfwHideWindow(window);
|
glfwHideWindow(window);
|
||||||
state.running = false;
|
thrd_join(thread, &result);
|
||||||
thrd_join(color_thread, NULL);
|
glfwDestroyWindow(window);
|
||||||
mtx_destroy(&state.lock);
|
|
||||||
|
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
exit(EXIT_SUCCESS);
|
exit(EXIT_SUCCESS);
|
||||||
|
|||||||
Reference in New Issue
Block a user