mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2024-12-12 19:20:29 +00:00
Allow rendering a monitor tile multiple times in a tick
Shader mods may perform multiple passes when rendering a tile, so monitors will be drawn transparently on later passes. In order to prevent this we allow drawing the a single tile multiple times in a tick.
This commit is contained in:
parent
3e751ee94a
commit
52641b7bea
@ -47,19 +47,20 @@ public class TileEntityMonitorRenderer extends TileEntitySpecialRenderer<TileMon
|
|||||||
|
|
||||||
if( originTerminal == null ) return;
|
if( originTerminal == null ) return;
|
||||||
TileMonitor origin = originTerminal.getOrigin();
|
TileMonitor origin = originTerminal.getOrigin();
|
||||||
|
BlockPos monitorPos = monitor.getPos();
|
||||||
|
|
||||||
// Ensure each monitor is rendered only once
|
// Ensure each monitor terminal is rendered only once. We allow rendering a specific tile
|
||||||
|
// multiple times in a single frame to ensure compatibility with shaders which may run a
|
||||||
|
// pass multiple times.
|
||||||
long renderFrame = ComputerCraft.getRenderFrame();
|
long renderFrame = ComputerCraft.getRenderFrame();
|
||||||
if( originTerminal.lastRenderFrame == renderFrame )
|
if( originTerminal.lastRenderFrame == renderFrame && !monitorPos.equals( originTerminal.lastRenderPos ) )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
originTerminal.lastRenderFrame = renderFrame;
|
|
||||||
}
|
|
||||||
|
|
||||||
BlockPos monitorPos = monitor.getPos();
|
originTerminal.lastRenderFrame = renderFrame;
|
||||||
|
originTerminal.lastRenderPos = monitorPos;
|
||||||
|
|
||||||
BlockPos originPos = origin.getPos();
|
BlockPos originPos = origin.getPos();
|
||||||
posX += originPos.getX() - monitorPos.getX();
|
posX += originPos.getX() - monitorPos.getX();
|
||||||
posY += originPos.getY() - monitorPos.getY();
|
posY += originPos.getY() - monitorPos.getY();
|
||||||
|
@ -2,6 +2,7 @@ package dan200.computercraft.shared.peripheral.monitor;
|
|||||||
|
|
||||||
import dan200.computercraft.shared.common.ClientTerminal;
|
import dan200.computercraft.shared.common.ClientTerminal;
|
||||||
import net.minecraft.client.renderer.GlStateManager;
|
import net.minecraft.client.renderer.GlStateManager;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
@ -14,6 +15,7 @@ public class ClientMonitor extends ClientTerminal
|
|||||||
private final TileMonitor origin;
|
private final TileMonitor origin;
|
||||||
|
|
||||||
public long lastRenderFrame = -1;
|
public long lastRenderFrame = -1;
|
||||||
|
public BlockPos lastRenderPos = null;
|
||||||
public int[] renderDisplayLists = null;
|
public int[] renderDisplayLists = null;
|
||||||
|
|
||||||
public ClientMonitor( boolean colour, TileMonitor origin )
|
public ClientMonitor( boolean colour, TileMonitor origin )
|
||||||
|
Loading…
Reference in New Issue
Block a user