@@ -6,7 +6,7 @@ import { KTXTextureInfo } from "../RenderEngine/KTXTextureInfo";
6
6
import { TextureDimension } from "../RenderEngine/RenderEnum/TextureDimension" ;
7
7
import { ClassUtils } from "../utils/ClassUtils" ;
8
8
import { BaseTexture } from "../resource/BaseTexture" ;
9
- import { TextureFormat } from "../RenderEngine/RenderEnum/TextureFormat" ;
9
+ import { getCompressTextureRenderCapable , TextureFormat } from "../RenderEngine/RenderEnum/TextureFormat" ;
10
10
import { Browser } from "../utils/Browser" ;
11
11
import { AssetDb } from "../resource/AssetDb" ;
12
12
import { Resource } from "../resource/Resource" ;
@@ -57,15 +57,31 @@ export class Texture2DLoader implements IResourceLoader {
57
57
let ext = task . ext ;
58
58
let url = task . url ;
59
59
if ( meta ) {
60
- let platform = Browser . platform ;
61
- let fileIndex = meta . platforms ?. [ platform ] || 0 ;
62
- let fileInfo = meta . files ?. [ fileIndex ] || { } ;
60
+ const RGBA = { format : TextureFormat . R8G8B8A8 , file : null as string , ext : null as string } ;
61
+ let fileInfo = RGBA ;
62
+
63
+ if ( meta . platforms && meta . files ) {
64
+ if ( Browser . platform in meta . platforms ) {
65
+ const fileIndex = meta . platforms [ Browser . platform ] ;
66
+ fileInfo = meta . files [ fileIndex ] ;
67
+ }
68
+ let capable = getCompressTextureRenderCapable ( fileInfo . format ) ;
69
+ if ( capable && ! LayaGL . renderEngine . getCapable ( capable ) ) { // 当前环境是不支持 meta 中设置的压缩纹理格式
70
+ const fallback = ( meta . files as ( typeof fileInfo ) [ ] ) . find ( f => {
71
+ // 找到第一个支持的压缩纹理格式
72
+ const c = getCompressTextureRenderCapable ( f . format ) ;
73
+ return LayaGL . renderEngine . getCapable ( c ) ;
74
+ } ) ;
75
+ fileInfo = fallback || RGBA ;
76
+ }
77
+ }
78
+
63
79
if ( fileInfo . file ) {
64
80
url = AssetDb . inst . getSubAssetURL ( url , task . uuid , fileInfo . file , fileInfo . ext ) ;
65
81
ext = fileInfo . ext ;
66
82
}
67
83
68
- constructParams = [ 0 , 0 , fileInfo . format ?? 1 , meta . mipmap , meta . readWrite , meta . sRGB ] ;
84
+ constructParams = [ 0 , 0 , fileInfo . format , meta . mipmap , meta . readWrite , meta . sRGB ] ;
69
85
propertyParams = {
70
86
wrapModeU : meta . wrapMode ,
71
87
wrapModeV : meta . wrapMode ,
@@ -293,4 +309,4 @@ const videoFormats = ["mp4", "webm"];
293
309
Loader . registerLoader ( [ "tga" , "tif" , "tiff" , "png" , "jpg" , "jpeg" , "webp" , "rendertexture" , ...videoFormats , ...compressedFormats ] , TextureLoader , Loader . IMAGE , true ) ;
294
310
Loader . registerLoader ( [ ] , Texture2DLoader , Loader . TEXTURE2D , true ) ;
295
311
Loader . registerLoader ( [ "rendertexture" ] , RenderTextureLoader , Loader . TEXTURE2D , true ) ;
296
- Loader . registerLoader ( videoFormats , VideoTextureLoader , Loader . TEXTURE2D ) ;
312
+ Loader . registerLoader ( videoFormats , VideoTextureLoader , Loader . TEXTURE2D ) ;
0 commit comments