diff --git a/tsvm_executable/src/net/torvald/tsvm/AppLoader.java b/tsvm_executable/src/net/torvald/tsvm/AppLoader.java index 006804d..c71d433 100644 --- a/tsvm_executable/src/net/torvald/tsvm/AppLoader.java +++ b/tsvm_executable/src/net/torvald/tsvm/AppLoader.java @@ -16,6 +16,7 @@ public class AppLoader { public static int WIDTH = 640; public static int HEIGHT = 480; + public static float MAGN = 2f; public static void main(String[] args) { ShaderProgram.pedantic = false; @@ -28,7 +29,7 @@ public class AppLoader { appConfig.setResizable(false); appConfig.setTitle(appTitle); - appConfig.setWindowedMode(WIDTH, HEIGHT); + appConfig.setWindowedMode(((int) (WIDTH * MAGN)), ((int) (HEIGHT * MAGN))); HashMap watchdogs = new HashMap<>(); watchdogs.put("TEVD_COMMIT", TevdPartialDomCommitWatchdog.INSTANCE); diff --git a/tsvm_executable/src/net/torvald/tsvm/VMGUI.kt b/tsvm_executable/src/net/torvald/tsvm/VMGUI.kt index ae43b51..17b18d2 100644 --- a/tsvm_executable/src/net/torvald/tsvm/VMGUI.kt +++ b/tsvm_executable/src/net/torvald/tsvm/VMGUI.kt @@ -53,6 +53,7 @@ class VMGUI(val loaderInfo: EmulInstance, val viewportWidth: Int, val viewportHe lateinit var memvwr: Memvwr lateinit var fullscreenQuad: Mesh lateinit var gpuFBO: FrameBuffer + lateinit var winFBO: FrameBuffer val usememvwr = false @@ -102,6 +103,7 @@ class VMGUI(val loaderInfo: EmulInstance, val viewportWidth: Int, val viewportHe crtShader = loadShaderInline(CRT_POST_SHADER) gpuFBO = FrameBuffer(Pixmap.Format.RGBA8888, viewportWidth, viewportHeight, false) + winFBO = FrameBuffer(Pixmap.Format.RGBA8888, viewportWidth, viewportHeight, false) init() } @@ -247,6 +249,8 @@ class VMGUI(val loaderInfo: EmulInstance, val viewportWidth: Int, val viewportHe private val defaultGuiBackgroundColour = Color(0x444444ff) private fun renderGame(delta: Float) { + camera.setToOrtho(false, viewportWidth.toFloat(), viewportHeight.toFloat()) + batch.projectionMatrix = camera.combined gpuFBO.begin() val clearCol = gpu?.getBackgroundColour() ?: defaultGuiBackgroundColour Gdx.gl.glClearColor(clearCol.r, clearCol.g, clearCol.b, clearCol.a) @@ -262,6 +266,9 @@ class VMGUI(val loaderInfo: EmulInstance, val viewportWidth: Int, val viewportHe gpuFBO.end() + camera.setToOrtho(false, viewportWidth.toFloat(), viewportHeight.toFloat()) + batch.projectionMatrix = camera.combined + winFBO.begin() Gdx.gl.glClearColor(0f, 0f, 0f, 0f) Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT) @@ -286,6 +293,19 @@ class VMGUI(val loaderInfo: EmulInstance, val viewportWidth: Int, val viewportHe (viewportWidth - loaderInfo.drawWidth).div(2).toFloat() + (gpu?.config?.width ?: 0), (viewportHeight - loaderInfo.drawHeight).div(2).toFloat()) } + winFBO.end() + + + camera.setToOrtho(true, viewportWidth * AppLoader.MAGN, viewportHeight * AppLoader.MAGN) + batch.projectionMatrix = camera.combined + + Gdx.gl.glClearColor(0f, 0f, 0f, 0f) + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT) + batch.inUse { + batch.shader = null + batch.color = Color.WHITE + batch.draw(winFBO.colorBufferTexture, 0f, 0f, viewportWidth * AppLoader.MAGN, viewportHeight * AppLoader.MAGN) + } } private fun setCameraPosition(newX: Float, newY: Float) { @@ -320,12 +340,14 @@ class VMGUI(val loaderInfo: EmulInstance, val viewportWidth: Int, val viewportHe crtGradTex.texture.dispose() crtShader.dispose() gpuFBO.dispose() + winFBO.dispose() vm.dispose() System.err.println("VM disposed: ${vm.id}") exitProcess(0) } + companion object { val cp437toUni = hashMapOf( 0 to 32.toChar(),