@@ -101,9 +101,8 @@ pub struct AssetProcessor {
101
101
pub struct AssetProcessorData {
102
102
pub ( crate ) asset_infos : async_lock:: RwLock < ProcessorAssetInfos > ,
103
103
log : async_lock:: RwLock < Option < ProcessorTransactionLog > > ,
104
- processors : RwLock < HashMap < & ' static str , Arc < dyn ErasedProcessor > > > ,
105
- /// Default processors for file extensions
106
- default_processors : RwLock < HashMap < Box < str > , & ' static str > > ,
104
+ /// The processors that will be used to process assets.
105
+ processors : RwLock < Processors > ,
107
106
state : async_lock:: RwLock < ProcessorState > ,
108
107
sources : AssetSources ,
109
108
initialized_sender : async_broadcast:: Sender < ( ) > ,
@@ -112,6 +111,15 @@ pub struct AssetProcessorData {
112
111
finished_receiver : async_broadcast:: Receiver < ( ) > ,
113
112
}
114
113
114
+ #[ derive( Default ) ]
115
+ struct Processors {
116
+ /// Maps the type name of the processor to its instance.
117
+ type_name_to_processor : HashMap < & ' static str , Arc < dyn ErasedProcessor > > ,
118
+ /// Maps the file extension of an asset to the type name of the processor we should use to
119
+ /// process it by default.
120
+ file_extension_to_default_processor : HashMap < Box < str > , & ' static str > ,
121
+ }
122
+
115
123
impl AssetProcessor {
116
124
/// Creates a new [`AssetProcessor`] instance.
117
125
pub fn new ( source : & mut AssetSourceBuilders ) -> Self {
@@ -583,40 +591,41 @@ impl AssetProcessor {
583
591
584
592
/// Register a new asset processor.
585
593
pub fn register_processor < P : Process > ( & self , processor : P ) {
586
- let mut process_plans = self
594
+ let mut processors = self
587
595
. data
588
596
. processors
589
597
. write ( )
590
598
. unwrap_or_else ( PoisonError :: into_inner) ;
591
599
#[ cfg( feature = "trace" ) ]
592
600
let processor = InstrumentedAssetProcessor ( processor) ;
593
- process_plans. insert ( core:: any:: type_name :: < P > ( ) , Arc :: new ( processor) ) ;
601
+ processors
602
+ . type_name_to_processor
603
+ . insert ( core:: any:: type_name :: < P > ( ) , Arc :: new ( processor) ) ;
594
604
}
595
605
596
606
/// Set the default processor for the given `extension`. Make sure `P` is registered with [`AssetProcessor::register_processor`].
597
607
pub fn set_default_processor < P : Process > ( & self , extension : & str ) {
598
- let mut default_processors = self
608
+ let mut processors = self
599
609
. data
600
- . default_processors
610
+ . processors
601
611
. write ( )
602
612
. unwrap_or_else ( PoisonError :: into_inner) ;
603
- default_processors. insert ( extension. into ( ) , core:: any:: type_name :: < P > ( ) ) ;
613
+ processors
614
+ . file_extension_to_default_processor
615
+ . insert ( extension. into ( ) , core:: any:: type_name :: < P > ( ) ) ;
604
616
}
605
617
606
618
/// Returns the default processor for the given `extension`, if it exists.
607
619
pub fn get_default_processor ( & self , extension : & str ) -> Option < Arc < dyn ErasedProcessor > > {
608
- let default_processors = self
620
+ let processors = self
609
621
. data
610
- . default_processors
611
- . read ( )
612
- . unwrap_or_else ( PoisonError :: into_inner) ;
613
- let key = default_processors. get ( extension) ?;
614
- self . data
615
622
. processors
616
623
. read ( )
617
- . unwrap_or_else ( PoisonError :: into_inner)
618
- . get ( key)
619
- . cloned ( )
624
+ . unwrap_or_else ( PoisonError :: into_inner) ;
625
+ let key = processors
626
+ . file_extension_to_default_processor
627
+ . get ( extension) ?;
628
+ processors. type_name_to_processor . get ( key) . cloned ( )
620
629
}
621
630
622
631
/// Returns the processor with the given `processor_type_name`, if it exists.
@@ -626,7 +635,10 @@ impl AssetProcessor {
626
635
. processors
627
636
. read ( )
628
637
. unwrap_or_else ( PoisonError :: into_inner) ;
629
- processors. get ( processor_type_name) . cloned ( )
638
+ processors
639
+ . type_name_to_processor
640
+ . get ( processor_type_name)
641
+ . cloned ( )
630
642
}
631
643
632
644
/// Populates the initial view of each asset by scanning the unprocessed and processed asset folders.
@@ -1101,7 +1113,6 @@ impl AssetProcessorData {
1101
1113
log : Default :: default ( ) ,
1102
1114
processors : Default :: default ( ) ,
1103
1115
asset_infos : Default :: default ( ) ,
1104
- default_processors : Default :: default ( ) ,
1105
1116
}
1106
1117
}
1107
1118
0 commit comments