diff options
author | Matthew William Noel <matthew.william.noel@gmail.com> | 2024-01-12 11:20:02 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-12 20:20:02 +0100 |
commit | a3adb6c9e2b0093b3e6ed6f2d4ce9c0ae5fe3520 (patch) | |
tree | a66cdccad7f2d9eb370ff47059c9122441502ae6 /src/main/java/gregtech/common/render/items/UniversiumRenderer.java | |
parent | 78668b68e3020e06e2ff8dfcc1955987c4087288 (diff) | |
download | GT5-Unofficial-a3adb6c9e2b0093b3e6ed6f2d4ce9c0ae5fe3520.tar.gz GT5-Unofficial-a3adb6c9e2b0093b3e6ed6f2d4ce9c0ae5fe3520.tar.bz2 GT5-Unofficial-a3adb6c9e2b0093b3e6ed6f2d4ce9c0ae5fe3520.zip |
Rework item renderers (#2424)
* Rework item renderers
API breaking changes (minor):
Subclasses of GT_GeneratedItem_Renderer may need updating
Subclasses of GT_GeneratedMaterial_Renderer may need updating
Subclasses of GT_DataStick_Renderer may need updating
* Improve Universium shader compatibility
still looks wrong, but won't screw up stuff rendered after it
Diffstat (limited to 'src/main/java/gregtech/common/render/items/UniversiumRenderer.java')
-rw-r--r-- | src/main/java/gregtech/common/render/items/UniversiumRenderer.java | 174 |
1 files changed, 60 insertions, 114 deletions
diff --git a/src/main/java/gregtech/common/render/items/UniversiumRenderer.java b/src/main/java/gregtech/common/render/items/UniversiumRenderer.java index b0e2c39cb7..92b86071cf 100644 --- a/src/main/java/gregtech/common/render/items/UniversiumRenderer.java +++ b/src/main/java/gregtech/common/render/items/UniversiumRenderer.java @@ -3,12 +3,12 @@ package gregtech.common.render.items; import static gregtech.api.enums.Mods.Avaritia; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.ItemRenderer; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; @@ -16,11 +16,13 @@ import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; +import org.lwjgl.opengl.GL20; import codechicken.lib.render.TextureUtils; import fox.spiteful.avaritia.render.CosmicRenderShenanigans; import gregtech.api.enums.ItemList; import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; +import gregtech.common.render.GT_RenderUtil; @SuppressWarnings("RedundantLabeledSwitchRuleCodeBlock") public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer { @@ -28,17 +30,14 @@ public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer { private static final float cosmicOpacity = 2.5f; @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { - return helper == ItemRendererHelper.ENTITY_ROTATION || helper == ItemRendererHelper.ENTITY_BOBBING; - } - - @Override public boolean renderFluidDisplayItem(ItemRenderType type, ItemStack aStack, Object... data) { + Item item = aStack.getItem(); + if (item == null) return false; + magicRenderMethod( type, ItemList.Emitter_UEV.get(1), // hack to make it render correctly - aStack.getItem() - .getIconFromDamage(aStack.getItemDamage()), + item.getIconFromDamage(aStack.getItemDamage()), true, data); return true; @@ -89,133 +88,80 @@ public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer { RenderItem r = RenderItem.getInstance(); Minecraft mc = Minecraft.getMinecraft(); Tessellator t = Tessellator.instance; + float minU = tIcon.getMinU(); + float maxU = tIcon.getMaxU(); + float minV = tIcon.getMinV(); + float maxV = tIcon.getMaxV(); processLightLevel(type, data); - switch (type) { - case ENTITY -> { - GL11.glPushMatrix(); - if (aStack.isOnItemFrame()) GL11.glTranslatef(0F, -0.3F, 0.01F); - render(tIcon); - GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + if (type == ItemRenderType.INVENTORY) { + RenderHelper.enableGUIStandardItemLighting(); + + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_DEPTH_TEST); + + if (fluidDisplay) { + // this somehow makes shader render correctly + ResourceLocation resourcelocation = mc.getTextureManager() + .getResourceLocation(aStack.getItemSpriteNumber()); + mc.getTextureManager() + .bindTexture(resourcelocation); + } else { + GT_RenderUtil.renderItem(type, tIcon); } - case EQUIPPED, EQUIPPED_FIRST_PERSON -> { - render(tIcon); - } - case INVENTORY -> { - GL11.glPushMatrix(); - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - RenderHelper.enableGUIStandardItemLighting(); - - GL11.glDisable(GL11.GL_ALPHA_TEST); - GL11.glDisable(GL11.GL_DEPTH_TEST); - - if (fluidDisplay) { - // this somehow makes shader render correctly - ResourceLocation resourcelocation = mc.getTextureManager() - .getResourceLocation(aStack.getItemSpriteNumber()); - mc.getTextureManager() - .bindTexture(resourcelocation); - } else { - r.renderItemIntoGUI(mc.fontRenderer, mc.getTextureManager(), aStack, 0, 0, true); - } - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - RenderHelper.enableGUIStandardItemLighting(); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + RenderHelper.enableGUIStandardItemLighting(); - GL11.glDisable(GL11.GL_ALPHA_TEST); - GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_DEPTH_TEST); - if (fluidDisplay) { - GL11.glDisable(GL11.GL_BLEND); - } + if (fluidDisplay) { + GL11.glDisable(GL11.GL_BLEND); + } - CosmicRenderShenanigans.cosmicOpacity = cosmicOpacity; - CosmicRenderShenanigans.inventoryRender = true; - CosmicRenderShenanigans.useShader(); + CosmicRenderShenanigans.cosmicOpacity = cosmicOpacity; + CosmicRenderShenanigans.inventoryRender = true; + CosmicRenderShenanigans.useShader(); - GL11.glColor4d(1, 1, 1, 1); + GL11.glColor4d(1, 1, 1, 1); - float minu = tIcon.getMinU(); - float maxu = tIcon.getMaxU(); - float minv = tIcon.getMinV(); - float maxv = tIcon.getMaxV(); + // Draw cosmic overlay + GT_RenderUtil.renderItem(type, tIcon); - // Draw cosmic overlay - t.startDrawingQuads(); - t.addVertexWithUV(0, 0, 0, minu, minv); - t.addVertexWithUV(0, 16, 0, minu, maxv); - t.addVertexWithUV(16, 16, 0, maxu, maxv); - t.addVertexWithUV(16, 0, 0, maxu, minv); - t.draw(); + CosmicRenderShenanigans.releaseShader(); + CosmicRenderShenanigans.inventoryRender = false; - CosmicRenderShenanigans.releaseShader(); - CosmicRenderShenanigans.inventoryRender = false; + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + } else { + // RENDER ITEM + GT_RenderUtil.renderItem(type, tIcon); - GL11.glEnable(GL11.GL_ALPHA_TEST); - GL11.glEnable(GL12.GL_RESCALE_NORMAL); - GL11.glEnable(GL11.GL_DEPTH_TEST); + int program = GL11.glGetInteger(GL20.GL_CURRENT_PROGRAM); - r.renderWithColor = true; + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glDepthFunc(GL11.GL_EQUAL); + CosmicRenderShenanigans.cosmicOpacity = cosmicOpacity; + CosmicRenderShenanigans.useShader(); - GL11.glDisable(GL11.GL_BLEND); - GL11.glPopMatrix(); - } - default -> {} + // RENDER COSMIC OVERLAY + GT_RenderUtil.renderItem(type, tIcon); + CosmicRenderShenanigans.releaseShader(); + GL11.glDepthFunc(GL11.GL_LEQUAL); + + GL20.glUseProgram(program); } - } - private void render(IIcon icon) { - GL11.glPushMatrix(); - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glColor4f(1F, 1F, 1F, 1F); - - float f, f1, f2, f3; - float scale = 1F / 16F; - - f = icon.getMinU(); - f1 = icon.getMaxU(); - f2 = icon.getMinV(); - f3 = icon.getMaxV(); - - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - - // RENDER ITEM IN HAND - ItemRenderer - .renderItemIn2D(Tessellator.instance, f1, f2, f, f3, icon.getIconWidth(), icon.getIconHeight(), scale); - - GL11.glDisable(GL11.GL_ALPHA_TEST); - GL11.glDepthFunc(GL11.GL_EQUAL); - CosmicRenderShenanigans.cosmicOpacity = cosmicOpacity; - CosmicRenderShenanigans.useShader(); - - float minu = icon.getMinU(); - float maxu = icon.getMaxU(); - float minv = icon.getMinV(); - float maxv = icon.getMaxV(); - - // RENDER COSMIC OVERLAY IN HAND - ItemRenderer.renderItemIn2D( - Tessellator.instance, - maxu, - minv, - minu, - maxv, - icon.getIconWidth(), - icon.getIconHeight(), - scale); - CosmicRenderShenanigans.releaseShader(); - GL11.glDepthFunc(GL11.GL_LEQUAL); + GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glEnable(GL11.GL_ALPHA_TEST); - GL11.glDisable(GL11.GL_BLEND); GL11.glPopMatrix(); - - GL11.glColor4f(1F, 1F, 1F, 1F); } private void processLightLevel(ItemRenderType type, Object... data) { |