Splash 纹理管理
基本信息
| 属性 | 值 |
|---|---|
| 类 | alexiil.mods.load.SplashTextureManager |
| 父类 | net.minecraft.client.renderer.texture.TextureManager |
| 实例字段 | List<ResourceTexture> ownedTextures |
行为
背景纹理绑定
bindBackgroundTexture(ResourceLocation):跳过 ownedTextures 追踪,避免主线程与渲染线程同时绑定导致 ownedTextures 状态污染。bindTexture(ResourceLocation):对 owned 列表里的ResourceTexture打usedThisFrame=true,便于endFrame释放一帧内未引用的纹理。
帧生命周期
beginFrame():把所有ownedTextures的usedThisFrame=false。endFrame():遍历 owned 列表,回收usedThisFrame=false的纹理 GL id,并从列表中移除。close():释放所有 owned 纹理 + 清空列表。
上传工具方法
public static void upload(int textureId, int[] pixels, int width, int height, boolean blur, boolean clamp);
public static void upload(int textureId, BufferedImage image, int width, int height, boolean blur, boolean clamp);
blur=false→GL_NEAREST;blur=true→GL_LINEAR。clamp=false→GL_REPEAT(wrap);clamp=true→GL_CLAMP_TO_EDGE。pixels优先使用;如果同时给BufferedImage,则把BufferedImage.getRGB拷到pixels后再用pixels版本上传。
ResourceTexture 内部类
- 继承
AbstractTexture,保存创建时的ResourceLocation,对loadTexture(IResourceManager)做空实现(资源由SplashTextureManager自行解析)。 - 字段:
int glTextureId、ResourceLocation location、boolean usedThisFrame。
数值
| 数值 | 默认 |
|---|---|
| 默认 filter | NEAREST(blur=false) |
| 默认 wrap | REPEAT(clamp=false) |
使用场景
MinecraftDisplayer在加载阶段用SplashTextureManager作为自己的TextureManager,让所有纹理引用走 owned 列表,便于线程切换时回收。LateInitDynamicTexture.loadTexture也复用upload静态方法。
相关条目
- LateInit 纹理 - 通过 SplashTextureManager.upload 完成 GL 上传
- Imgur 集成 - 异步纹理来源