@@ -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,30 @@ export class Texture2DLoader implements IResourceLoader {
57
57
let ext = task . ext ;
58
58
let url = task . url ;
59
59
if ( meta ) {
60
+ const RGBA = { format : TextureFormat . R8G8B8A8 , file : null as string , ext : null as string } ;
60
61
let platform = Browser . platform ;
61
- let fileIndex = meta . platforms ?. [ platform ] || 0 ;
62
- let fileInfo = meta . files ?. [ fileIndex ] || { } ;
62
+ let fileInfo = RGBA ;
63
+ if ( platform in meta . platforms ) {
64
+ const fileIndex = meta . platforms [ platform ] ;
65
+ fileInfo = meta . files [ fileIndex ] ;
66
+ }
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
+
63
78
if ( fileInfo . file ) {
64
79
url = AssetDb . inst . getSubAssetURL ( url , task . uuid , fileInfo . file , fileInfo . ext ) ;
65
80
ext = fileInfo . ext ;
66
81
}
67
82
68
- constructParams = [ 0 , 0 , fileInfo . format ?? 1 , meta . mipmap , meta . readWrite , meta . sRGB ] ;
83
+ constructParams = [ 0 , 0 , fileInfo . format , meta . mipmap , meta . readWrite , meta . sRGB ] ;
69
84
propertyParams = {
70
85
wrapModeU : meta . wrapMode ,
71
86
wrapModeV : meta . wrapMode ,
@@ -293,4 +308,4 @@ const videoFormats = ["mp4", "webm"];
293
308
Loader . registerLoader ( [ "tga" , "tif" , "tiff" , "png" , "jpg" , "jpeg" , "webp" , "rendertexture" , ...videoFormats , ...compressedFormats ] , TextureLoader , Loader . IMAGE , true ) ;
294
309
Loader . registerLoader ( [ ] , Texture2DLoader , Loader . TEXTURE2D , true ) ;
295
310
Loader . registerLoader ( [ "rendertexture" ] , RenderTextureLoader , Loader . TEXTURE2D , true ) ;
296
- Loader . registerLoader ( videoFormats , VideoTextureLoader , Loader . TEXTURE2D ) ;
311
+ Loader . registerLoader ( videoFormats , VideoTextureLoader , Loader . TEXTURE2D ) ;
0 commit comments