Skip to content

Commit 52641b7

Browse files
committed
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.
1 parent 3e751ee commit 52641b7

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

src/main/java/dan200/computercraft/client/render/TileEntityMonitorRenderer.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,19 +47,20 @@ private void renderMonitorAt( TileMonitor monitor, double posX, double posY, dou
4747

4848
if( originTerminal == null ) return;
4949
TileMonitor origin = originTerminal.getOrigin();
50+
BlockPos monitorPos = monitor.getPos();
5051

51-
// Ensure each monitor is rendered only once
52+
// Ensure each monitor terminal is rendered only once. We allow rendering a specific tile
53+
// multiple times in a single frame to ensure compatibility with shaders which may run a
54+
// pass multiple times.
5255
long renderFrame = ComputerCraft.getRenderFrame();
53-
if( originTerminal.lastRenderFrame == renderFrame )
56+
if( originTerminal.lastRenderFrame == renderFrame && !monitorPos.equals( originTerminal.lastRenderPos ) )
5457
{
5558
return;
5659
}
57-
else
58-
{
59-
originTerminal.lastRenderFrame = renderFrame;
60-
}
6160

62-
BlockPos monitorPos = monitor.getPos();
61+
originTerminal.lastRenderFrame = renderFrame;
62+
originTerminal.lastRenderPos = monitorPos;
63+
6364
BlockPos originPos = origin.getPos();
6465
posX += originPos.getX() - monitorPos.getX();
6566
posY += originPos.getY() - monitorPos.getY();

src/main/java/dan200/computercraft/shared/peripheral/monitor/ClientMonitor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import dan200.computercraft.shared.common.ClientTerminal;
44
import net.minecraft.client.renderer.GlStateManager;
5+
import net.minecraft.util.math.BlockPos;
56

67
import java.util.HashSet;
78
import java.util.Iterator;
@@ -14,6 +15,7 @@ public class ClientMonitor extends ClientTerminal
1415
private final TileMonitor origin;
1516

1617
public long lastRenderFrame = -1;
18+
public BlockPos lastRenderPos = null;
1719
public int[] renderDisplayLists = null;
1820

1921
public ClientMonitor( boolean colour, TileMonitor origin )

0 commit comments

Comments
 (0)