mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-21 02:01:55 +07:00
render_helpers: Extract common functions
This commit is contained in:
+31
-17
@@ -6,9 +6,13 @@ use smithay::backend::allocator::dmabuf::Dmabuf;
|
||||
use smithay::backend::allocator::{Buffer, Fourcc};
|
||||
use smithay::backend::renderer::element::utils::{Relocate, RelocateRenderElement};
|
||||
use smithay::backend::renderer::element::{Element, Kind, RenderElement};
|
||||
use smithay::backend::renderer::gles::{GlesMapping, GlesRenderer, GlesTarget, GlesTexture};
|
||||
use smithay::backend::renderer::gles::{
|
||||
GlesError, GlesMapping, GlesRenderer, GlesTarget, GlesTexture,
|
||||
};
|
||||
use smithay::backend::renderer::sync::SyncPoint;
|
||||
use smithay::backend::renderer::{Bind, Color32F, ExportMem, Frame, Offscreen, Renderer};
|
||||
use smithay::backend::renderer::{
|
||||
Bind, Color32F, ExportMem, Frame, Offscreen, Renderer, Texture as _,
|
||||
};
|
||||
use smithay::reexports::wayland_server::protocol::wl_buffer::WlBuffer;
|
||||
use smithay::reexports::wayland_server::protocol::wl_shm;
|
||||
use smithay::utils::{Logical, Physical, Point, Rectangle, Scale, Size, Transform};
|
||||
@@ -155,6 +159,23 @@ pub fn encompassing_geo(
|
||||
.unwrap_or_default()
|
||||
}
|
||||
|
||||
pub fn create_texture(
|
||||
renderer: &mut GlesRenderer,
|
||||
size: Size<i32, Physical>,
|
||||
fourcc: Fourcc,
|
||||
) -> Result<GlesTexture, GlesError> {
|
||||
let buffer_size = size.to_logical(1).to_buffer(1, Transform::Normal);
|
||||
renderer.create_buffer(fourcc, buffer_size)
|
||||
}
|
||||
|
||||
pub fn copy_framebuffer(
|
||||
renderer: &mut GlesRenderer,
|
||||
target: &GlesTarget,
|
||||
fourcc: Fourcc,
|
||||
) -> Result<GlesMapping, GlesError> {
|
||||
renderer.copy_framebuffer(target, Rectangle::from_size(target.size()), fourcc)
|
||||
}
|
||||
|
||||
pub fn render_to_encompassing_texture(
|
||||
renderer: &mut GlesRenderer,
|
||||
scale: Scale<f64>,
|
||||
@@ -183,11 +204,7 @@ pub fn render_to_texture(
|
||||
) -> anyhow::Result<(GlesTexture, SyncPoint)> {
|
||||
let _span = tracy_client::span!();
|
||||
|
||||
let buffer_size = size.to_logical(1).to_buffer(1, Transform::Normal);
|
||||
|
||||
let mut texture: GlesTexture = renderer
|
||||
.create_buffer(fourcc, buffer_size)
|
||||
.context("error creating texture")?;
|
||||
let mut texture = create_texture(renderer, size, fourcc).context("error creating texture")?;
|
||||
|
||||
let sync_point = {
|
||||
let mut target = renderer
|
||||
@@ -210,18 +227,15 @@ pub fn render_and_download(
|
||||
) -> anyhow::Result<GlesMapping> {
|
||||
let _span = tracy_client::span!();
|
||||
|
||||
let (mut texture, _) = render_to_texture(renderer, size, scale, transform, fourcc, elements)?;
|
||||
|
||||
let buffer_size = size.to_logical(1).to_buffer(1, Transform::Normal);
|
||||
// FIXME: would be nice to avoid binding the second time here (after render_to_texture()), but
|
||||
// borrowing makes this inconvenient.
|
||||
let target = renderer
|
||||
let mut texture = create_texture(renderer, size, fourcc).context("error creating texture")?;
|
||||
let mut target = renderer
|
||||
.bind(&mut texture)
|
||||
.context("error binding texture")?;
|
||||
let mapping = renderer
|
||||
.copy_framebuffer(&target, Rectangle::from_size(buffer_size), fourcc)
|
||||
.context("error copying framebuffer")?;
|
||||
Ok(mapping)
|
||||
|
||||
let _sync = render_elements(renderer, &mut target, size, scale, transform, elements)
|
||||
.context("error rendering")?;
|
||||
|
||||
copy_framebuffer(renderer, &target, fourcc).context("error copying framebuffer")
|
||||
}
|
||||
|
||||
pub fn render_to_vec(
|
||||
|
||||
Reference in New Issue
Block a user