package net.minecraft.client.renderer.texture; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.TextureUtil; import com.mojang.blaze3d.systems.RenderSystem; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.util.TriState; @Environment(EnvType.CLIENT) public abstract class AbstractTexture implements AutoCloseable { public static final int NOT_ASSIGNED = -1; protected int id = -1; protected boolean defaultBlur; private int wrapS = 10497; private int wrapT = 10497; private int minFilter = 9986; private int magFilter = 9729; public void setClamp(boolean clamp) { RenderSystem.assertOnRenderThreadOrInit(); int i; int j; if (clamp) { i = 33071; j = 33071; } else { i = 10497; j = 10497; } boolean bl = this.wrapS != i; boolean bl2 = this.wrapT != j; if (bl || bl2) { this.bind(); if (bl) { GlStateManager._texParameter(3553, 10242, i); this.wrapS = i; } if (bl2) { GlStateManager._texParameter(3553, 10243, j); this.wrapT = j; } } } public void setFilter(TriState blur, boolean mipmap) { this.setFilter(blur.toBoolean(this.defaultBlur), mipmap); } /** * @param mipmap {@code true} if a mipmap is being used (mip level is greater than 0) */ public void setFilter(boolean blur, boolean mipmap) { RenderSystem.assertOnRenderThreadOrInit(); int i; int j; if (blur) { i = mipmap ? 9987 : 9729; j = 9729; } else { i = mipmap ? 9986 : 9728; j = 9728; } boolean bl = this.minFilter != i; boolean bl2 = this.magFilter != j; if (bl2 || bl) { this.bind(); if (bl) { GlStateManager._texParameter(3553, 10241, i); this.minFilter = i; } if (bl2) { GlStateManager._texParameter(3553, 10240, j); this.magFilter = j; } } } public int getId() { RenderSystem.assertOnRenderThreadOrInit(); if (this.id == -1) { this.id = TextureUtil.generateTextureId(); } return this.id; } public void releaseId() { if (!RenderSystem.isOnRenderThread()) { RenderSystem.recordRenderCall(() -> { if (this.id != -1) { TextureUtil.releaseTextureId(this.id); this.id = -1; } }); } else if (this.id != -1) { TextureUtil.releaseTextureId(this.id); this.id = -1; } } public void bind() { if (!RenderSystem.isOnRenderThreadOrInit()) { RenderSystem.recordRenderCall(() -> GlStateManager._bindTexture(this.getId())); } else { GlStateManager._bindTexture(this.getId()); } } public void close() { } }