贴图来源(ITexture)
基本信息
| 属性 | 值 |
|---|---|
| 接口 | lumien.custommainmenu.lib.textures.ITexture(唯一方法 void bind()) |
| 分发器 | GuiConfig.getWantedTexture(GuiConfig.java:381-387) |
| 实现数 | 2 |
解析规则
public static ITexture getWantedTexture(String textureString) {
if (textureString.startsWith("web:")) {
return new TextureURL(textureString.substring(4));
}
return new TextureResourceLocation(textureString);
}
| 写法 | 实现类 | 说明 |
|---|---|---|
web:<URL> |
TextureURL |
后台线程下载图片,异步上传到 GL |
domain:path(如 custommainmenu:textures/gui/minecraft.png) |
TextureResourceLocation |
继承原版 ResourceLocation,走游戏资源管线 |
裸路径(如 texts/splashes.txt 无域) |
TextureResourceLocation |
ResourceLocation 默认域为 minecraft |
⚠️ 本 mod 不打包任何贴图资源到 ResourceLocation 之外的通道——3 张贴图全在 assets/custommainmenu/textures/gui/ 下(minecraft.png / buttons.png / transparent.png),都靠 TextureResourceLocation 加载,均有引用、无孤儿资源。
三个 bind() 实现路径
| 状态 | 行为 |
|---|---|
textureID != -1 |
GlStateManager.bindTexture(textureID) |
textureID == -1 且 bi != null |
先 TextureUtil.uploadTextureImageAllocate(glGenTextures(), bi, ...) 上传,再递归 bind() |
textureID == -1 且 bi == null |
回退绑 custommainmenu:textures/gui/transparent.png(CustomMainMenu.bindTransparent) |
透明回退是本 mod 唯一内建的容错:URL 还没下完(bi 仍为 null)时不会画出错图或崩,而是先显示透明图。这对主菜单启动瞬间很重要。
TextureResourceLocation 的设计
它直接继承 net.minecraft.util.ResourceLocation 并实现 ITexture(TextureResourceLocation.java:6),所以可以直接传给 renderEngine.bindTexture()(TextureResourceLocation.java:12-15)。好处是自动进入 MC 的资源包/资源重载体系,坏处是不能有 web: 前缀。
TextureURL 的异步加载
构造函数就起一个 daemon 线程(TextureURL.java:27-33):
new LoadTextureURL(this).start() // setDaemon(true)
→ ImageIO.read(url) // 存进 this.bi
→ finishLoading(bi)
真正的 GL 上传推迟到 bind() 首次发现 bi != null 时,且只上传一次(上传后 textureID != -1,后续走快速路径)。TextureURL.load() 里还有一份独立的下载实现,但它没有任何调用点(构造函数走的是 LoadTextureURL 线程),是死代码。
⚠️ 下载失败时 LoadTextureURL 是空 catch(LoadTextureURL.java:24-26),bi 保持 null,表现就是永远绑透明图 + 控制台无任何提示。
⚠️ TextureURL 同样没有缓存/去重:同一 URL 写两次会起两个线程、下两次。
适用位置
- 背景(Background):
image、轮播images[] - 图片(Image):
image、hoverImage、轮播images[] - 按钮(Button):
texture - 全景图(Panorama):
images(%c展开成 6 个)
相关条目
- 文本来源(IText) - 平行的文本解析(4 种)
- 配置文件格式 -
web:/file:前缀的通用规则