diff --git a/core/src/main/java/wtf/beatrice/retrorender/GameScreen.java b/core/src/main/java/wtf/beatrice/retrorender/GameScreen.java index 26fa89c..a9a96d4 100644 --- a/core/src/main/java/wtf/beatrice/retrorender/GameScreen.java +++ b/core/src/main/java/wtf/beatrice/retrorender/GameScreen.java @@ -40,7 +40,7 @@ public class GameScreen implements Screen { private SpriteBatch screenBatch; private static final int RETRO_WIDTH = 320; - private static final int RETRO_HEIGHT = 180; + private static final int RETRO_HEIGHT = 240; private boolean showHud = false; @@ -51,8 +51,8 @@ public class GameScreen implements Screen { private void initCamera() { camera = new PerspectiveCamera( 67f, - Gdx.graphics.getWidth(), - Gdx.graphics.getHeight() + RETRO_WIDTH, + RETRO_HEIGHT ); // near/far + initial direction handled in controller constructor @@ -167,26 +167,46 @@ public class GameScreen implements Screen { frameBuffer.end(); - // -- scale framebuffer to screen - int screenW = Gdx.graphics.getWidth(); - int screenH = Gdx.graphics.getHeight(); - int fbWidth = Gdx.graphics.getBackBufferWidth(); - int fbHeight = Gdx.graphics.getBackBufferHeight(); + // -- scale framebuffer to screen, preserve aspect ratio -- + int windowW = Gdx.graphics.getWidth(); // logical size + int windowH = Gdx.graphics.getHeight(); - Gdx.gl.glViewport(0, 0, fbWidth, fbHeight); + int backW = Gdx.graphics.getBackBufferWidth(); // actual GL framebuffer + int backH = Gdx.graphics.getBackBufferHeight(); + + // compute how much we can scale the FBO into the window + float scale = Math.min( + windowW / (float) RETRO_WIDTH, + windowH / (float) RETRO_HEIGHT + ); + + // strict integer scaling + // scale = (float)Math.max(1, Math.floor(scale)); + + int drawW = Math.round(RETRO_WIDTH * scale); + int drawH = Math.round(RETRO_HEIGHT * scale); + + // center the image + int offsetX = (windowW - drawW) / 2; + int offsetY = (windowH - drawH) / 2; + + // viewport in backbuffer coordinates + Gdx.gl.glViewport(0, 0, backW, backH); Gdx.gl.glClearColor(0f, 0f, 0f, 1f); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + // projection in window (logical) coordinates + screenBatch.getProjectionMatrix().setToOrtho2D(0, 0, windowW, windowH); + screenBatch.begin(); - // draw retro texture stretched to window size - screenBatch.draw(frameRegion, 0, 0, screenW, screenH); + screenBatch.draw(frameRegion, offsetX, offsetY, drawW, drawH); screenBatch.end(); } @Override public void resize(int width, int height) { - camera.viewportWidth = width; - camera.viewportHeight = height; + camera.viewportWidth = RETRO_WIDTH; + camera.viewportHeight = RETRO_HEIGHT; camera.update(); cameraController.resize(width, height); @@ -207,7 +227,7 @@ public class GameScreen implements Screen { modelBatch.dispose(); hud.dispose(); - if (shadowBatch != null) shadowBatch.dispose(); - if (shadowLight != null) shadowLight.dispose(); + shadowBatch.dispose(); + shadowLight.dispose(); } } diff --git a/core/src/main/java/wtf/beatrice/retrorender/engine/FpsCameraController.java b/core/src/main/java/wtf/beatrice/retrorender/engine/FpsCameraController.java index a419172..6dede62 100644 --- a/core/src/main/java/wtf/beatrice/retrorender/engine/FpsCameraController.java +++ b/core/src/main/java/wtf/beatrice/retrorender/engine/FpsCameraController.java @@ -17,7 +17,7 @@ public class FpsCameraController { private float yaw = 0f; private float pitch = 0f; - private float eyeHeight = 1.6f; + private float eyeHeight = 1.8f; private float velocityY = 0f; private float gravity = -50f; private float jumpSpeed = 12f; diff --git a/core/src/main/java/wtf/beatrice/retrorender/engine/World3D.java b/core/src/main/java/wtf/beatrice/retrorender/engine/World3D.java index 1266b8f..0a39ef6 100644 --- a/core/src/main/java/wtf/beatrice/retrorender/engine/World3D.java +++ b/core/src/main/java/wtf/beatrice/retrorender/engine/World3D.java @@ -42,10 +42,10 @@ public class World3D { ); // plane size (halfSize in X/Z) - float halfSize = 20f; + float halfSize = 32f; // times the texture repeats across the whole plane - float tileScale = 8f; + float tileScale = 16f; modelBuilder.begin(); diff --git a/lwjgl3/src/main/java/wtf/beatrice/retrorender/lwjgl3/Lwjgl3Launcher.java b/lwjgl3/src/main/java/wtf/beatrice/retrorender/lwjgl3/Lwjgl3Launcher.java index 9513fc5..2b304dd 100644 --- a/lwjgl3/src/main/java/wtf/beatrice/retrorender/lwjgl3/Lwjgl3Launcher.java +++ b/lwjgl3/src/main/java/wtf/beatrice/retrorender/lwjgl3/Lwjgl3Launcher.java @@ -29,6 +29,7 @@ public class Lwjgl3Launcher { //// You may also need to configure GPU drivers to fully disable Vsync; this can cause screen tearing. configuration.setWindowedMode(640, 480); + //// You can change these files; they are in lwjgl3/src/main/resources/ . //// They can also be loaded from the root of assets/ . configuration.setWindowIcon("libgdx128.png", "libgdx64.png", "libgdx32.png", "libgdx16.png"); @@ -42,4 +43,4 @@ public class Lwjgl3Launcher { return configuration; } -} \ No newline at end of file +}