@@ -67,34 +67,41 @@ public void SetImage(Image primaryImage)
6767 Guard . NotNull ( primaryImage , nameof ( primaryImage ) ) ;
6868 Guard . MustShareLogicalParent ( this , primaryImage , nameof ( primaryImage ) ) ;
6969
70+ ClearImages ( ) ;
71+
7072 if ( primaryImage . Content . IsExtendedFormat )
71- {
72- var fallback = LogicalParent . UseImage ( Memory . MemoryImage . DefaultPngImage ) ;
73- SetImages ( primaryImage , fallback ) ;
73+ {
74+ _SetExtendedImage ( primaryImage ) ;
7475 }
7576 else
76- {
77- ClearImages ( ) ;
77+ {
7878 _source = primaryImage . LogicalIndex ;
79- }
79+ }
8080 }
8181
8282 public void SetImages ( Image primaryImage , Image fallbackImage )
8383 {
84- Guard . NotNull ( primaryImage , nameof ( primaryImage ) ) ;
85- Guard . NotNull ( fallbackImage , nameof ( fallbackImage ) ) ;
86- Guard . MustShareLogicalParent ( this , primaryImage , nameof ( primaryImage ) ) ;
87- Guard . MustShareLogicalParent ( this , fallbackImage , nameof ( fallbackImage ) ) ;
88- Guard . IsTrue ( primaryImage . Content . IsExtendedFormat , "Primary image must be DDS, WEBP or KTX2" ) ;
84+ Guard . NotNull ( fallbackImage , nameof ( fallbackImage ) ) ;
85+ Guard . MustShareLogicalParent ( this , fallbackImage , nameof ( fallbackImage ) ) ;
8986 Guard . IsTrue ( fallbackImage . Content . IsJpg || fallbackImage . Content . IsPng , nameof ( fallbackImage ) , "Fallback image must be PNG or JPEG" ) ;
9087
91- if ( primaryImage . Content . IsDds ) { _UseDDSTexture ( ) . Image = primaryImage ; }
92- if ( primaryImage . Content . IsWebp ) { _UseWEBPTexture ( ) . Image = primaryImage ; }
93- if ( primaryImage . Content . IsKtx2 ) { _UseKTX2Texture ( ) . Image = primaryImage ; }
94-
88+ _SetExtendedImage ( primaryImage ) ;
9589 _source = fallbackImage . LogicalIndex ;
9690 }
9791
92+ private void _SetExtendedImage ( Image extendedImage )
93+ {
94+ Guard . NotNull ( extendedImage , nameof ( extendedImage ) ) ;
95+ Guard . MustShareLogicalParent ( this , extendedImage , nameof ( extendedImage ) ) ;
96+ Guard . IsTrue ( extendedImage . Content . IsExtendedFormat , "Primary image must be DDS, WEBP or KTX2" ) ;
97+
98+ if ( extendedImage . Content . IsDds ) { _UseDDSTexture ( ) . Image = extendedImage ; return ; }
99+ if ( extendedImage . Content . IsWebp ) { _UseWEBPTexture ( ) . Image = extendedImage ; return ; }
100+ if ( extendedImage . Content . IsKtx2 ) { _UseKTX2Texture ( ) . Image = extendedImage ; return ; }
101+
102+ throw new NotImplementedException ( "Unknown image format" ) ;
103+ }
104+
98105 public void ClearImages ( )
99106 {
100107 _source = null ;
@@ -149,7 +156,7 @@ protected override void OnValidateReferences(ValidationContext validate)
149156 #endregion
150157 }
151158
152- partial class TextureDDS
159+ partial class TextureDDS : IExtensionTypeInfo
153160 {
154161 internal TextureDDS ( Texture parent )
155162 {
@@ -172,9 +179,16 @@ public Image Image
172179 _source = value ? . LogicalIndex ;
173180 }
174181 }
182+
183+ public bool CheckIsRequiredExtension ( ExtraProperties extensionOwner )
184+ {
185+ if ( extensionOwner is not Texture tex ) return false ;
186+
187+ return tex . FallbackImage == null ;
188+ }
175189 }
176190
177- partial class TextureWEBP
191+ partial class TextureWEBP : IExtensionTypeInfo
178192 {
179193 internal TextureWEBP ( Texture parent )
180194 {
@@ -197,9 +211,16 @@ public Image Image
197211 _source = value ? . LogicalIndex ;
198212 }
199213 }
214+
215+ public bool CheckIsRequiredExtension ( ExtraProperties extensionOwner )
216+ {
217+ if ( extensionOwner is not Texture tex ) return false ;
218+
219+ return tex . FallbackImage == null ;
220+ }
200221 }
201222
202- partial class TextureKTX2
223+ partial class TextureKTX2 : IExtensionTypeInfo
203224 {
204225 internal TextureKTX2 ( Texture parent )
205226 {
@@ -222,6 +243,13 @@ public Image Image
222243 _source = value ? . LogicalIndex ;
223244 }
224245 }
246+
247+ public bool CheckIsRequiredExtension ( ExtraProperties extensionOwner )
248+ {
249+ if ( extensionOwner is not Texture tex ) return false ;
250+
251+ return tex . FallbackImage == null ;
252+ }
225253 }
226254
227255 [ System . Diagnostics . DebuggerDisplay ( "TextureSampler[{LogicalIndex}] {Name}" ) ]
@@ -410,6 +438,9 @@ public Texture UseTexture(Image primary, Image fallback, TextureSampler sampler
410438
411439 tex . Sampler = sampler ;
412440
441+ System . Diagnostics . Debug . Assert ( ( primary != null ) == ( tex . PrimaryImage != null ) , "primary image incorrectly set" ) ;
442+ System . Diagnostics . Debug . Assert ( ( fallback != null ) == ( tex . FallbackImage != null ) , "fallback image incorrectly set" ) ;
443+
413444 return tex ;
414445 }
415446 }
0 commit comments