MCPcopy Create free account
hub / github.com/esengine/esengine / TextureLoader

Class TextureLoader

packages/asset-system/src/loaders/TextureLoader.ts:44–117  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

42 * 纹理加载器实现
43 */
44export class TextureLoader implements IAssetLoader<ITextureAsset> {
45 readonly supportedType = AssetType.Texture;
46 readonly supportedExtensions = ['.png', '.jpg', '.jpeg', '.gif', '.webp', '.bmp'];
47 readonly contentType: AssetContentType = 'image';
48
49 private static _nextTextureId = 1;
50
51 /**
52 * Reset texture ID counter
53 * 重置纹理 ID 计数器
54 *
55 * This should be called when restoring scene snapshots to ensure
56 * textures start with fresh IDs.
57 * 在恢复场景快照时应调用此方法,以确保纹理从新 ID 开始。
58 */
59 static resetTextureIdCounter(): void {
60 TextureLoader._nextTextureId = 1;
61 }
62
63 /**
64 * Parse texture from image content.
65 * 从图片内容解析纹理。
66 */
67 async parse(content: IAssetContent, context: IAssetParseContext): Promise<ITextureAsset> {
68 if (!content.image) {
69 throw new Error('Texture content is empty');
70 }
71
72 const image = content.image;
73
74 // Read sprite settings from import settings
75 // 从导入设置读取 sprite 设置
76 const importSettings = context.metadata.importSettings as Record<string, unknown> | undefined;
77 const spriteSettings = importSettings?.spriteSettings as ISpriteSettings | undefined;
78
79 const textureAsset: ITextureAsset = {
80 textureId: TextureLoader._nextTextureId++,
81 width: image.width,
82 height: image.height,
83 format: 'rgba',
84 hasMipmaps: false,
85 data: image,
86 // Include sprite settings if available
87 // 如果有则包含 sprite 设置
88 sliceBorder: spriteSettings?.sliceBorder,
89 pivot: spriteSettings?.pivot
90 };
91
92 // Upload to GPU if bridge exists.
93 const bridge = getEngineBridge();
94 if (bridge?.loadTexture) {
95 await bridge.loadTexture(textureAsset.textureId, context.metadata.path);
96 }
97
98 return textureAsset;
99 }
100
101 /**

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected