From 7c1425f9ce38a6eb9e1063a37e8abc374dc53a63 Mon Sep 17 00:00:00 2001 From: Léa Gris Date: Thu, 6 May 2021 01:28:41 +0200 Subject: 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). --- .../java/gregtech/api/interfaces/ITexture.java | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/main/java/gregtech/api/interfaces') 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(); + } + } } -- cgit From 678c9a6e1e7a3a1127c40ae5c3dda7ef4519bfb7 Mon Sep 17 00:00:00 2001 From: Léa Gris Date: Thu, 20 May 2021 22:57:12 +0200 Subject: feat(render): implementation-free api texture factory Provides an implementation-free API Texture factory an builder. Deprecates gregtech.api.objects.GT_*Texture.java classes Once all GregTech add-on will be migrated to the new implemnetation-free API, changes to the implementation will not affect the add-on. For now, this API allow rendering of in-world glow textures. In-inventory/hand rendering of glow texture require implementation changes that are postponed until no add-on uses the deprecated embedded implementation API. --- .../gregtech/api/interfaces/IBlockContainer.java | 8 +++ .../java/gregtech/api/interfaces/ITexture.java | 7 +++ .../gregtech/api/interfaces/ITextureBuilder.java | 72 ++++++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 src/main/java/gregtech/api/interfaces/IBlockContainer.java create mode 100644 src/main/java/gregtech/api/interfaces/ITextureBuilder.java (limited to 'src/main/java/gregtech/api/interfaces') diff --git a/src/main/java/gregtech/api/interfaces/IBlockContainer.java b/src/main/java/gregtech/api/interfaces/IBlockContainer.java new file mode 100644 index 0000000000..7949ae90ce --- /dev/null +++ b/src/main/java/gregtech/api/interfaces/IBlockContainer.java @@ -0,0 +1,8 @@ +package gregtech.api.interfaces; + +import net.minecraft.block.Block; + +public interface IBlockContainer { + Block getBlock(); + byte getMeta(); +} diff --git a/src/main/java/gregtech/api/interfaces/ITexture.java b/src/main/java/gregtech/api/interfaces/ITexture.java index 61244a10ae..4c0b1984ca 100644 --- a/src/main/java/gregtech/api/interfaces/ITexture.java +++ b/src/main/java/gregtech/api/interfaces/ITexture.java @@ -19,6 +19,13 @@ public interface ITexture { boolean isValidTexture(); + /** + * @return {@code true} if this texture is from the old package + */ + default boolean isOldTexture() { + return getClass().toString().startsWith("gregtech.api.objects"); + } + /** * Will initialize the {@link Tessellator} if rendering off-world (Inventory) * @param aRenderer The {@link RenderBlocks} Renderer diff --git a/src/main/java/gregtech/api/interfaces/ITextureBuilder.java b/src/main/java/gregtech/api/interfaces/ITextureBuilder.java new file mode 100644 index 0000000000..fde7f2e27b --- /dev/null +++ b/src/main/java/gregtech/api/interfaces/ITextureBuilder.java @@ -0,0 +1,72 @@ +package gregtech.api.interfaces; + +import gregtech.api.render.TextureFactory; +import net.minecraft.block.Block; +import net.minecraftforge.common.util.ForgeDirection; + +/** + *

This Interface defines operations to configure and build instances of the {@link ITexture} implementations

+ *

Use the {@link TextureFactory#builder()} method to get an instance of the {@link ITextureBuilder} implementation.

+ */ +public interface ITextureBuilder { + /** + * Build the {@link ITexture} + * + * @return The built {@link ITexture} + */ + ITexture build(); + + /** + * @param block The {@link Block} + * @param meta The meta value for the Block + * @return {@link ITextureBuilder} for chaining + */ + ITextureBuilder setFromBlock(Block block, int meta); + + /** + * @param side

The {@link ForgeDirection} side providing the texture

+ *

Default is {@link ForgeDirection#UNKNOWN} to use same side as rendered

+ * @return {@link ITextureBuilder} for chaining + */ + ITextureBuilder setFromSide(ForgeDirection side); + + /** + * @param iconContainers The {@link IIconContainer}s to add + * @return {@link ITextureBuilder} for chaining + */ + ITextureBuilder addIcon(IIconContainer... iconContainers); + + /** + * @param rgba The RGBA tint for this {@link ITexture} + * @return {@link ITextureBuilder} for chaining + */ + ITextureBuilder setRGBA(short[] rgba); + + /** + * @param iTextures The {@link ITexture} layers to add + * @return {@link ITextureBuilder} for chaining + */ + ITextureBuilder addLayer(ITexture... iTextures); + + /** + * Set alpha blending + * @param allowAlpha to set + * + * @return {@link ITextureBuilder} for chaining + */ + ITextureBuilder setAllowAlpha(boolean allowAlpha); + + /** + * Texture will render with same orientation as with vanilla blocks + * + * @return {@link ITextureBuilder} for chaining + */ + ITextureBuilder stdOrient(); + + /** + * Texture always render with full brightness to glow in the dark + * + * @return {@link ITextureBuilder} for chaining + */ + ITextureBuilder glow(); +} -- cgit From 6adfad819f014bbf86afa36fd32849d772b0efb4 Mon Sep 17 00:00:00 2001 From: Léa Gris Date: Fri, 21 May 2021 14:06:47 +0200 Subject: code layout --- src/main/java/gregtech/api/interfaces/ITextureBuilder.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/main/java/gregtech/api/interfaces') diff --git a/src/main/java/gregtech/api/interfaces/ITextureBuilder.java b/src/main/java/gregtech/api/interfaces/ITextureBuilder.java index fde7f2e27b..8a4d715ccb 100644 --- a/src/main/java/gregtech/api/interfaces/ITextureBuilder.java +++ b/src/main/java/gregtech/api/interfaces/ITextureBuilder.java @@ -21,32 +21,32 @@ public interface ITextureBuilder { * @param meta The meta value for the Block * @return {@link ITextureBuilder} for chaining */ - ITextureBuilder setFromBlock(Block block, int meta); + ITextureBuilder setFromBlock(final Block block, final int meta); /** * @param side

The {@link ForgeDirection} side providing the texture

*

Default is {@link ForgeDirection#UNKNOWN} to use same side as rendered

* @return {@link ITextureBuilder} for chaining */ - ITextureBuilder setFromSide(ForgeDirection side); + ITextureBuilder setFromSide(final ForgeDirection side); /** * @param iconContainers The {@link IIconContainer}s to add * @return {@link ITextureBuilder} for chaining */ - ITextureBuilder addIcon(IIconContainer... iconContainers); + ITextureBuilder addIcon(final IIconContainer... iconContainers); /** * @param rgba The RGBA tint for this {@link ITexture} * @return {@link ITextureBuilder} for chaining */ - ITextureBuilder setRGBA(short[] rgba); + ITextureBuilder setRGBA(final short[] rgba); /** * @param iTextures The {@link ITexture} layers to add * @return {@link ITextureBuilder} for chaining */ - ITextureBuilder addLayer(ITexture... iTextures); + ITextureBuilder addLayer(final ITexture... iTextures); /** * Set alpha blending @@ -54,7 +54,7 @@ public interface ITextureBuilder { * * @return {@link ITextureBuilder} for chaining */ - ITextureBuilder setAllowAlpha(boolean allowAlpha); + ITextureBuilder setAllowAlpha(final boolean allowAlpha); /** * Texture will render with same orientation as with vanilla blocks -- cgit