Merge pull request #8059 from deathbeam/make-gpu-dpi-aware

Make GPU plugin DPI aware on Java 9+
This commit is contained in:
Adam
2019-03-24 14:56:40 -04:00
committed by GitHub

View File

@@ -37,7 +37,9 @@ import com.jogamp.opengl.GLException;
import com.jogamp.opengl.GLProfile;
import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferInt;
import java.nio.ByteBuffer;
@@ -46,6 +48,7 @@ import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import java.util.function.Function;
import javax.inject.Inject;
import jogamp.nativewindow.SurfaceScaleUtils;
import jogamp.nativewindow.jawt.x11.X11JAWTWindow;
import jogamp.newt.awt.NewtFactoryAWT;
import lombok.extern.slf4j.Slf4j;
@@ -71,18 +74,7 @@ import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginInstantiationException;
import net.runelite.client.plugins.PluginManager;
import static net.runelite.client.plugins.gpu.GLUtil.glDeleteBuffer;
import static net.runelite.client.plugins.gpu.GLUtil.glDeleteFrameBuffer;
import static net.runelite.client.plugins.gpu.GLUtil.glDeleteRenderbuffers;
import static net.runelite.client.plugins.gpu.GLUtil.glDeleteTexture;
import static net.runelite.client.plugins.gpu.GLUtil.glDeleteVertexArrays;
import static net.runelite.client.plugins.gpu.GLUtil.glGenBuffers;
import static net.runelite.client.plugins.gpu.GLUtil.glGetInteger;
import static net.runelite.client.plugins.gpu.GLUtil.glGenFrameBuffer;
import static net.runelite.client.plugins.gpu.GLUtil.glGenRenderbuffer;
import static net.runelite.client.plugins.gpu.GLUtil.glGenTexture;
import static net.runelite.client.plugins.gpu.GLUtil.glGenVertexArrays;
import static net.runelite.client.plugins.gpu.GLUtil.inputStreamToString;
import static net.runelite.client.plugins.gpu.GLUtil.*;
import net.runelite.client.plugins.gpu.config.AntiAliasingMode;
import net.runelite.client.plugins.gpu.template.Template;
import net.runelite.client.ui.DrawManager;
@@ -1021,7 +1013,7 @@ public class GpuPlugin extends Plugin implements DrawCallbacks
renderWidthOff = (int) Math.floor(scaleFactorX * (renderWidthOff )) - padding;
}
gl.glViewport(renderWidthOff, renderCanvasHeight - renderViewportHeight - renderHeightOff, renderViewportWidth, renderViewportHeight);
glDpiAwareViewport(renderWidthOff, renderCanvasHeight - renderViewportHeight - renderHeightOff, renderViewportWidth, renderViewportHeight);
gl.glUseProgram(glProgram);
@@ -1154,11 +1146,11 @@ public class GpuPlugin extends Plugin implements DrawCallbacks
if (client.isStretchedEnabled())
{
Dimension dim = client.getStretchedDimensions();
gl.glViewport(0, 0, dim.width, dim.height);
glDpiAwareViewport(0, 0, dim.width, dim.height);
}
else
{
gl.glViewport(0, 0, canvasWidth, canvasHeight);
glDpiAwareViewport(0, 0, canvasWidth, canvasHeight);
}
// Use the texture bound in the first pass
@@ -1453,4 +1445,18 @@ public class GpuPlugin extends Plugin implements DrawCallbacks
}
}
private int getScaledValue(final double scale, final int value)
{
return SurfaceScaleUtils.scale(value, (float) scale);
}
private void glDpiAwareViewport(final int x, final int y, final int width, final int height)
{
final AffineTransform t = ((Graphics2D) canvas.getGraphics()).getTransform();
gl.glViewport(
getScaledValue(t.getScaleX(), x),
getScaledValue(t.getScaleY(), y),
getScaledValue(t.getScaleX(), width),
getScaledValue(t.getScaleY(), height));
}
}