From 59308db50b668a5c8177c42162b89334746b6fb9 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 4 Nov 2021 15:30:33 -0400 Subject: [PATCH] gpu: store and use previous viewport's offsets for each frame Shortly after logging in there several frames without a tli, and so no scene is rendered on them. Since we glClear the entire buffer each frame and re-render the most recent scene draw to emulate the vanilla effect of not painting over the viewport, the viewport offset x/y values at the time we draw the frame may be -1 due to that frame not having the scene rendered. Store the viewport offsets at the time of the most recent scene draw and use them for each subsequent frame. --- .../java/net/runelite/client/plugins/gpu/GpuPlugin.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java index 2beac24839..84ab41f167 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java @@ -262,6 +262,9 @@ public class GpuPlugin extends Plugin implements DrawCallbacks private int yaw; private int pitch; + private int viewportOffsetX; + private int viewportOffsetY; + // fields for non-compute draw private boolean drawingModel; private int modelX, modelY, modelZ; @@ -794,6 +797,8 @@ public class GpuPlugin extends Plugin implements DrawCallbacks { yaw = client.getCameraYaw(); pitch = client.getCameraPitch(); + viewportOffsetX = client.getViewportXOffset(); + viewportOffsetY = client.getViewportYOffset(); final Scene scene = client.getScene(); scene.setDrawDistance(getDrawDistance()); @@ -1132,8 +1137,8 @@ public class GpuPlugin extends Plugin implements DrawCallbacks } final Texture[] textures = textureProvider.getTextures(); - int renderHeightOff = client.getViewportYOffset(); - int renderWidthOff = client.getViewportXOffset(); + int renderWidthOff = viewportOffsetX; + int renderHeightOff = viewportOffsetY; int renderCanvasHeight = canvasHeight; int renderViewportHeight = viewportHeight; int renderViewportWidth = viewportWidth;