Commit Graph

2113 Commits

Author SHA1 Message Date
Campbell Barton
bd2b50dfa8 Cleanup: sort cmake file lists 2022-09-07 15:14:50 +10:00
Campbell Barton
124655547c Cleanup: GHOST/Win32 drop
- Reduce variable scope.
- Use snake-case for variables.
- Remove unnecessary counter when building file-list.
- Remove break after return.
- Use early return.
- Add missing braces.
2022-09-07 15:14:49 +10:00
Campbell Barton
18d1ef46f2 Cleanup: rename internal types for GHOST/Wayland
- Use pascel-case type names, instead of snake-case with `_t` suffix.
- Use `GWL_` prefix (short for GhostWayLand), to distinguish these
  types from ghost (`GHOST_*`) and wayland (`wl_*`) types.
- Rename `input` to `seat` (following wayland's own terminology).
- Use `wl_` prefix for wayland native variables which have locally
  defined equivalents so `GWL_Output *output` isn't confused with
  `struct wl_output *wl_output`. As the locally defined types are used
  more often this is less verbose overall.
2022-09-07 14:04:01 +10:00
Campbell Barton
ef46f5399b GHOST/Wayland: correct logging ID 2022-09-07 13:07:13 +10:00
Campbell Barton
da3d1e9165 Cleanup: spelling in comments, correct doxy slashes, replace '/w' 2022-09-07 13:04:44 +10:00
Campbell Barton
6c6a53fad3 Cleanup: spelling in comments, formatting, move comments into headers 2022-09-06 16:25:20 +10:00
Jason Fielder
32d19f7317 MacOS: Resolve purple rendering artifacts in EEVEE materials by increasing sampler limit.
Enables a feature flag during OpenGL device initialisation on macOS, which increases the available number of texture samplers available for use within shaders. Enabling this flag removes purple rendering artifacts present in certain EEVEE materials, when the existing limit of 16 is exceeded.

This feature flag is supported on Apple Silicon and AMD GPUs, for devices supporting macOS 11.0+. Device initialisation first tests whether GL device creation with the flag is supported, if not, we fall back to standard initialisation.

Other solutions would not be trivial or incur additional performance overhead or feature limitations. Other workarounds, such as texture atlas's, could already be created by artists.

{F13245498}

{F13245497}

Reviewed By: jbakker

Maniphest Tasks: T57759, T63935

Differential Revision: https://developer.blender.org/D15336
2022-09-06 08:08:07 +02:00
Campbell Barton
60576fba11 Fix resource leak dropping files in GHOST/Win32
Early returns in error cases missed calling ReleaseStgMedium for
getDropDataAsFilenames, getDropDataAsString & getDropDataAsString.
2022-08-31 16:28:32 +10:00
Campbell Barton
a0ff2be199 Cleanup: remove pointless strcpy return value check 2022-08-31 16:12:24 +10:00
Campbell Barton
ff651a08b5 Fix returning a freed context when initialization fails for GHOST/Win32 2022-08-31 14:55:47 +10:00
Campbell Barton
4df3cf020b Fix uninitialized variable use for ID3D11RenderTargetView
When 'm_render_target' was NULL, backbuffer_res would be used without
being assigned. While it seems likely this code-path is rarely used
(if at all), resolve the logical error.
2022-08-31 14:55:47 +10:00
Campbell Barton
065a1cd0b1 Cleanup: check GetKeyboardState succeeds before using it's values
Quiets compiler warning.
2022-08-31 14:55:39 +10:00
Campbell Barton
e9d4a20a59 Cleanup: tablet press could fall through to release on GHOST/Win32
Introduced in [0], checking the logic here, there seems to be no reason
a press event should ever run release logic, relocate break statement.

In practice this was unlikely to cause problems as peeking into press
events would need to fail, peeking into release would need to succeed.
Even so, better avoid accidental fall through in switch statements.

[0]: 6f158f834d
2022-08-31 14:36:44 +10:00
Campbell Barton
8bfb65e254 Cleanup: remove 'else' after return 2022-08-31 14:36:44 +10:00
Campbell Barton
c4a16389bc Cleanup: use bool for GHOST_SystemWin32::setConsoleWindowState return 2022-08-31 14:36:44 +10:00
Campbell Barton
c29d63aa5e Cleanup: spelling in comments 2022-08-30 16:22:49 +10:00
Brecht Van Lommel
7fbf72f148 Build: automatically disable WITH_GHOST_WAYLAND if missing libraries
Same as other build options, don't make it a hard requirement to have
Wayland libraries installed when it gets enabled by default.

Also fixes wayland-protocols not being found on the buildbot.
2022-08-29 19:51:07 +02:00
Campbell Barton
d41acc23e1 CMake: include missing header files 2022-08-27 14:32:50 +10:00
Campbell Barton
f7027f2253 Cleanup: simplify key input handling for GHOST/Win32
- Don't create utf8 text for key release events.
- Reduce variable scope.
2022-08-27 13:47:17 +10:00
Campbell Barton
95162e7157 Cleanup: add missing braces for GHOST/Win32 2022-08-27 13:11:34 +10:00
Campbell Barton
955032ffb0 Cleanup: use C style comments for GHOST/Win32 text 2022-08-27 11:24:49 +10:00
Campbell Barton
37d835f0bc Fix T100582: Windows-10 Switching Desktops locks Ctrl Key
Regression in recent fix for T66088 [0]. caused by much older problem
introduced with [1] & [2].

Unlike other platforms, as of [1] GHOST/Win32 was keeping track of the
pressed modifier keys.

Since GHOST/Win32 cleared the modifier state on window activation [2]
and only changes to modifier state would generate key events, activating
the window and releasing the modifier would not send the release event.

Resolve this by removing the stored modifier state from GHOST/Win32,
always passing modifier press/release events through to Blender
(matching other GHOST back-ends).
Instead, use key-repeat detection to prevent repeated modifier keys
from being generated - an alternate solution to T26446.

[0]: 8bc76bf4b9
[1]: d6b43fed31
[2]: 6b987910e4
2022-08-27 07:36:00 +10:00
Campbell Barton
a3e1a9e2aa Cleanup: spelling in comments, format 2022-08-26 12:47:21 +10:00
Campbell Barton
ef51825c06 Fix incorrect UI scaling after changing monitors DPI under Wayland
Add a GHOST_kEventWindowDPIHintChanged event to ensure the UI is
properly updated.
2022-08-26 12:37:08 +10:00
Campbell Barton
a604ed0068 Fix accessing freed memory for GHOST/Wayland clipboard access 2022-08-25 10:52:36 +10:00
Germano Cavalcante
e4f1d71908 Fix T89399: Mouse wrapping causes erratic movement
As mentioned in T89399, "the source of this bug is that cursor wrap
moves the cursor, but when it later checks the mouse position it hasn't
yet been updated, so it re-wraps".

As far as I could see, this happens for two reasons:
1. During the first warp, there are already other mousemove events in the queue with an outdated position.
2. Sometimes Windows occasionally and inexplicably ignores `SetCursorPos()` or `SendInput()` events. (See [1])

The solution consists in checking if the cursor is inside the bounds right after wrapping.
If it's not inside, it indicates that the wrapping either didn't work or the event is out of date.
In these cases do not change the "accum" values.

1. f317d619cc/src/video/windows/SDL_windowsmouse.c (L255))

