Quantum
009ae02e32
[client] egl: add graph tracking time taken to import frame
...
This tracks the time taken to load the frame buffer into an OpenGL texture.
2021-07-29 10:08:52 +10:00
Quantum
120fe63c0f
[client] egl: keep x/y coordinates of cursor rectangle non-negative
...
This shifts the rectangles upwards instead of cutting off the rectangles,
but it keeps the code simple.
2021-07-26 07:56:46 +10:00
Quantum
181b165a4b
[client] egl: generate correct cursor damage with cursor rotation
2021-07-25 17:35:29 +10:00
Quantum
d9cdc8d26c
[client] egl: rotate damage rectangles according to client side rotation
2021-07-25 16:56:48 +10:00
Quantum
d0722349e6
[client] egl: make damage overlay support rendering rotated rectangles
2021-07-25 16:56:48 +10:00
Geoffrey McRae
60a58d4d8d
[client] all: make it possible to signal full window invalidation
...
Now that we are drawing with damage rects, when the window is hidden and
then exposed the window may not get fully redrawn. This provides
`app_invalidateWindow` for the display server backend to call when the
screen needs a full redraw.
2021-07-25 15:29:29 +10:00
arcnmx
3b37898eb2
[all] use cmake FindPkgConfig IMPORTED_TARGETs
2021-07-24 12:35:48 +10:00
Quantum
f09738678e
[client] fonts: remove font rendering machinery
2021-07-23 20:18:12 +10:00
Quantum
0c35d9b057
[client] opengl: remove font management
2021-07-23 20:18:12 +10:00
Quantum
cb9774bbd2
[client] egl: remove font management
2021-07-23 20:18:12 +10:00
Quantum
dd0edc1394
[client] renderers: remove alert handling
2021-07-23 20:18:12 +10:00
Quantum
5153d35bb5
[client] renderer: remove on_help from renderer interface
2021-07-23 18:04:05 +10:00
Quantum
5d053128ac
[client] imgui: use improved high DPI rendering
...
This actually makes imgui render at a higher resolution, avoiding scaling
and resulting blurriness.
2021-07-23 16:07:42 +10:00
Quantum
df0397b10b
[client] imgui: track last rectangles for overlays
...
This is necessary in case overlays change size. When this happens, we must
damage the larger of the overlays' rectangles this frame and last frame.
This erases the overlay from where it is no longer appears.
In order to do this, we must keep track of the rectangles for every overlay
with no exception. We cannot short-circuit the generation of rectangles if
we run out of buffer space, and we must allocate space for MAX_OVERLAY_RECTS
rectangles for every frame. Otherwise, we will not know where to erase the
overlay if it disappears.
2021-07-23 15:54:18 +10:00
Quantum
334bfeecea
[client] egl: correctly handle mixing imgui and non-imgui overlays
...
This allows the full frame to be damaged when both types are visible.
2021-07-23 15:53:59 +10:00
Quantum
947eac52f6
[client] renderers: treat -1 as full damage and 0 as no overlay
...
This makes everything consistent.
2021-07-22 18:57:34 +10:00
Quantum
515f08d2da
[client] egl: transform overlay damage coordinates
...
EGL uses bottom-up y-coordinate while we use top-down.
2021-07-22 18:32:18 +10:00
Quantum
58ab77d237
[client] egl: avoid overflowing damage buffer
...
We allocate 10 rectangles for overlay damage as agreed on Discord.
2021-07-22 18:32:18 +10:00
Geoffrey McRae
fdbdf6f167
[client] app: implement new overlay rendering framework
...
This change set implements a framework for overlays to be registered
that make use of ImGui. See `overlay/fps` for a simple implementation
example.
2021-07-22 17:27:30 +10:00
Quantum
27e3be3778
[client] egl: free desktop damage after rendering
2021-07-22 13:12:07 +10:00
Geoffrey McRae
08293c8721
[egl] damage: only update the damage vbo if there was a new frame
2021-07-21 17:29:46 +10:00
Geoffrey McRae
6389a06903
[client] main: let the renderer know if it's rendering a whole new frame
...
While the renderer can internally track this it would be better to
simply provide this information to the renderer directly so it can make
better decisions on how best to update the screen.
2021-07-21 17:26:48 +10:00
Quantum
1a88996c47
[client] opengl: don't include <GL/glx.h>
...
The OpenGL renderer backend should not depend on any particular
implementation of OpenGL, as it's used by both X11 and Wayland.
2021-07-21 12:33:01 +10:00
Quantum
563ad18f4e
[client] egl: improve cursor damage logic
...
1. Use atomics and return exact cursor positions from egl_cursor_render
to avoid race conditions between cursor render and update.
2. Instead of messing with lastCursorValid in various overlays, simply use
the hasOverlay/hadOverlay logic for cursor damage. This simplifies the
logic greatly.
As a result, I believe all cursor-related artifacts are fixed.
Note to reviewer: as atomic_init and atomic_store are implemented as macros,
it is currently not possible to pass structs as compound literals due to the
comma being interpreted as an argument separator by the preprocessor.
2021-07-20 11:29:13 +10:00
Quantum
b8effaf42c
[client] egl: use glGetError and codes for errors in gl* functions
...
We used to use DEBUG_EGL_ERROR for gl* functions, which just yields
EGL_SUCCESS even when there are errors.
2021-07-19 19:36:46 +10:00
Quantum
7c872d2d9e
[client] egl: properly use OpenGL ES
...
Instead of using the desktop <GL/gl.h>, we properly use the OpenGL ES 3.x
headers. Also, we now use GL_EXT_buffer_storage for MAP_PERSISTENT_BIT_EXT
and MAP_COHERENT_BIT_EXT as the core versions are only available in desktop
OpenGL 4.4. Similarly, we need GL_EXT_texture_format_BGRA8888 for GL_BGRA_EXT
as GL_BGRA is desktop-only.
2021-07-18 20:44:32 +10:00
Geoffrey McRae
ab31040d5f
[client] all: use imgui for FPS/UPS display
2021-07-18 20:43:17 +10:00
Quantum
42d8f31eba
[client] imgui: use ES 3.0 and remove glew dependency
...
If we specifically tell ImGui's OpenGL 3.x backend to target OpenGL ES 3.0,
then no extension loader is necessary.
2021-07-18 18:50:12 +10:00
Quantum
c6a6230a56
[client] egl: revert "only copy damaged areas when using dmabuf"
...
This reverts commit a14de25661
.
Frame is sometimes incorrect.
2021-07-18 18:48:35 +10:00
Quantum
a14de25661
[client] egl: only copy damaged areas when using dmabuf
...
This speeds up the copy significantly when the frame only has small
amount of damage.
2021-07-18 17:41:29 +10:00
Quantum
a4bf3c8088
[client] egl: use debug context and make it configurable
...
The boolean option egl:debug is used to control whether we want debug
output or not. This defaults to true to aid in debugging.
2021-07-18 15:55:50 +10:00
Quantum
6472c28473
[client] egl: upload damage vertices with glBufferSubData
...
This avoids the issues surrounding glMapBuffer and glMapBufferRange in
OpenGL ES.
2021-07-18 15:55:27 +10:00
Quantum
f49f2af6cd
[client] egl: implement error reporting callback
...
This reports useful information from OpenGL on supported platforms.
2021-07-18 13:54:16 +10:00
Quantum
061b9ba6c2
[client] egl: use vertex array objects in model.c
...
This eliminates the need to bind the buffers and set up the vertices on
every frame.
2021-07-18 11:58:47 +10:00
Quantum
d4f8426ae4
[client] egl: correctly clean up vertex buffer objects
...
The code used to use hasBuffer, which was never set to true, so buffer
objects were always leaked instead.
2021-07-18 11:58:47 +10:00
Quantum
2b3f31700b
[client] egl: implement frame damage display
2021-07-18 10:41:50 +10:00
Quantum
00eb26a34f
[client] egl: do not use damage when overlays are visible
...
This allows the overlays to show up correctly.
2021-07-18 10:41:50 +10:00
Quantum
442ab318fd
[client] egl: use desktop frame damage information
2021-07-18 10:41:50 +10:00
Quantum
eb357fa58a
[client] egl: use glCopyTexSubImage2D to copy when using DMA
...
This removes the need for the driver to allocate texture storage and deleting
the previous allocation on every frame update.
2021-07-18 10:34:21 +10:00
Geoffrey McRae
f08163fd72
[client] imgui: added imgui to the client and OpenGL/EGL renderers
2021-07-17 21:09:51 +10:00
Geoffrey McRae
7b95cc72ed
[client] opengl: do not render a sync pending texture
2021-07-02 21:48:31 +10:00
Geoffrey McRae
d24b031fc5
[client] opengl: cosmetics
2021-07-02 20:10:25 +10:00
Geoffrey McRae
55d185ef9c
[client] opengl: no need to re-bind the already bound texture
2021-07-02 19:51:22 +10:00
Geoffrey McRae
9cbc255448
[client] opengl: do not prematurely delete overlay textures
...
Overlay textures exist for the lifetime of the renderer and as such
should not be deleted when the resolution changes.
2021-07-02 19:50:31 +10:00
Geoffrey McRae
212cc32097
[client] opengl: deconfigure is idempotent
2021-07-02 19:50:15 +10:00
Geoffrey McRae
f07e4839b1
[client] egl: fix dmabuf support
2021-06-08 20:51:09 +10:00
Geoffrey McRae
964403b4f8
[client] egl: tex
is now an array, so check it properly for assignment
2021-06-08 20:45:37 +10:00
Geoffrey McRae
20d20f5c8a
[client] egl: fix incorrect texture usage
...
The existing code would overwrite the texture's data even if the texture
is currently being used to render to screen. This changeset generates a
texture for each buffer preventing this invalid usage.
2021-06-08 20:41:22 +10:00
Quantum
24d0aa0c18
[all] normalize copyright on all source files
2021-06-06 11:53:05 +10:00
Quantum
e70cfd84fb
[client] egl: use eglSwapBuffersWithDamageKHR for cursor-only updates
...
Instead of damaging the entire surface when rendering a cursor move,
we can use the EGL_KHR_swap_buffers_with_damage extension to only
damage the part of the window covered by the cursor. This should
reduce the cursor movement latency on Wayland.
2021-05-19 18:56:36 +10:00