v3.2.2: moved pixel scale getters to deviceCompat

This commit is contained in:
Evan Debenham
2025-08-22 11:21:09 -04:00
parent 22fb116254
commit 701498a8e8
3 changed files with 15 additions and 4 deletions

View File

@@ -27,6 +27,7 @@ import com.watabou.glwrap.Attribute;
import com.watabou.glwrap.Quad;
import com.watabou.glwrap.Uniform;
import com.watabou.glwrap.Vertexbuffer;
import com.watabou.utils.DeviceCompat;
import java.nio.Buffer;
import java.nio.FloatBuffer;
@@ -166,8 +167,8 @@ public class NoosaScript extends Script {
//This fixes pixel scaling issues on some hidpi displays (mainly on macOS)
// because for some reason all other openGL operations work on virtual pixels
// but glScissor operations work on real pixels
float xScale = (Gdx.graphics.getBackBufferWidth() / (float)Game.width );
float yScale = ((Gdx.graphics.getBackBufferHeight()-Game.bottomInset) / (float)Game.height );
float xScale = DeviceCompat.getRealPixelScaleX();
float yScale = DeviceCompat.getRealPixelScaleY();
Gdx.gl20.glScissor(
Math.round(camera.x * xScale),

View File

@@ -67,4 +67,15 @@ public class DeviceCompat {
return result;
}
//some devices (macOS mainly) report virtual pixels to Shattered, but sometimes we want real pixel precision
//this returns the number of real pixels per virtual pixel in the X dimension...
public static float getRealPixelScaleX(){
return (Gdx.graphics.getBackBufferWidth() / (float)Game.width );
}
//...and in the Y dimension
public static float getRealPixelScaleY(){
return ((Gdx.graphics.getBackBufferHeight()-Game.bottomInset) / (float)Game.height );
}
}

View File

@@ -21,7 +21,6 @@
package com.shatteredpixel.shatteredpixeldungeon.scenes;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Badges;
@@ -325,7 +324,7 @@ public class PixelScene extends Scene {
public static RenderedTextBlock renderTextBlock(String text, int size ){
//some systems (macOS mainly) require this back buffer check to ensure
// that we're working with real pixels, not logical ones
float scale = Game.width / (float)Gdx.graphics.getBackBufferWidth();
float scale = DeviceCompat.getRealPixelScaleX();
RenderedTextBlock result = new RenderedTextBlock( text, size*Math.round(defaultZoom*scale));
result.zoom(1/(float)Math.round(defaultZoom*scale));
return result;