Maniphest Tasks: T89399

Differential Revision: https://developer.blender.org/D15707
2022-08-19 10:09:58 -03:00
Campbell Barton
2a2ca3292a CMake: always unset CMAKE_REQUIRED_* variables after use
Always unset these variables after use as they could interfere with
other checks made afterwards.
2022-08-18 10:01:27 +10:00
Sebastian Parborg
1c63e4233d Cleanup: Fix "unused m_system" warnings
The dummy `m_system` variable is not needed in the GHOST_NULL classes
2022-08-17 12:54:46 +02:00
Campbell Barton
a123fc9e22 GHOST/EGL: Only draw grey into buffers attached to windows
Avoid redundant drawing, match GHOST/GLX behavior.
2022-08-17 16:21:13 +10:00
Campbell Barton
8841bd9660 GHOST/Wayland: Add NDOF support
Logic for NDOF devices is shared with X11, process events using
GHOST_NDOFManagerUnix when WITH_INPUT_NDOF is enabled.
2022-08-16 12:27:42 +10:00
Campbell Barton
9d9c05a101 Cleanup: spelling in comments 2022-08-16 10:38:26 +10:00
Sebastian Parborg
3195a38120 Introduce headless OpenGL rendering on Linux
With this patch true headless OpenGL rendering is now possible on Linux.
It changes the logic of the WITH_HEADLESS build flag.

The headless backend is now always available with regular builds and
Blender will try to fall back to it if it fails to initialize other
backends while in background mode.

The headless backend only works on Linux as EGL is not used on Mac or Windows.
libepoxy does support windows and mac, so this can perhaps be remedied in the future.

Reviewed By: Brecht, Jeroen, Campbell

