Skip to content

Commit af7e077

Browse files
committed
anvil/udev: Dynamic support for pixman rendererer
The `RendererRef` and `Texture` enums provide one way to abstract over different renderers. This splits `FpsElement` into a seperate `Fps` that isn't a render element, and isn't specific to one renderer/texture type.
1 parent c3ffa32 commit af7e077

File tree

5 files changed

+248
-119
lines changed

5 files changed

+248
-119
lines changed

anvil/src/drawing.rs

+27-8
Original file line numberDiff line numberDiff line change
@@ -123,27 +123,28 @@ where
123123
pub static FPS_NUMBERS_PNG: &[u8] = include_bytes!("../resources/numbers.png");
124124

125125
#[cfg(feature = "debug")]
126-
#[derive(Debug, Clone)]
127-
pub struct FpsElement<T: Texture> {
126+
#[derive(Debug)]
127+
pub struct Fps {
128128
id: Id,
129129
fps: fps_ticker::Fps,
130130
value: u32,
131-
texture: T,
132131
commit_counter: CommitCounter,
133132
}
134133

135134
#[cfg(feature = "debug")]
136-
impl<T: Texture> FpsElement<T> {
137-
pub fn new(texture: T) -> Self {
138-
FpsElement {
135+
impl Default for Fps {
136+
fn default() -> Self {
137+
Self {
139138
id: Id::new(),
140-
texture,
141139
fps: fps_ticker::Fps::default(),
142140
value: 0,
143141
commit_counter: CommitCounter::default(),
144142
}
145143
}
144+
}
146145

146+
#[cfg(feature = "debug")]
147+
impl Fps {
147148
pub fn tick(&mut self) {
148149
self.fps.tick();
149150
let value = self.fps.avg().round() as u32;
@@ -152,6 +153,24 @@ impl<T: Texture> FpsElement<T> {
152153
self.commit_counter.increment();
153154
}
154155
}
156+
157+
pub fn render_element<T: Texture>(&self, texture: T) -> FpsElement<T> {
158+
FpsElement {
159+
id: self.id.clone(),
160+
value: self.value,
161+
commit_counter: self.commit_counter,
162+
texture,
163+
}
164+
}
165+
}
166+
167+
#[cfg(feature = "debug")]
168+
#[derive(Debug)]
169+
pub struct FpsElement<T: Texture> {
170+
id: Id,
171+
value: u32,
172+
commit_counter: CommitCounter,
173+
texture: T,
155174
}
156175

157176
#[cfg(feature = "debug")]
@@ -198,7 +217,7 @@ where
198217
impl<R> RenderElement<R> for FpsElement<<R as Renderer>::TextureId>
199218
where
200219
R: Renderer + ImportAll,
201-
<R as Renderer>::TextureId: 'static,
220+
<R as Renderer>::TextureId: Send + 'static,
202221
{
203222
fn draw(
204223
&self,

anvil/src/render.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ use crate::{
2727

2828
smithay::backend::renderer::element::render_elements! {
2929
pub CustomRenderElements<R> where
30-
R: ImportAll + ImportMem;
30+
R: ImportAll + ImportMem,
31+
<R as Renderer>::TextureId: Send;
3132
Pointer=PointerRenderElement<R>,
3233
Surface=WaylandSurfaceRenderElement<R>,
3334
#[cfg(feature = "debug")]
@@ -51,7 +52,8 @@ impl<R: Renderer> std::fmt::Debug for CustomRenderElements<R> {
5152
}
5253

5354
smithay::backend::renderer::element::render_elements! {
54-
pub OutputRenderElements<R, E> where R: ImportAll + ImportMem;
55+
pub OutputRenderElements<R, E> where R: ImportAll + ImportMem,
56+
<R as Renderer>::TextureId: Send;
5557
Space=SpaceRenderElements<R, E>,
5658
Window=Wrap<E>,
5759
Custom=CustomRenderElements<R>,
@@ -201,7 +203,7 @@ pub fn render_output<'a, 'd, R>(
201203
) -> Result<RenderOutputResult<'d>, OutputDamageTrackerError<R>>
202204
where
203205
R: Renderer + ImportAll + ImportMem,
204-
R::TextureId: Clone + 'static,
206+
R::TextureId: Clone + Send + 'static,
205207
{
206208
let (elements, clear_color) =
207209
output_elements(output, space, custom_elements, renderer, show_window_preview);

0 commit comments

Comments
 (0)