@@ -13,7 +13,7 @@ class TextureUnloaderPartModule : PartModule
1313
1414 public override void OnAwake ( )
1515 {
16- if ( HighLogic . LoadedSceneIsGame )
16+ if ( HighLogic . LoadedSceneIsEditor || HighLogic . LoadedSceneIsFlight )
1717 {
1818 Load ( ) ;
1919 }
@@ -48,66 +48,82 @@ private void Load()
4848 string partUrl = this . part . partInfo . partUrl ;
4949
5050 Loader . Log ( "Loading: " + partUrl ) ;
51-
52- foreach ( Renderer mr in part . FindModelComponents < Renderer > ( ) )
53- {
54- Loader . Log ( "Renderer: " + mr . name ) ;
55- TexRefCnt . LoadFromRenderer ( mr ) ;
56- }
5751
5852 if ( ! internalCache . ContainsKey ( partUrl ) )
5953 {
54+
55+ List < TexRefCnt > list = new List < TexRefCnt > ( ) ;
56+ foreach ( Renderer mr in part . FindModelComponents < Renderer > ( ) )
57+ {
58+ Loader . Log ( "Renderer: " + mr . name ) ;
59+ TexRefCnt . LoadFromRenderer ( mr , list ) ;
60+ }
61+
62+
6063 if ( part . partInfo . internalConfig . HasData && HighLogic . LoadedSceneIsGame )
6164 {
65+ Loader . Log ( "Creating internal cache..." ) ;
6266 Part iPart = fetchInternalPart ( ) ;
6367 InternalModel internalModel = iPart . internalModel ;
64- List < TexRefCnt > list = new List < TexRefCnt > ( ) ;
6568 foreach ( Renderer mr in internalModel . FindModelComponents < Renderer > ( ) )
6669 {
70+ Loader . Log ( "ImRenderer: " + mr . name ) ;
6771 TexRefCnt . LoadFromRenderer ( mr , list ) ;
6872 }
69- internalCache [ partUrl ] = list ;
7073 GameObject . DestroyImmediate ( iPart ) ;
7174 }
75+ else
76+ {
77+ Loader . Log ( part . partInfo . internalConfig . HasData + " " + HighLogic . LoadedSceneIsGame ) ;
78+ }
79+
80+ internalCache [ partUrl ] = list ;
7281 }
73- else
82+ else
7483 {
84+ Loader . Log ( "Loading from internal cache..." ) ;
7585 List < TexRefCnt > list = internalCache [ partUrl ] ;
7686 TexRefCnt . LoadFromList ( list ) ;
7787 }
7888 loaded = true ;
7989 }
8090 }
8191
82- public void Unload ( bool force = false )
92+ public void Unload ( bool force = false , bool cache = true )
8393 {
8494 if ( loaded || force )
8595 {
8696 string partUrl = this . part . partInfo . partUrl ;
8797 Loader . Log ( "Unloading: " + partUrl ) ;
88- foreach ( Renderer mr in part . FindModelComponents < Renderer > ( ) )
89- {
90- Loader . Log ( "Renderer: " + mr . name ) ;
91- TexRefCnt . UnLoadFromRenderer ( mr , force ) ;
92- }
9398
9499 if ( ! internalCache . ContainsKey ( partUrl ) )
95100 {
101+ List < TexRefCnt > list = new List < TexRefCnt > ( ) ;
102+ foreach ( Renderer mr in part . FindModelComponents < Renderer > ( ) )
103+ {
104+ Loader . Log ( "Renderer: " + mr . name ) ;
105+ TexRefCnt . UnLoadFromRenderer ( mr , force , list ) ;
106+ }
107+
96108 if ( part . partInfo . internalConfig . HasData && HighLogic . LoadedSceneIsGame )
97109 {
98110 Part iPart = fetchInternalPart ( ) ;
99111 InternalModel internalModel = iPart . internalModel ;
100- List < TexRefCnt > list = new List < TexRefCnt > ( ) ;
101112 foreach ( Renderer mr in internalModel . FindModelComponents < Renderer > ( ) )
102113 {
114+ Loader . Log ( "ImRenderer: " + mr . name ) ;
103115 TexRefCnt . UnLoadFromRenderer ( mr , force , list ) ;
104116 }
105- internalCache [ partUrl ] = list ;
106117 GameObject . DestroyImmediate ( iPart ) ;
107118 }
119+ if ( cache )
120+ {
121+ internalCache [ partUrl ] = list ;
122+ }
108123 }
109124 else
110125 {
126+ Loader . Log ( "Unloading from internal cache..." ) ;
111127 List < TexRefCnt > list = internalCache [ partUrl ] ;
112128 TexRefCnt . UnLoadFromList ( list , force ) ;
113129 }
0 commit comments