Differential Revision: http://developer.blender.org/D15555
2022-08-15 16:54:29 +02:00
Sebastian Parborg
8ffc11dbcb Cleanup OpenGL linking and related code after libepoxy merge
This cleans up the OpenGL build flags and linking.
It additionally also removes some dead code.

One of these dead code paths is WITH_X11_ALPHA which actually never was
active even with the build flag on. The call to use this was never
called because the default initializer for GHOST was set to have it off
per default. Nothing called this function with a boolean value to enable it.

These cleanups are needed to support true headless OpenGL rendering.
Without these cleanups libepoxy will fail to load the correct OpenGL
Libraries as we have already linked them to the blender binary.

Reviewed By: Brecht, Campbell, Jeroen

Differential Revision: http://developer.blender.org/D15554
2022-08-15 16:47:20 +02:00
Christian Rauch
a296b8f694 GPU: replace GLEW with libepoxy
With libepoxy we can choose between EGL and GLX at runtime, as well as
dynamically open EGL and GLX libraries without linking to them.

This will make it possible to build with Wayland, EGL, GLVND support while
still running on systems that only have X11, GLX and libGL. It also paves
the way for headless rendering through EGL.

libepoxy is a new library dependency, and is included in the precompiled
libraries. GLEW is no longer a dependency, and WITH_SYSTEM_GLEW was removed.

Includes contributions by Brecht Van Lommel, Ray Molenkamp, Campbell Barton
and Sergey Sharybin.

Ref T76428

Differential Revision: https://developer.blender.org/D15291
2022-08-15 16:10:29 +02:00
Germano Cavalcante
b5e92c3dfe Merge branch 'blender-v3.3-release' 2022-08-12 18:55:28 -03:00
Germano Cavalcante
ffd4f4a486 Fix T100354: Home key being the grave accent in french keyboard layout
I'm still not sure how the `0xFF` value came about, but it's not a
valid virtual key code.

Therefore it should not be used in `MapVirtualKey`.
2022-08-12 18:54:39 -03:00
Campbell Barton
f145366ae0 Cleanup: add missing braces, quite warnings by casting 2022-08-12 12:13:45 +10:00
Campbell Barton
408687c75f Cleanup: use 'filepath' for fill paths 2022-08-12 11:14:31 +10:00
Campbell Barton
fe63124c3e Cleanup: add missing braces in GHOST 2022-08-12 11:13:07 +10:00
Campbell Barton
d99ec7ff9e Cleanup: clang-tidy GHOST Context/Event/TimerManager 2022-08-12 11:04:21 +10:00
Campbell Barton
aa0ca3aefa GHOST/Wayland: support setting modifiers on window activation
Take advantage of Waylands wl_keyboard_listener.enter callback which
takes an array of keys that are pressed when a window is activated.

Resolves T74684 under Wayland.
2022-08-11 16:48:55 +10:00
Campbell Barton
1c716cbeb7 Cleanup: access modifier keys by index under Wayland
This simplifies accessing modifiers as there is no need to perform
a string lookup each time (which may fail).
2022-08-11 16:48:08 +10:00
Campbell Barton
d1e2988a12 Cleanup: missing newline in GHOST_PRINT 2022-08-11 10:58:41 +10:00
Campbell Barton
c7a7aee004 Cleanup: use own username in code-comment tags 2022-08-09 14:18:18 +10:00
Bastien Montagne
c67d4117d4 Fix broken build due to missing include.
Caused by rBa95103f6f4abda2b. Please build blender before committing!
2022-08-04 14:52:51 +02:00
Campbell Barton
6af963ca81 Fix leak when the cursor leaves the window while dragging in Wayland 2022-08-04 22:33:28 +10:00
Campbell Barton
ff286a9fcf Fix double-free after drag & drop with GHOST/Wayland
Resolve crash on exit after drag & drop in Wayland.
2022-08-04 22:33:25 +10:00
Campbell Barton
a95103f6f4 GHOST/Wayland: support URL decoding for file drag & drop
Paths that contained characters that needed escaping as URL's failed
to import.

Move URL decoding to a new file (GHOST_PathUtils), shared with X11 but
maybe be useful for other platforms too.
2022-08-04 22:33:23 +10:00
Campbell Barton
727cc426bc Fix drag & drop in Wayland with some applications
Drag & drop worked with GTK3 apps but not QT5 (pcmanfm-qt for eg)
as files are separated by '\n' instead of '\r\n'.

Resolve by supporting both (follow up to T99737).
2022-08-04 22:33:22 +10:00
Campbell Barton
cdd718dbb2 GHOST/Wayland: improve logging for drag & drop
Log the response for dropping events to simplify troubleshooting
drag & drop failure.
2022-08-04 22:33:20 +10:00