mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-10-31 13:42:59 +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:
		| @@ -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 ) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 SquidDev
					SquidDev