Skip to content

Commit

Permalink
Reuse glyphon::Viewport explicitly
Browse files Browse the repository at this point in the history
  • Loading branch information
hecrj committed May 8, 2024
1 parent 447f3a2 commit 87cf317
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 18 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ cosmic-text = "0.10"
dark-light = "1.0"
futures = "0.3"
glam = "0.25"
glyphon = { git = "https://github.com/hecrj/glyphon.git", rev = "cd66a24859cf30b0b8cabf06256dacad362ed44a" }
glyphon = { git = "https://github.com/hecrj/glyphon.git", rev = "f410f3ab4fc7b484003684881124cb0ee7ef2e01" }
guillotiere = "0.6"
half = "2.2"
image = "0.24"
Expand Down
13 changes: 9 additions & 4 deletions wgpu/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ pub struct Renderer {

triangle_storage: triangle::Storage,
text_storage: text::Storage,
text_viewport: text::Viewport,

// TODO: Centralize all the image feature handling
#[cfg(any(feature = "svg", feature = "image"))]
Expand All @@ -87,8 +88,8 @@ pub struct Renderer {

impl Renderer {
pub fn new(
_device: &wgpu::Device,
_engine: &Engine,
device: &wgpu::Device,
engine: &Engine,
default_font: Font,
default_text_size: Pixels,
) -> Self {
Expand All @@ -99,10 +100,11 @@ impl Renderer {

triangle_storage: triangle::Storage::new(),
text_storage: text::Storage::new(),
text_viewport: engine.text_pipeline.create_viewport(device),

#[cfg(any(feature = "svg", feature = "image"))]
image_cache: std::cell::RefCell::new(
_engine.create_image_cache(_device),
engine.create_image_cache(device),
),
}
}
Expand Down Expand Up @@ -141,6 +143,8 @@ impl Renderer {
) {
let scale_factor = viewport.scale_factor() as f32;

self.text_viewport.update(queue, viewport.physical_size());

for layer in self.layers.iter_mut() {
if !layer.quads.is_empty() {
engine.quad_pipeline.prepare(
Expand Down Expand Up @@ -182,12 +186,12 @@ impl Renderer {
engine.text_pipeline.prepare(
device,
queue,
&self.text_viewport,
encoder,
&mut self.text_storage,
&layer.text,
layer.bounds,
Transformation::scale(scale_factor),
viewport.physical_size(),
);
}

Expand Down Expand Up @@ -357,6 +361,7 @@ impl Renderer {

if !layer.text.is_empty() {
text_layer += engine.text_pipeline.render(
&self.text_viewport,
&self.text_storage,
text_layer,
&layer.text,
Expand Down
42 changes: 29 additions & 13 deletions wgpu/src/text.rs
Original file line number Diff line number Diff line change
Expand Up @@ -113,13 +113,13 @@ impl Storage {
&mut self,
device: &wgpu::Device,
queue: &wgpu::Queue,
viewport: &glyphon::Viewport,
encoder: &mut wgpu::CommandEncoder,
format: wgpu::TextureFormat,
pipeline: &glyphon::Pipeline,
cache: &Cache,
new_transformation: Transformation,
bounds: Rectangle,
target_size: Size<u32>,
) {
let group_count = self.groups.len();

Expand Down Expand Up @@ -152,14 +152,14 @@ impl Storage {
let _ = prepare(
device,
queue,
viewport,
encoder,
&mut upload.renderer,
&mut group.atlas,
&mut upload.buffer_cache,
&cache.text,
bounds,
new_transformation,
target_size,
);
}

Expand Down Expand Up @@ -189,14 +189,14 @@ impl Storage {
let _ = prepare(
device,
queue,
viewport,
encoder,
&mut renderer,
&mut group.atlas,
&mut buffer_cache,
&cache.text,
bounds,
new_transformation,
target_size,
);
}

Expand Down Expand Up @@ -258,6 +258,20 @@ impl Storage {
}
}

pub struct Viewport(glyphon::Viewport);

impl Viewport {
pub fn update(&mut self, queue: &wgpu::Queue, resolution: Size<u32>) {
self.0.update(
queue,
glyphon::Resolution {
width: resolution.width,
height: resolution.height,
},
);
}
}

#[allow(missing_debug_implementations)]
pub struct Pipeline {
state: glyphon::Pipeline,
Expand Down Expand Up @@ -293,12 +307,12 @@ impl Pipeline {
&mut self,
device: &wgpu::Device,
queue: &wgpu::Queue,
viewport: &Viewport,
encoder: &mut wgpu::CommandEncoder,
storage: &mut Storage,
batch: &Batch,
layer_bounds: Rectangle,
layer_transformation: Transformation,
target_size: Size<u32>,
) {
for item in batch {
match item {
Expand All @@ -319,14 +333,14 @@ impl Pipeline {
let result = prepare(
device,
queue,
&viewport.0,
encoder,
renderer,
&mut self.atlas,
&mut self.cache,
text,
layer_bounds * layer_transformation,
layer_transformation * *transformation,
target_size,
);

match result {
Expand All @@ -347,13 +361,13 @@ impl Pipeline {
storage.prepare(
device,
queue,
&viewport.0,
encoder,
self.format,
&self.state,
cache,
layer_transformation * *transformation,
layer_bounds * layer_transformation,
target_size,
);
}
}
Expand All @@ -362,6 +376,7 @@ impl Pipeline {

pub fn render<'a>(
&'a self,
viewport: &'a Viewport,
storage: &'a Storage,
start: usize,
batch: &'a Batch,
Expand All @@ -383,7 +398,7 @@ impl Pipeline {
let renderer = &self.renderers[start + layer_count];

renderer
.render(&self.atlas, render_pass)
.render(&self.atlas, &viewport.0, render_pass)
.expect("Render text");

layer_count += 1;
Expand All @@ -392,7 +407,7 @@ impl Pipeline {
if let Some((atlas, upload)) = storage.get(cache) {
upload
.renderer
.render(atlas, render_pass)
.render(atlas, &viewport.0, render_pass)
.expect("Render cached text");
}
}
Expand All @@ -402,6 +417,10 @@ impl Pipeline {
layer_count
}

pub fn create_viewport(&self, device: &wgpu::Device) -> Viewport {
Viewport(glyphon::Viewport::new(device, &self.state))
}

pub fn end_frame(&mut self) {
self.atlas.trim();
self.cache.trim();
Expand All @@ -413,14 +432,14 @@ impl Pipeline {
fn prepare(
device: &wgpu::Device,
queue: &wgpu::Queue,
screen: &glyphon::Viewport,
encoder: &mut wgpu::CommandEncoder,
renderer: &mut glyphon::TextRenderer,
atlas: &mut glyphon::TextAtlas,
buffer_cache: &mut BufferCache,
sections: &[Text],
layer_bounds: Rectangle,
layer_transformation: Transformation,
target_size: Size<u32>,
) -> Result<(), glyphon::PrepareError> {
let mut font_system = font_system().write().expect("Write font system");
let font_system = font_system.raw();
Expand Down Expand Up @@ -617,10 +636,7 @@ fn prepare(
encoder,
font_system,
atlas,
glyphon::Resolution {
width: target_size.width,
height: target_size.height,
},
screen,
text_areas,
&mut glyphon::SwashCache::new(),
)
Expand Down

0 comments on commit 87cf317

Please sign in to comment.