@@ -11,16 +11,14 @@ use internal_types::{CompositionOp};
11
11
use internal_types:: { LowLevelFilterOp } ;
12
12
use internal_types:: { RendererFrame } ;
13
13
use layer:: { Layer , ScrollingState } ;
14
- use prim_store:: ClipInfo ;
15
14
use resource_cache:: { DummyResources , ResourceCache } ;
16
15
use scene:: { SceneStackingContext , ScenePipeline , Scene , SceneItem , SpecificSceneItem } ;
17
16
use std:: collections:: { HashMap , HashSet } ;
18
17
use std:: hash:: BuildHasherDefault ;
19
- use tiling:: { FrameBuilder , FrameBuilderConfig , InsideTest , Clip , MaskImageSource } ;
20
- use tiling:: PrimitiveFlags ;
18
+ use tiling:: { AuxiliaryListsMap , FrameBuilder , FrameBuilderConfig , PrimitiveFlags } ;
21
19
use util:: MatrixHelpers ;
22
20
use webrender_traits:: { AuxiliaryLists , PipelineId , Epoch , ScrollPolicy , ScrollLayerId } ;
23
- use webrender_traits:: { ColorF , StackingContext , FilterOp , MixBlendMode } ;
21
+ use webrender_traits:: { ClipRegion , ColorF , StackingContext , FilterOp , MixBlendMode } ;
24
22
use webrender_traits:: { ScrollEventPhase , ScrollLayerInfo , SpecificDisplayItem , ScrollLayerState } ;
25
23
26
24
#[ cfg( target_os = "macos" ) ]
@@ -36,7 +34,6 @@ static DEFAULT_SCROLLBAR_COLOR: ColorF = ColorF { r: 0.3, g: 0.3, b: 0.3, a: 0.6
36
34
37
35
struct FlattenContext < ' a > {
38
36
resource_cache : & ' a mut ResourceCache ,
39
- dummy_resources : & ' a DummyResources ,
40
37
scene : & ' a Scene ,
41
38
pipeline_sizes : & ' a mut HashMap < PipelineId , Size2D < f32 > > ,
42
39
builder : & ' a mut FrameBuilder ,
@@ -411,13 +408,13 @@ impl Frame {
411
408
{
412
409
let mut frame_builder = FrameBuilder :: new ( root_pipeline. viewport_size ,
413
410
device_pixel_ratio,
411
+ dummy_resources. clone ( ) ,
414
412
self . debug ,
415
413
self . frame_builder_config ) ;
416
414
417
415
{
418
416
let mut context = FlattenContext {
419
417
resource_cache : resource_cache,
420
- dummy_resources : dummy_resources,
421
418
scene : scene,
422
419
pipeline_sizes : pipeline_sizes,
423
420
builder : & mut frame_builder,
@@ -538,76 +535,35 @@ impl Frame {
538
535
//
539
536
// If we do need this, does it make sense to keep Frame::clear_tiles?
540
537
context. builder . add_solid_rectangle ( & stacking_context. bounds ,
541
- & stacking_context. bounds ,
542
- None ,
538
+ & ClipRegion :: simple ( & stacking_context. bounds ) ,
543
539
& ColorF :: new ( 1.0 , 1.0 , 1.0 , 1.0 ) ,
544
540
PrimitiveFlags :: None ) ;
545
541
}
546
542
547
- let dummy_mask_source = {
548
- let cache_id = context. dummy_resources . opaque_mask_image_id ;
549
- let cache_item = context. resource_cache . get_image_by_cache_id ( cache_id) ;
550
- MaskImageSource :: Renderer ( cache_item. texture_id )
551
- } ;
552
-
553
543
for item in scene_items {
554
544
match item. specific {
555
545
SpecificSceneItem :: DrawList ( draw_list_id) => {
556
546
let draw_list = context. resource_cache . get_draw_list ( draw_list_id) ;
557
547
let builder = & mut context. builder ;
558
- let auxiliary_lists = self . pipeline_auxiliary_lists
559
- . get ( & parent_info. pipeline_id )
560
- . expect ( "No auxiliary lists?!" ) ;
561
548
562
549
for item in & draw_list. items {
563
- let clips = auxiliary_lists. complex_clip_regions ( & item. clip . complex ) ;
564
- let mut clip = match clips. len ( ) {
565
- 0 if item. clip . image_mask . is_none ( ) => None ,
566
- 0 => Some ( Clip :: new ( ClipInfo :: uniform ( item. clip . main , 0.0 ) , dummy_mask_source) ) ,
567
- 1 => Some ( Clip :: new ( ClipInfo :: from_clip_region ( & clips[ 0 ] ) , dummy_mask_source) ) ,
568
- _ => {
569
- let internal_clip = clips. last ( ) . unwrap ( ) ;
570
- let region = if clips. iter ( ) . all ( |current_clip| current_clip. might_contain ( internal_clip) ) {
571
- internal_clip
572
- } else {
573
- & clips[ 0 ]
574
- } ;
575
- Some ( Clip :: new ( ClipInfo :: from_clip_region ( region) , dummy_mask_source) )
576
- } ,
577
- } ;
578
-
579
- if let Some ( ref mask) = item. clip . image_mask {
580
- let old = match clip {
581
- Some ( masked) => * masked. clip ,
582
- None => ClipInfo :: uniform ( item. clip . main , 0.0 ) ,
583
- } ;
584
- //Note: can't call `tex_cache.aligned_uv_rect()` here since the image
585
- // is not yet marked as needed this frame.
586
- clip = Some ( Clip :: new ( old. with_mask ( Rect :: zero ( ) , mask. rect ) ,
587
- MaskImageSource :: User ( mask. image ) ) ) ;
588
- }
589
-
590
-
591
550
match item. item {
592
551
SpecificDisplayItem :: WebGL ( ref info) => {
593
552
builder. add_webgl_rectangle ( item. rect ,
594
- & item. clip . main ,
595
- clip,
553
+ & item. clip ,
596
554
info. context_id ) ;
597
555
}
598
556
SpecificDisplayItem :: Image ( ref info) => {
599
557
builder. add_image ( item. rect ,
600
- & item. clip . main ,
601
- clip,
558
+ & item. clip ,
602
559
& info. stretch_size ,
603
560
& info. tile_spacing ,
604
561
info. image_key ,
605
562
info. image_rendering ) ;
606
563
}
607
564
SpecificDisplayItem :: Text ( ref text_info) => {
608
565
builder. add_text ( item. rect ,
609
- & item. clip . main ,
610
- clip,
566
+ & item. clip ,
611
567
text_info. font_key ,
612
568
text_info. size ,
613
569
text_info. blur_radius ,
@@ -616,23 +572,20 @@ impl Frame {
616
572
}
617
573
SpecificDisplayItem :: Rectangle ( ref info) => {
618
574
builder. add_solid_rectangle ( & item. rect ,
619
- & item. clip . main ,
620
- clip,
575
+ & item. clip ,
621
576
& info. color ,
622
577
PrimitiveFlags :: None ) ;
623
578
}
624
579
SpecificDisplayItem :: Gradient ( ref info) => {
625
580
builder. add_gradient ( item. rect ,
626
- & item. clip . main ,
627
- clip,
581
+ & item. clip ,
628
582
info. start_point ,
629
583
info. end_point ,
630
584
info. stops ) ;
631
585
}
632
586
SpecificDisplayItem :: BoxShadow ( ref box_shadow_info) => {
633
587
builder. add_box_shadow ( & box_shadow_info. box_bounds ,
634
- & item. clip . main ,
635
- clip,
588
+ & item. clip ,
636
589
& box_shadow_info. offset ,
637
590
& box_shadow_info. color ,
638
591
box_shadow_info. blur_radius ,
@@ -642,8 +595,7 @@ impl Frame {
642
595
}
643
596
SpecificDisplayItem :: Border ( ref info) => {
644
597
builder. add_border ( item. rect ,
645
- & item. clip . main ,
646
- clip,
598
+ & item. clip ,
647
599
info) ;
648
600
}
649
601
}
@@ -762,8 +714,7 @@ impl Frame {
762
714
let scrollbar_rect = Rect :: new ( Point2D :: zero ( ) ,
763
715
Size2D :: new ( 10.0 , 70.0 ) ) ;
764
716
context. builder . add_solid_rectangle ( & scrollbar_rect,
765
- & scrollbar_rect,
766
- None ,
717
+ & ClipRegion :: simple ( & scrollbar_rect) ,
767
718
& DEFAULT_SCROLLBAR_COLOR ,
768
719
PrimitiveFlags :: Scrollbar ( self . root_scroll_layer_id . unwrap ( ) ,
769
720
4.0 ) ) ;
@@ -774,10 +725,11 @@ impl Frame {
774
725
775
726
pub fn build ( & mut self ,
776
727
resource_cache : & mut ResourceCache ,
728
+ auxiliary_lists_map : & AuxiliaryListsMap ,
777
729
device_pixel_ratio : f32 )
778
730
-> RendererFrame {
779
731
self . update_layer_transforms ( device_pixel_ratio) ;
780
- let frame = self . build_frame ( resource_cache) ;
732
+ let frame = self . build_frame ( resource_cache, auxiliary_lists_map ) ;
781
733
resource_cache. expire_old_resources ( self . id ) ;
782
734
frame
783
735
}
@@ -853,14 +805,12 @@ impl Frame {
853
805
}
854
806
855
807
fn build_frame ( & mut self ,
856
- resource_cache : & mut ResourceCache ) -> RendererFrame {
808
+ resource_cache : & mut ResourceCache ,
809
+ auxiliary_lists_map : & AuxiliaryListsMap ) -> RendererFrame {
857
810
let mut frame_builder = self . frame_builder . take ( ) ;
858
- let frame = frame_builder. as_mut ( ) . map ( |builder| {
859
- builder. build ( resource_cache,
860
- self . id ,
861
- & self . pipeline_auxiliary_lists ,
862
- & self . layers )
863
- } ) ;
811
+ let frame = frame_builder. as_mut ( ) . map ( |builder|
812
+ builder. build ( resource_cache, self . id , & self . layers , auxiliary_lists_map)
813
+ ) ;
864
814
self . frame_builder = frame_builder;
865
815
866
816
let layers_bouncing_back = self . collect_layers_bouncing_back ( ) ;
0 commit comments