mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-02 11:55:59 +01:00
backend/drm: stop using drm_surface_make_current in drm_surface_blit
drm_surface_make_current and drm_surface_unset_current set implicit state and are an unnecessary mid-layer. Prefer to use directly wlr_renderer_begin_with_buffer, which automatically unsets the back buffer on wlr_renderer_end. I'd like to get rid of drm_surface_make_current once we stop using it for the primary swapchain.
This commit is contained in:
parent
d71ed635b9
commit
c1b27cc499
1 changed files with 10 additions and 8 deletions
|
@ -141,7 +141,8 @@ struct wlr_buffer *drm_surface_blit(struct wlr_drm_surface *surf,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!drm_surface_make_current(surf, NULL)) {
|
struct wlr_buffer *dst = wlr_swapchain_acquire(surf->swapchain, NULL);
|
||||||
|
if (!dst) {
|
||||||
wlr_texture_destroy(tex);
|
wlr_texture_destroy(tex);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -150,19 +151,20 @@ struct wlr_buffer *drm_surface_blit(struct wlr_drm_surface *surf,
|
||||||
wlr_matrix_identity(mat);
|
wlr_matrix_identity(mat);
|
||||||
wlr_matrix_scale(mat, surf->width, surf->height);
|
wlr_matrix_scale(mat, surf->width, surf->height);
|
||||||
|
|
||||||
wlr_renderer_begin(renderer, surf->width, surf->height);
|
if (!wlr_renderer_begin_with_buffer(renderer, dst)) {
|
||||||
|
wlr_buffer_unlock(dst);
|
||||||
|
wlr_texture_destroy(tex);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
wlr_renderer_clear(renderer, (float[]){ 0.0, 0.0, 0.0, 0.0 });
|
wlr_renderer_clear(renderer, (float[]){ 0.0, 0.0, 0.0, 0.0 });
|
||||||
wlr_render_texture_with_matrix(renderer, tex, mat, 1.0f);
|
wlr_render_texture_with_matrix(renderer, tex, mat, 1.0f);
|
||||||
|
|
||||||
wlr_renderer_end(renderer);
|
wlr_renderer_end(renderer);
|
||||||
|
|
||||||
assert(surf->back_buffer != NULL);
|
|
||||||
struct wlr_buffer *out = wlr_buffer_lock(surf->back_buffer);
|
|
||||||
|
|
||||||
drm_surface_unset_current(surf);
|
|
||||||
|
|
||||||
wlr_texture_destroy(tex);
|
wlr_texture_destroy(tex);
|
||||||
|
|
||||||
return out;
|
return dst;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue