diff options
Diffstat (limited to 'src/main/java/me/shedaniel/rei/impl/widgets/TexturedDrawableConsumer.java')
| -rw-r--r-- | src/main/java/me/shedaniel/rei/impl/widgets/TexturedDrawableConsumer.java | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/main/java/me/shedaniel/rei/impl/widgets/TexturedDrawableConsumer.java b/src/main/java/me/shedaniel/rei/impl/widgets/TexturedDrawableConsumer.java new file mode 100644 index 000000000..cc4b4b367 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/impl/widgets/TexturedDrawableConsumer.java @@ -0,0 +1,75 @@ +/* + * This file is licensed under the MIT License, part of Roughly Enough Items. + * Copyright (c) 2018, 2019, 2020 shedaniel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.shedaniel.rei.impl.widgets; + +import me.shedaniel.rei.api.DrawableConsumer; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.Tessellator; +import net.minecraft.client.render.VertexFormats; +import net.minecraft.util.Identifier; +import org.lwjgl.opengl.GL11; + +public class TexturedDrawableConsumer implements DrawableConsumer { + + private Identifier identifier; + private int x, y, width, height, uWidth, vHeight, textureWidth, textureHeight; + private float u, v; + + public TexturedDrawableConsumer(Identifier identifier, int x, int y, int width, int height, float u, float v, int uWidth, int vHeight, int textureWidth, int textureHeight) { + this.identifier = identifier; + this.x = x; + this.y = y; + this.width = width; + this.height = height; + this.u = u; + this.v = v; + this.uWidth = uWidth; + this.vHeight = vHeight; + this.textureWidth = textureWidth; + this.textureHeight = textureHeight; + } + + @Override + public void render(DrawableHelper helper, int mouseX, int mouseY, float delta) { + MinecraftClient.getInstance().getTextureManager().bindTexture(identifier); + innerBlit(x, x + width, y, y + height, helper.getBlitOffset(), uWidth, vHeight, u, v, textureWidth, textureHeight); + } + + private static void innerBlit(int xStart, int xEnd, int yStart, int yEnd, int z, int width, int height, float u, float v, int texWidth, int texHeight) { + innerBlit(xStart, xEnd, yStart, yEnd, z, u / texWidth, (u + width) / texWidth, v / texHeight, (v + height) / texHeight); + } + + protected static void innerBlit(int xStart, int xEnd, int yStart, int yEnd, int z, float uStart, float uEnd, float vStart, float vEnd) { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferBuilder = tessellator.getBuffer(); + bufferBuilder.begin(GL11.GL_QUADS, VertexFormats.POSITION_TEXTURE); + bufferBuilder.vertex(xStart, yEnd, z).texture(uStart, vEnd).next(); + bufferBuilder.vertex(xEnd, yEnd, z).texture(uEnd, vEnd).next(); + bufferBuilder.vertex(xEnd, yStart, z).texture(uEnd, vStart).next(); + bufferBuilder.vertex(xStart, yStart, z).texture(uStart, vStart).next(); + tessellator.draw(); + } +} |
