@@ -31,6 +31,7 @@ struct TextShared {
3131
3232pub 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