From 5b12bcc907f9ce7c0ebf963fa8bc1d990152250f Mon Sep 17 00:00:00 2001 From: aHooder <831317+aHooder@users.noreply.github.com> Date: Fri, 30 Apr 2021 23:49:14 +0200 Subject: [PATCH] gpu: workaround for forced anti-aliasing Forced anti-aliasing by the GPU applies multisampling to the default framebuffer, and when blitting between two multisampled FBOs, the number of samples in both FBOs has to match. In order to make sure our anti-aliasing FBO has the same number of samples as the default FBO, we bind the default FBO and check whether its number of samples is non-zero. If it is, use this as the number of samples for our anti-aliasing FBO instead of getting it from the configured anti-aliasing mode. Co-authored-by: Adam --- .../java/net/runelite/client/plugins/gpu/GpuPlugin.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 8ba9db5a67..fd35d806b3 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 @@ -1078,8 +1078,14 @@ public class GpuPlugin extends Plugin implements DrawCallbacks { shutdownAAFbo(); + // Bind default FBO to check whether anti-aliasing is forced + gl.glBindFramebuffer(gl.GL_FRAMEBUFFER, 0); + final int forcedAASamples = glGetInteger(gl, gl.GL_SAMPLES); final int maxSamples = glGetInteger(gl, gl.GL_MAX_SAMPLES); - final int samples = Math.min(antiAliasingMode.getSamples(), maxSamples); + final int samples = forcedAASamples != 0 ? forcedAASamples : + Math.min(antiAliasingMode.getSamples(), maxSamples); + + log.debug("AA samples: {}, max samples: {}, forced samples: {}", samples, maxSamples, forcedAASamples); initAAFbo(stretchedCanvasWidth, stretchedCanvasHeight, samples);