Skip to content

Commit 6e134cd

Browse files
authored
Scissor_rect for text rendering (#277)
1 parent 6542cf7 commit 6e134cd

2 files changed

Lines changed: 28 additions & 2 deletions

File tree

neothesia-core/src/render/note_labels/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ impl NoteLabels {
129129
self.text_renderer.update(logical_size);
130130
}
131131

132-
pub fn render<'rpass>(&'rpass mut self, render_pass: &mut wgpu::RenderPass<'rpass>) {
132+
pub fn render<'rpass>(&'rpass mut self, render_pass: &mut wgpu_jumpstart::RenderPass<'rpass>) {
133133
self.text_renderer.render(render_pass);
134134
}
135135
}

neothesia-core/src/render/text/mod.rs

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ struct TextShared {
3131

3232
pub struct TextRenderer {
3333
text_renderer: glyphon::TextRenderer,
34+
scissor_rect: Rect,
3435
text_areas: Vec<TextArea>,
3536
shared: Rc<RefCell<TextShared>>,
3637
device: wgpu::Device,
@@ -48,13 +49,18 @@ impl TextRenderer {
4849

4950
Self {
5051
text_renderer,
52+
scissor_rect: Rect::zero(),
5153
text_areas: Vec::new(),
5254
shared,
5355
device: device.clone(),
5456
queue: queue.clone(),
5557
}
5658
}
5759

60+
pub fn set_scissor_rect(&mut self, rect: Rect) {
61+
self.scissor_rect = rect;
62+
}
63+
5864
pub fn queue_buffer(&mut self, x: f32, y: f32, buffer: glyphon::Buffer) {
5965
self.queue(TextArea {
6066
buffer,
@@ -212,11 +218,31 @@ impl TextRenderer {
212218
self.text_areas.clear();
213219
}
214220

215-
pub fn render<'rpass>(&'rpass mut self, render_pass: &mut wgpu::RenderPass<'rpass>) {
221+
pub fn render<'rpass>(&'rpass self, render_pass: &mut wgpu_jumpstart::RenderPass<'rpass>) {
222+
let pass_size = render_pass.size();
223+
let scissor_rect = self.scissor_rect;
224+
let has_scissor_rect = scissor_rect != Rect::zero();
225+
226+
if has_scissor_rect {
227+
render_pass.set_scissor_rect(
228+
scissor_rect.origin.x as u32,
229+
scissor_rect.origin.y as u32,
230+
scissor_rect.size.width as u32,
231+
scissor_rect.size.height as u32,
232+
);
233+
} else {
234+
render_pass.set_scissor_rect(0, 0, pass_size.width, pass_size.height);
235+
}
236+
216237
let shared = self.shared.borrow();
217238
self.text_renderer
218239
.render(&shared.atlas, &shared.viewport, render_pass)
219240
.unwrap();
241+
242+
// Revert
243+
if has_scissor_rect {
244+
render_pass.set_scissor_rect(0, 0, pass_size.width, pass_size.height);
245+
}
220246
}
221247
}
222248

0 commit comments

Comments
 (0)