mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-11-02 09:01:38 -05:00
output: make wlr_egl flip the damage
This commit is contained in:
parent
ca770995cc
commit
1b9ebcf645
2 changed files with 31 additions and 19 deletions
18
render/egl.c
18
render/egl.c
|
|
@ -1,11 +1,12 @@
|
|||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <drm_fourcc.h>
|
||||
#include <EGL/egl.h>
|
||||
#include <EGL/eglext.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <drm_fourcc.h>
|
||||
#include <wlr/render/egl.h>
|
||||
#include <wlr/util/log.h>
|
||||
#include <wlr/util/region.h>
|
||||
#include "glapi.h"
|
||||
|
||||
static bool egl_get_config(EGLDisplay disp, EGLint *attribs, EGLConfig *out,
|
||||
|
|
@ -329,9 +330,18 @@ bool wlr_egl_swap_buffers(struct wlr_egl *egl, EGLSurface surface,
|
|||
EGLBoolean ret;
|
||||
if (damage != NULL && (egl->exts.swap_buffers_with_damage_ext ||
|
||||
egl->exts.swap_buffers_with_damage_khr)) {
|
||||
EGLint width = 0, height = 0;
|
||||
eglQuerySurface(egl->display, surface, EGL_WIDTH, &width);
|
||||
eglQuerySurface(egl->display, surface, EGL_HEIGHT, &height);
|
||||
|
||||
pixman_region32_t flipped_damage;
|
||||
pixman_region32_init(&flipped_damage);
|
||||
wlr_region_transform(&flipped_damage, damage,
|
||||
WL_OUTPUT_TRANSFORM_FLIPPED_180, width, height);
|
||||
|
||||
int nrects;
|
||||
pixman_box32_t *rects =
|
||||
pixman_region32_rectangles(damage, &nrects);
|
||||
pixman_region32_rectangles(&flipped_damage, &nrects);
|
||||
EGLint egl_damage[4 * nrects];
|
||||
for (int i = 0; i < nrects; ++i) {
|
||||
egl_damage[4*i] = rects[i].x1;
|
||||
|
|
@ -340,6 +350,8 @@ bool wlr_egl_swap_buffers(struct wlr_egl *egl, EGLSurface surface,
|
|||
egl_damage[4*i + 3] = rects[i].y2 - rects[i].y1;
|
||||
}
|
||||
|
||||
pixman_region32_fini(&flipped_damage);
|
||||
|
||||
if (egl->exts.swap_buffers_with_damage_ext) {
|
||||
ret = eglSwapBuffersWithDamageEXT(egl->display, surface, egl_damage,
|
||||
nrects);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue