aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api
diff options
context:
space:
mode:
authorLéa Gris <lea.gris@noiraude.net>2021-05-06 01:28:41 +0200
committerLéa Gris <lea.gris@noiraude.net>2021-05-21 13:38:32 +0200
commit7c1425f9ce38a6eb9e1063a37e8abc374dc53a63 (patch)
tree87bf1ccd01053cee3df0283f5593325dddb3ccea /src/main/java/gregtech/api
parent7138bc372ae89d66755f99df11ebf145cea5d33b (diff)
downloadGT5-Unofficial-7c1425f9ce38a6eb9e1063a37e8abc374dc53a63.tar.gz
GT5-Unofficial-7c1425f9ce38a6eb9e1063a37e8abc374dc53a63.tar.bz2
GT5-Unofficial-7c1425f9ce38a6eb9e1063a37e8abc374dc53a63.zip
fix(render): flickering off-world rendered multitexture with glow
Isolated each Quad drawn ITexture layer rendering in own Tessellation context when rendering item blocks off world (inventory, in-hand, dropped item).
Diffstat (limited to 'src/main/java/gregtech/api')
-rw-r--r--src/main/java/gregtech/api/interfaces/ITexture.java25
-rw-r--r--src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java12
-rw-r--r--src/main/java/gregtech/api/objects/GT_RenderedGlowTexture.java12
-rw-r--r--src/main/java/gregtech/api/objects/GT_RenderedTexture.java12
-rw-r--r--src/main/java/gregtech/api/objects/GT_StdRenderedTexture.java2
5 files changed, 63 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/interfaces/ITexture.java b/src/main/java/gregtech/api/interfaces/ITexture.java
index 4321cc523c..61244a10ae 100644
--- a/src/main/java/gregtech/api/interfaces/ITexture.java
+++ b/src/main/java/gregtech/api/interfaces/ITexture.java
@@ -2,6 +2,7 @@ package gregtech.api.interfaces;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.client.renderer.Tessellator;
public interface ITexture {
void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ);
@@ -17,4 +18,28 @@ public interface ITexture {
void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ);
boolean isValidTexture();
+
+ /**
+ * Will initialize the {@link Tessellator} if rendering off-world (Inventory)
+ * @param aRenderer The {@link RenderBlocks} Renderer
+ * @param aNormalX The X Normal for current Quad Face
+ * @param aNormalY The Y Normal for current Quad Face
+ * @param aNormalZ The Z Normal for current Quad Face
+ */
+ default void startDrawingQuads(RenderBlocks aRenderer, float aNormalX, float aNormalY, float aNormalZ) {
+ if (aRenderer.useInventoryTint) {
+ Tessellator.instance.startDrawingQuads();
+ Tessellator.instance.setNormal(aNormalX, aNormalY, aNormalZ);
+ }
+ }
+
+ /**
+ * Will run the {@link Tessellator} to draw Quads if rendering off-world (Inventory)
+ * @param aRenderer The {@link RenderBlocks} Renderer
+ */
+ default void draw(RenderBlocks aRenderer) {
+ if (aRenderer.useInventoryTint) {
+ Tessellator.instance.draw();
+ }
+ }
}
diff --git a/src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java b/src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java
index 184bd67556..81cd497166 100644
--- a/src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java
+++ b/src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java
@@ -47,57 +47,69 @@ public class GT_CopiedBlockTexture implements ITexture {
public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
IIcon aIcon = getIcon(ForgeDirection.EAST.ordinal());
aRenderer.field_152631_f = true;
+ startDrawingQuads(aRenderer, 1.0f, 0.0f, 0.0f);
new LightingHelper(aRenderer)
.setupLightingXPos(aBlock, aX, aY, aZ)
.setupColor(ForgeDirection.EAST.ordinal(), 0xffffff);
aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, aIcon);
+ draw(aRenderer);
aRenderer.field_152631_f = false;
}
@Override
public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ startDrawingQuads(aRenderer, -1.0f, 0.0f, 0.0f);
IIcon aIcon = getIcon(ForgeDirection.WEST.ordinal());
new LightingHelper(aRenderer)
.setupLightingXNeg(aBlock, aX, aY, aZ)
.setupColor(ForgeDirection.WEST.ordinal(), 0xffffff);
aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, aIcon);
+ draw(aRenderer);
}
@Override
public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ startDrawingQuads(aRenderer, 0.0f, 1.0f, 0.0f);
IIcon aIcon = getIcon(ForgeDirection.UP.ordinal());
new LightingHelper(aRenderer)
.setupLightingYPos(aBlock, aX, aY, aZ)
.setupColor(ForgeDirection.UP.ordinal(), 0xffffff);
aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, aIcon);
+ draw(aRenderer);
}
@Override
public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ startDrawingQuads(aRenderer, 0.0f, -1.0f, 0.0f);
IIcon aIcon = getIcon(ForgeDirection.DOWN.ordinal());
new LightingHelper(aRenderer)
.setupLightingYNeg(aBlock, aX, aY, aZ)
.setupColor(ForgeDirection.DOWN.ordinal(), 0xffffff);
aRenderer.renderFaceYNeg(aBlock, aX, aY, aZ, aIcon);
+ draw(aRenderer);
}
@Override
public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ startDrawingQuads(aRenderer, 0.0f, 0.0f, 1.0f);
IIcon aIcon = getIcon(ForgeDirection.SOUTH.ordinal());
new LightingHelper(aRenderer)
.setupLightingZPos(aBlock, aX, aY, aZ)
.setupColor(ForgeDirection.SOUTH.ordinal(), 0xffffff);
aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, aIcon);
+ draw(aRenderer);
}
@Override
public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ startDrawingQuads(aRenderer, 0.0f, 0.0f, -1.0f);
IIcon aIcon = getIcon(ForgeDirection.NORTH.ordinal());
aRenderer.field_152631_f = true;
new LightingHelper(aRenderer)
.setupLightingZNeg(aBlock, aX, aY, aZ)
.setupColor(ForgeDirection.NORTH.ordinal(), 0xffffff);
aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, aIcon);
+ draw(aRenderer);
aRenderer.field_152631_f = false;
}
diff --git a/src/main/java/gregtech/api/objects/GT_RenderedGlowTexture.java b/src/main/java/gregtech/api/objects/GT_RenderedGlowTexture.java
index 7bafd9f627..c140e93bc6 100644
--- a/src/main/java/gregtech/api/objects/GT_RenderedGlowTexture.java
+++ b/src/main/java/gregtech/api/objects/GT_RenderedGlowTexture.java
@@ -50,6 +50,7 @@ public class GT_RenderedGlowTexture implements ITexture, IColorModulationContain
aRenderer.field_152631_f = true;
final boolean enableAO = aRenderer.enableAO;
aRenderer.enableAO = false;
+ startDrawingQuads(aRenderer, 1.0f, 0.0f, 0.0f);
Tessellator.instance.setBrightness(MAX_BRIGHTNESS);
Tessellator.instance.setColorOpaque(mRGBa[0], mRGBa[1], mRGBa[2]);
aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, mIconContainer.getIcon());
@@ -57,6 +58,7 @@ public class GT_RenderedGlowTexture implements ITexture, IColorModulationContain
Tessellator.instance.setColorOpaque(255, 255, 255);
aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
}
+ draw(aRenderer);
aRenderer.field_152631_f = false;
aRenderer.enableAO = enableAO;
}
@@ -66,6 +68,7 @@ public class GT_RenderedGlowTexture implements ITexture, IColorModulationContain
if (!GT_Mod.gregtechproxy.mRenderGlowTextures) return;
final boolean enableAO = aRenderer.enableAO;
aRenderer.enableAO = false;
+ startDrawingQuads(aRenderer, -1.0f, 0.0f, 0.0f);
Tessellator.instance.setBrightness(MAX_BRIGHTNESS);
Tessellator.instance.setColorOpaque(mRGBa[0], mRGBa[1], mRGBa[2]);
aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, mIconContainer.getIcon());
@@ -73,6 +76,7 @@ public class GT_RenderedGlowTexture implements ITexture, IColorModulationContain
Tessellator.instance.setColorOpaque(255, 255, 255);
aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
}
+ draw(aRenderer);
aRenderer.enableAO = enableAO;
}
@@ -81,6 +85,7 @@ public class GT_RenderedGlowTexture implements ITexture, IColorModulationContain
if (!GT_Mod.gregtechproxy.mRenderGlowTextures) return;
final boolean enableAO = aRenderer.enableAO;
aRenderer.enableAO = false;
+ startDrawingQuads(aRenderer, 0.0f, 1.0f, 0.0f);
Tessellator.instance.setBrightness(MAX_BRIGHTNESS);
Tessellator.instance.setColorOpaque(mRGBa[0], mRGBa[1], mRGBa[2]);
aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, mIconContainer.getIcon());
@@ -88,6 +93,7 @@ public class GT_RenderedGlowTexture implements ITexture, IColorModulationContain
Tessellator.instance.setColorOpaque(255, 255, 255);
aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
}
+ draw(aRenderer);
aRenderer.enableAO = enableAO;
}
@@ -95,6 +101,7 @@ public class GT_RenderedGlowTexture implements ITexture, IColorModulationContain
public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
if (!GT_Mod.gregtechproxy.mRenderGlowTextures) return;
final boolean enableAO = aRenderer.enableAO;
+ startDrawingQuads(aRenderer, 0.0f, -1.0f, 0.0f);
final Tessellator tessellator = Tessellator.instance;
IIcon aIcon = mIconContainer.getIcon();
@@ -155,6 +162,7 @@ public class GT_RenderedGlowTexture implements ITexture, IColorModulationContain
tessellator.addVertexWithUV(maxX, minY, minZ, minU, minV);
tessellator.addVertexWithUV(maxX, minY, maxZ, minU, maxV);
}
+ draw(aRenderer);
aRenderer.enableAO = enableAO;
}
@@ -163,12 +171,14 @@ public class GT_RenderedGlowTexture implements ITexture, IColorModulationContain
if (!GT_Mod.gregtechproxy.mRenderGlowTextures) return;
final boolean enableAO = aRenderer.enableAO;
aRenderer.enableAO = false;
+ startDrawingQuads(aRenderer, 0.0f, 0.0f, 1.0f);
Tessellator.instance.setBrightness(MAX_BRIGHTNESS);
Tessellator.instance.setColorOpaque(mRGBa[0], mRGBa[1], mRGBa[2]);
aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, mIconContainer.getIcon());
if (mIconContainer.getOverlayIcon() != null) {
aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
}
+ draw(aRenderer);
aRenderer.enableAO = enableAO;
}
@@ -178,6 +188,7 @@ public class GT_RenderedGlowTexture implements ITexture, IColorModulationContain
final boolean enableAO = aRenderer.enableAO;
aRenderer.enableAO = false;
aRenderer.field_152631_f = true;
+ startDrawingQuads(aRenderer, 0.0f, 0.0f, -1.0f);
Tessellator.instance.setBrightness(MAX_BRIGHTNESS);
Tessellator.instance.setColorOpaque(mRGBa[0], mRGBa[1], mRGBa[2]);
aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, mIconContainer.getIcon());
@@ -185,6 +196,7 @@ public class GT_RenderedGlowTexture implements ITexture, IColorModulationContain
Tessellator.instance.setColorOpaque(255, 255, 255);
aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
}
+ draw(aRenderer);
aRenderer.field_152631_f = false;
aRenderer.enableAO = enableAO;
}
diff --git a/src/main/java/gregtech/api/objects/GT_RenderedTexture.java b/src/main/java/gregtech/api/objects/GT_RenderedTexture.java
index 9a0fbf344e..1c2110fd0d 100644
--- a/src/main/java/gregtech/api/objects/GT_RenderedTexture.java
+++ b/src/main/java/gregtech/api/objects/GT_RenderedTexture.java
@@ -40,6 +40,7 @@ public class GT_RenderedTexture implements ITexture, IColorModulationContainer {
@Override
public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
aRenderer.field_152631_f = true;
+ startDrawingQuads(aRenderer, 1.0f, 0.0f, 0.0f);
LightingHelper lighting = new LightingHelper(aRenderer);
lighting.setupLightingXPos(aBlock, aX, aY, aZ)
.setupColor(ForgeDirection.EAST.ordinal(), mRGBa);
@@ -48,11 +49,13 @@ public class GT_RenderedTexture implements ITexture, IColorModulationContainer {
lighting.setupColor(ForgeDirection.EAST.ordinal(), 0xffffff);
aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
}
+ draw(aRenderer);
aRenderer.field_152631_f = false;
}
@Override
public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ startDrawingQuads(aRenderer, -1.0f, 0.0f, 0.0f);
LightingHelper lighting = new LightingHelper(aRenderer);
lighting.setupLightingXNeg(aBlock, aX, aY, aZ)
.setupColor(ForgeDirection.WEST.ordinal(), mRGBa);
@@ -61,10 +64,12 @@ public class GT_RenderedTexture implements ITexture, IColorModulationContainer {
lighting.setupColor(ForgeDirection.WEST.ordinal(), 0xffffff);
aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
}
+ draw(aRenderer);
}
@Override
public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ startDrawingQuads(aRenderer, 0.0f, 1.0f, 0.0f);
LightingHelper lighting = new LightingHelper(aRenderer);
lighting.setupLightingYPos(aBlock, aX, aY, aZ)
.setupColor(ForgeDirection.UP.ordinal(), mRGBa);
@@ -73,10 +78,12 @@ public class GT_RenderedTexture implements ITexture, IColorModulationContainer {
lighting.setupColor(ForgeDirection.UP.ordinal(), 0xffffff);
aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
}
+ draw(aRenderer);
}
@Override
public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ startDrawingQuads(aRenderer, 0.0f, -1.0f, 0.0f);
final Tessellator tessellator = Tessellator.instance;
IIcon aIcon = mIconContainer.getIcon();
@@ -167,10 +174,12 @@ public class GT_RenderedTexture implements ITexture, IColorModulationContainer {
}
tessellator.addVertexWithUV(maxX, minY, maxZ, minU, maxV);
}
+ draw(aRenderer);
}
@Override
public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ startDrawingQuads(aRenderer, 0.0f, 0.0f, 1.0f);
LightingHelper lighting = new LightingHelper(aRenderer);
lighting.setupLightingZPos(aBlock, aX, aY, aZ)
.setupColor(ForgeDirection.SOUTH.ordinal(), mRGBa);
@@ -179,10 +188,12 @@ public class GT_RenderedTexture implements ITexture, IColorModulationContainer {
lighting.setupColor(ForgeDirection.SOUTH.ordinal(), 0xffffff);
aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
}
+ draw(aRenderer);
}
@Override
public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ startDrawingQuads(aRenderer, 0.0f, 0.0f, -1.0f);
aRenderer.field_152631_f = true;
LightingHelper lighting = new LightingHelper(aRenderer);
lighting.setupLightingZNeg(aBlock, aX, aY, aZ)
@@ -192,6 +203,7 @@ public class GT_RenderedTexture implements ITexture, IColorModulationContainer {
lighting.setupColor(ForgeDirection.NORTH.ordinal(), 0xffffff);
aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
}
+ draw(aRenderer);
aRenderer.field_152631_f = false;
}
diff --git a/src/main/java/gregtech/api/objects/GT_StdRenderedTexture.java b/src/main/java/gregtech/api/objects/GT_StdRenderedTexture.java
index 041fed4164..31831ca835 100644
--- a/src/main/java/gregtech/api/objects/GT_StdRenderedTexture.java
+++ b/src/main/java/gregtech/api/objects/GT_StdRenderedTexture.java
@@ -31,6 +31,7 @@ public class GT_StdRenderedTexture extends GT_RenderedTexture{
@Override
public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ startDrawingQuads(aRenderer, 0.0f, -1.0f, 0.0f);
LightingHelper lighting = new LightingHelper(aRenderer);
lighting.setupLightingYNeg(aBlock, aX, aY, aZ)
.setupColor(ForgeDirection.DOWN.ordinal(), mRGBa);
@@ -39,5 +40,6 @@ public class GT_StdRenderedTexture extends GT_RenderedTexture{
lighting.setupColor(ForgeDirection.DOWN.ordinal(), 0xffffff);
aRenderer.renderFaceYNeg(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
}
+ draw(aRenderer);
}
}