Angelica Thread Safety

This commit is contained in:
Jason Mitchell authored and Jason Mitchell committed 2024-02-20 08:25:02 -08:00
1 parent e9e63d6fc5
commit 06ec360694
15 files changed
+82 -38

No files matched your search

@@ -100,7 +100,8 @@ public enum TextureType {
@Override
@SideOnly(Side.CLIENT)
protected RenderBlocks createRenderContext(RenderBlocks rendererOld, IBlockAccess world, Object cachedObject) {
RenderBlocksColumn ret = theRenderBlocksColumn;
TextureType.initStatics();
RenderBlocksColumn ret = theRenderBlocksColumn.get();
Pair<TextureSubmap, IIcon> data = (Pair<TextureSubmap, IIcon>) cachedObject;
ret.blockAccess = world;
@@ -205,7 +206,7 @@ public enum TextureType {
@Override
@SideOnly(Side.CLIENT)
protected RenderBlocks createRenderContext(RenderBlocks rendererOld, IBlockAccess world, Object cachedObject) {
RenderBlocksCTM ret = theRenderBlocksCTM;
RenderBlocksCTM ret = theRenderBlocksCTM.get();
Triple<?, TextureSubmap, TextureSubmap> data = (Triple<?, TextureSubmap, TextureSubmap>) cachedObject;
ret.blockAccess = world;
@@ -325,9 +326,9 @@ public enum TextureType {
private static final CTM ctm = CTM.getInstance();
private static final Random rand = new Random();
@SideOnly(Side.CLIENT)
private static RenderBlocksCTM theRenderBlocksCTM;
private static ThreadLocal<RenderBlocksCTM> theRenderBlocksCTM;
@SideOnly(Side.CLIENT)
private static RenderBlocksColumn theRenderBlocksColumn;
private static ThreadLocal<RenderBlocksColumn> theRenderBlocksColumn;
private String[] suffixes;
static {
@@ -338,16 +339,17 @@ public enum TextureType {
this.suffixes = suffixes.length == 0 ? new String[] { "" } : suffixes;
}
private static void initStatics() {
if (theRenderBlocksCTM == null) {
theRenderBlocksCTM = new RenderBlocksCTM();
theRenderBlocksColumn = new RenderBlocksColumn();
}
}
private static void initStatics() {
if (theRenderBlocksCTM == null) {
theRenderBlocksCTM = ThreadLocal.withInitial(RenderBlocksCTM::new);
theRenderBlocksColumn = ThreadLocal.withInitial(RenderBlocksColumn::new);
}
}
@SideOnly(Side.CLIENT)
public static void clearStatics() {
theRenderBlocksCTM = null;
theRenderBlocksColumn = null;
theRenderBlocksCTM.remove();
theRenderBlocksColumn.remove();
}
public ISubmapManager createManagerFor(ICarvingVariation variation, String texturePath) {
@@ -428,7 +430,6 @@ public enum TextureType {
@Override
public RenderBlocks createRenderContext(RenderBlocks rendererOld, Block block, IBlockAccess world) {
initStatics();
RenderBlocks rb = type.createRenderContext(rendererOld, world, cachedObject);
rb.setRenderBoundsFromBlock(block);
return rb;
@@ -10,10 +10,13 @@ import net.minecraft.world.IBlockAccess;
import org.lwjgl.opengl.GL11;
import com.gtnewhorizons.angelica.api.ThreadSafeISBRH;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import cpw.mods.fml.client.registry.RenderingRegistry;
import team.chisel.ctmlib.Drawing;
@ThreadSafeISBRH(perThread = false)
public class RendererCTMPane implements ISimpleBlockRenderingHandler {
public static int id;
@@ -32,8 +35,6 @@ public class RendererCTMPane implements ISimpleBlockRenderingHandler {
class PaneRenderer {
Tessellator tessellator;
double i0u0;
double i0uh;
double i0u1;
@@ -69,8 +70,6 @@ public class RendererCTMPane implements ISimpleBlockRenderingHandler {
double y1;
void set(double x, double y, double z, IIcon icon, IIcon icon1, IIcon icon2) {
tessellator = Tessellator.instance;
i0u0 = icon.getMinU();
i0uh = icon.getInterpolatedU(8.0D);
i0u1 = icon.getMaxU();
@@ -107,6 +106,8 @@ public class RendererCTMPane implements ISimpleBlockRenderingHandler {
}
public void renderNorthPane() {
Tessellator tessellator = Tessellator.instance;
tessellator.addVertexWithUV(xh, y1, z0, i0uh, i0v0);
tessellator.addVertexWithUV(xh, y0, z0, i0uh, i0v1);
tessellator.addVertexWithUV(xh, y0, zh, i0u0, i0v1);
@@ -118,6 +119,8 @@ public class RendererCTMPane implements ISimpleBlockRenderingHandler {
}
public void renderSouthPane() {
Tessellator tessellator = Tessellator.instance;
tessellator.addVertexWithUV(xh, y1, zh, i0u1, i0v0);
tessellator.addVertexWithUV(xh, y0, zh, i0u1, i0v1);
tessellator.addVertexWithUV(xh, y0, z1, i0uh, i0v1);
@@ -129,6 +132,8 @@ public class RendererCTMPane implements ISimpleBlockRenderingHandler {
}
public void renderWestPane() {
Tessellator tessellator = Tessellator.instance;
tessellator.addVertexWithUV(x0, y1, zh, i0uh, i0v0);
tessellator.addVertexWithUV(x0, y0, zh, i0uh, i0v1);
tessellator.addVertexWithUV(xh, y0, zh, i0u0, i0v1);
@@ -140,6 +145,8 @@ public class RendererCTMPane implements ISimpleBlockRenderingHandler {
}
public void renderEastPane() {
Tessellator tessellator = Tessellator.instance;
tessellator.addVertexWithUV(xh, y1, zh, i0u1, i0v0);
tessellator.addVertexWithUV(xh, y0, zh, i0u1, i0v1);
tessellator.addVertexWithUV(x1, y0, zh, i0uh, i0v1);
@@ -151,6 +158,8 @@ public class RendererCTMPane implements ISimpleBlockRenderingHandler {
}
public void renderVerticalNS(double y, double zoff0, double zoff1, double v0, double v1) {
Tessellator tessellator = Tessellator.instance;
tessellator.addVertexWithUV(xp0, y0 + y, z0 + zoff0, i1u0, i1v0 + i1v * v0);
tessellator.addVertexWithUV(xp0, y0 + y, z0 + zoff1, i1u0, i1v0 + i1v * v1);
tessellator.addVertexWithUV(xp1, y0 + y, z0 + zoff1, i1u1, i1v0 + i1v * v1);
@@ -162,6 +171,8 @@ public class RendererCTMPane implements ISimpleBlockRenderingHandler {
}
public void renderVerticalWE(double y, double xoff0, double xoff1, double v0, double v1) {
Tessellator tessellator = Tessellator.instance;
tessellator.addVertexWithUV(x0 + xoff0, y0 + y, zp1, i1u1, i1v0 + i1v * v0);
tessellator.addVertexWithUV(x0 + xoff1, y0 + y, zp1, i1u1, i1v0 + i1v * v1);
tessellator.addVertexWithUV(x0 + xoff1, y0 + y, zp0, i1u0, i1v0 + i1v * v1);
@@ -173,6 +184,8 @@ public class RendererCTMPane implements ISimpleBlockRenderingHandler {
}
public void renderHorizontalNS(double zoff, double v0, double v1) {
Tessellator tessellator = Tessellator.instance;
tessellator.addVertexWithUV(xp0, y1, z0 + zoff, i2u0, i2v0 + i2v * v1);
tessellator.addVertexWithUV(xp0, y0, z0 + zoff, i2u0, i2v0 + i2v * v0);
tessellator.addVertexWithUV(xp1, y0, z0 + zoff, i2u1, i2v0 + i2v * v0);
@@ -185,6 +198,8 @@ public class RendererCTMPane implements ISimpleBlockRenderingHandler {
}
public void renderHorizontalWE(double xoff, double v0, double v1) {
Tessellator tessellator = Tessellator.instance;
tessellator.addVertexWithUV(x0 + xoff, y1, zp0, i2u0, i2v0 + i2v * v1);
tessellator.addVertexWithUV(x0 + xoff, y0, zp0, i2u0, i2v0 + i2v * v0);
tessellator.addVertexWithUV(x0 + xoff, y0, zp1, i2u1, i2v0 + i2v * v0);
@@ -196,13 +211,14 @@ public class RendererCTMPane implements ISimpleBlockRenderingHandler {
}
}
PaneRenderer paneRenderer = new PaneRenderer();
final ThreadLocal<PaneRenderer> paneRendererThreadLocal = ThreadLocal.withInitial(PaneRenderer::new);
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block b, int modelId,
RenderBlocks renderer) {
BlockPane block = (BlockPane) b;
Tessellator tessellator = Tessellator.instance;
final Tessellator tessellator = Tessellator.instance;
final PaneRenderer paneRenderer = paneRendererThreadLocal.get();
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
@@ -6,11 +6,14 @@ import net.minecraft.world.IBlockAccess;
import org.lwjgl.opengl.GL11;
import com.gtnewhorizons.angelica.api.ThreadSafeISBRH;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import cpw.mods.fml.client.registry.RenderingRegistry;
import team.chisel.Chisel;
import team.chisel.ctmlib.Drawing;
@ThreadSafeISBRH(perThread = false)
public class RendererEldritch implements ISimpleBlockRenderingHandler {
public RendererEldritch() {
@@ -24,12 +27,14 @@ public class RendererEldritch implements ISimpleBlockRenderingHandler {
GL11.glTranslatef(0.5F, 0.5F, 0.5F);
}
RenderBlocksEldritch renderer = new RenderBlocksEldritch();
ThreadLocal<RenderBlocksEldritch> rendererThreadLocal = ThreadLocal.withInitial(RenderBlocksEldritch::new);
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId,
RenderBlocks rendererOld) {
final RenderBlocksEldritch renderer = rendererThreadLocal.get();
// tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x,
// y, z));
/*
@@ -7,6 +7,8 @@ import net.minecraft.world.IBlockAccess;
import org.lwjgl.opengl.GL11;
import com.gtnewhorizons.angelica.api.ThreadSafeISBRH;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import cpw.mods.fml.client.registry.RenderingRegistry;
import team.chisel.Chisel;
@@ -15,6 +17,7 @@ import team.chisel.config.Configurations;
import team.chisel.ctmlib.Drawing;
import team.chisel.utils.GeneralClient;
@ThreadSafeISBRH(perThread = false)
public class RendererLayeredGlow implements ISimpleBlockRenderingHandler {
public RendererLayeredGlow() {
@@ -36,8 +39,9 @@ public class RendererLayeredGlow implements ISimpleBlockRenderingHandler {
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId,
RenderBlocks renderer) {
Tessellator.instance.setColorOpaque_I(Configurations.configColors[world.getBlockMetadata(x, y, z)]);
Tessellator.instance.setBrightness(0xF000F0);
final Tessellator tessellator = Tessellator.instance;
tessellator.setColorOpaque_I(Configurations.configColors[world.getBlockMetadata(x, y, z)]);
tessellator.setBrightness(0xF000F0);
Drawing.renderAllFaces(renderer, block, x, y, z, ((BlockCarvableGlow) block).getGlowTexture());
renderer.renderStandardBlock(block, x, y, z);
return true;
@@ -16,14 +16,18 @@ import net.minecraft.init.Blocks;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.client.MinecraftForgeClient;
import com.gtnewhorizons.angelica.api.ThreadSafeISBRH;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import cpw.mods.fml.client.registry.RenderingRegistry;
import team.chisel.block.BlockMultiLayerBase;
import team.chisel.ctmlib.Drawing;
@ThreadSafeISBRH(perThread = false)
public class RendererMultiLayer implements ISimpleBlockRenderingHandler {
float bot = -0.001f, top = 1.0f - bot;
final static float bot = -0.001f;
final static float top = 1.0f - bot;
public static int id;
public RendererMultiLayer() {
@@ -7,12 +7,15 @@ import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import com.gtnewhorizons.angelica.api.ThreadSafeISBRH;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import cpw.mods.fml.client.registry.RenderingRegistry;
import team.chisel.Chisel;
import team.chisel.block.BlockRoadLine;
import team.chisel.ctmlib.Drawing;
@ThreadSafeISBRH(perThread = false)
public class RendererRoadLine implements ISimpleBlockRenderingHandler {
public RendererRoadLine() {
@@ -6,12 +6,15 @@ import net.minecraft.world.IBlockAccess;
import org.lwjgl.opengl.GL11;
import com.gtnewhorizons.angelica.api.ThreadSafeISBRH;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import cpw.mods.fml.client.registry.RenderingRegistry;
import team.chisel.Chisel;
import team.chisel.block.BlockCarvableLayered;
import team.chisel.ctmlib.Drawing;
@ThreadSafeISBRH(perThread = false)
public class RendererSimpleLayered implements ISimpleBlockRenderingHandler {
public RendererSimpleLayered() {
@@ -6,11 +6,14 @@ import net.minecraft.world.IBlockAccess;
import org.lwjgl.opengl.GL11;
import com.gtnewhorizons.angelica.api.ThreadSafeISBRH;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import cpw.mods.fml.client.registry.RenderingRegistry;
import team.chisel.block.BlockSnakestone;
import team.chisel.ctmlib.Drawing;
@ThreadSafeISBRH(perThread = false)
public class RendererSnakeStone implements ISimpleBlockRenderingHandler {
public static int id;
@@ -6,11 +6,14 @@ import net.minecraft.world.IBlockAccess;
import org.lwjgl.opengl.GL11;
import com.gtnewhorizons.angelica.api.ThreadSafeISBRH;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import cpw.mods.fml.client.registry.RenderingRegistry;
import team.chisel.block.BlockCarvableStairs;
import team.chisel.ctmlib.Drawing;
@ThreadSafeISBRH(perThread = false)
public class RendererStairs implements ISimpleBlockRenderingHandler {
public static int id;
+1 -1
View File
@@ -83,7 +83,7 @@ public class CTM {
public Optional<Boolean> disableObscuredFaceCheck = Optional.absent();
protected TIntObjectMap<Dir[]> submapMap = new TIntObjectHashMap<Dir[]>();
protected TIntObjectMap<Dir[]> submapMap = new TIntObjectHashMap<>();
protected EnumMap<Dir, Boolean> connectionMap = Maps.newEnumMap(Dir.class);
protected CTM() {
+2 -1
View File
@@ -1,10 +1,11 @@
package team.chisel.ctmlib;
import cpw.mods.fml.common.ModAPIManager;
import team.chisel.Tags;
public class CTMLib {
public static final String VERSION = "GRADLETOKEN_VERSION";
public static final String VERSION = Tags.VERSION;
private static boolean chiselPresent, chiselInitialized;
@@ -18,7 +18,7 @@ import cpw.mods.fml.common.registry.GameRegistry;
*/
public class CTMRenderer implements ISimpleBlockRenderingHandler {
private int renderId;
private final int renderId;
public CTMRenderer(int renderId) {
this.renderId = renderId;
@@ -113,10 +113,11 @@ public class RenderBlocksCTM extends RenderBlocks {
private static double u, v, xDiff, yDiff, zDiff, uDiff, vDiff;
void render(RenderBlocksCTM inst, ForgeDirection normal, int cacheID) {
final Tessellator tessellator = Tessellator.instance;
if (inst.enableAO) {
Tessellator.instance
.setColorOpaque_F(inst.redCache[cacheID], inst.grnCache[cacheID], inst.bluCache[cacheID]);
Tessellator.instance.setBrightness(inst.lightingCache[cacheID]);
tessellator.setColorOpaque_F(inst.redCache[cacheID], inst.grnCache[cacheID], inst.bluCache[cacheID]);
tessellator.setBrightness(inst.lightingCache[cacheID]);
}
u = cacheID == 1 || cacheID == 2 ? inst.maxU : inst.minU;
@@ -151,7 +152,7 @@ public class RenderBlocksCTM extends RenderBlocks {
xDiff = yDiff = zDiff = 1;
}
Tessellator.instance.addVertexWithUV(
tessellator.addVertexWithUV(
inst.renderMinX + (x * xDiff),
inst.renderMinY + (y * yDiff),
inst.renderMinZ + (z * zDiff),
@@ -225,7 +226,6 @@ public class RenderBlocksCTM extends RenderBlocks {
renderMaxX = renderMaxY = renderMaxZ = 1;
}
protected Tessellator tessellator = Tessellator.instance;
protected double minU, maxU;
protected double minV, maxV;
protected int[] lightingCache = new int[4];
@@ -253,16 +253,17 @@ public class RenderBlocksCTM extends RenderBlocks {
by = y;
bz = z;
meta = Minecraft.getMinecraft().theWorld.getBlockMetadata(x, y, z);
final Tessellator tessellator = Tessellator.instance;
Tessellator.instance.setColorOpaque_F(1.0F, 1.0F, 1.0F);
Tessellator.instance.addTranslation(x, y, z);
tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
tessellator.addTranslation(x, y, z);
if (rendererOld != null && rendererOld.hasOverrideBlockTexture()) {
setOverrideBlockTexture(rendererOld.overrideBlockTexture);
}
inWorld = true;
boolean res = super.renderStandardBlock(block, x, y, z);
inWorld = false;
Tessellator.instance.addTranslation(-x, -y, -z);
tessellator.addTranslation(-x, -y, -z);
return res;
}
@@ -17,7 +17,8 @@ import lombok.Getter;
public class SubmapManagerCTM implements ISubmapManager {
@SideOnly(Side.CLIENT)
private static RenderBlocksCTM rb;
private static final ThreadLocal<RenderBlocksCTM> renderBlocksThreadLocal = ThreadLocal
.withInitial(RenderBlocksCTM::new);
@Getter
private TextureSubmap submap, submapSmall;
@@ -54,9 +55,7 @@ public class SubmapManagerCTM implements ISubmapManager {
@Override
@SideOnly(Side.CLIENT)
public RenderBlocks createRenderContext(RenderBlocks rendererOld, Block block, IBlockAccess world) {
if (rb == null) {
rb = new RenderBlocksCTM();
}
RenderBlocksCTM rb = renderBlocksThreadLocal.get();
rb.setRenderBoundsFromBlock(block);
rb.submap = submap;
rb.submapSmall = submapSmall;