From f599a14506c749eb855c8e6d9ea10ee87711fe1e Mon Sep 17 00:00:00 2001 From: Gustl22 Date: Tue, 19 Feb 2019 17:12:46 +0100 Subject: [PATCH] Extend GLState: viewport, texture, framebuffer (#667) --- .../org/oscim/test/GdxSpriteBatchTest.java | 2 +- .../comparator/vtm/MapApplicationAdapter.java | 5 ++- vtm/src/org/oscim/renderer/GLState.java | 33 ++++++++++++++++++- vtm/src/org/oscim/renderer/MapRenderer.java | 2 +- .../org/oscim/renderer/OffscreenRenderer.java | 12 +++---- 5 files changed, 42 insertions(+), 12 deletions(-) diff --git a/vtm-playground/src/org/oscim/test/GdxSpriteBatchTest.java b/vtm-playground/src/org/oscim/test/GdxSpriteBatchTest.java index b5d64160..ce3c85b2 100644 --- a/vtm-playground/src/org/oscim/test/GdxSpriteBatchTest.java +++ b/vtm-playground/src/org/oscim/test/GdxSpriteBatchTest.java @@ -88,7 +88,7 @@ public class GdxSpriteBatchTest extends GdxMapApp { GLState.enableVertexArrays(GLState.DISABLED, GLState.DISABLED); - gl.viewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + GLState.viewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); gl.frontFace(GL.CW); mMapRenderer.onDrawFrame(); diff --git a/vtm-theme-comparator/src/org/oscim/theme/comparator/vtm/MapApplicationAdapter.java b/vtm-theme-comparator/src/org/oscim/theme/comparator/vtm/MapApplicationAdapter.java index 6815bf84..883caf1b 100644 --- a/vtm-theme-comparator/src/org/oscim/theme/comparator/vtm/MapApplicationAdapter.java +++ b/vtm-theme-comparator/src/org/oscim/theme/comparator/vtm/MapApplicationAdapter.java @@ -31,6 +31,7 @@ import org.oscim.layers.tile.buildings.BuildingLayer; import org.oscim.layers.tile.vector.VectorTileLayer; import org.oscim.layers.tile.vector.labeling.LabelLayer; import org.oscim.map.Map; +import org.oscim.renderer.GLState; import org.oscim.renderer.GLViewport; import org.oscim.renderer.MapRenderer; import org.oscim.scalebar.DefaultMapScaleBar; @@ -48,8 +49,6 @@ import java.io.File; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; -import static org.oscim.backend.GLAdapter.gl; - public class MapApplicationAdapter extends ApplicationAdapter { Logger log = LoggerFactory.getLogger(MapApplicationAdapter.class); @@ -164,7 +163,7 @@ public class MapApplicationAdapter extends ApplicationAdapter { @Override public void render() { - gl.viewport(0, 0, width, height); + GLState.viewport(width, height); try { mapRenderer.onDrawFrame(); diff --git a/vtm/src/org/oscim/renderer/GLState.java b/vtm/src/org/oscim/renderer/GLState.java index c41beb76..d0e51cb9 100644 --- a/vtm/src/org/oscim/renderer/GLState.java +++ b/vtm/src/org/oscim/renderer/GLState.java @@ -1,7 +1,7 @@ /* * Copyright 2013 Hannes Janetzek * Copyright 2016 devemux86 - * Copyright 2018 Gustl22 + * Copyright 2018-2019 Gustl22 * * This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * @@ -40,8 +40,12 @@ public class GLState { private static int glVertexBuffer; private static int glIndexBuffer; + private static int currentFramebufferId; private static int currentTexId; + private static int viewportWidth; + private static int viewportHeight; + static void init() { vertexArray[0] = false; vertexArray[1] = false; @@ -151,6 +155,15 @@ public class GLState { } } + public static void bindFramebuffer(int id) { + gl.bindFramebuffer(GL.FRAMEBUFFER, id); + currentFramebufferId = id; + } + + public static int getFramebuffer() { + return currentFramebufferId; + } + public static void bindTex2D(int id) { if (id < 0) { gl.bindTexture(GL.TEXTURE_2D, 0); @@ -161,6 +174,10 @@ public class GLState { } } + public static int getTexture() { + return currentTexId; + } + public static void setClearColor(float[] color) { // Workaround for artifacts at canvas resize on desktop if (!GLAdapter.GDX_DESKTOP_QUIRKS) { @@ -218,4 +235,18 @@ public class GLState { gl.bindBuffer(GL.ARRAY_BUFFER, id); } + + public static void viewport(int width, int height) { + gl.viewport(0, 0, width, height); + viewportWidth = width; + viewportHeight = height; + } + + public static int getViewportWidth() { + return viewportWidth; + } + + public static int getViewportHeight() { + return viewportHeight; + } } diff --git a/vtm/src/org/oscim/renderer/MapRenderer.java b/vtm/src/org/oscim/renderer/MapRenderer.java index d24ec2c5..c3466c04 100644 --- a/vtm/src/org/oscim/renderer/MapRenderer.java +++ b/vtm/src/org/oscim/renderer/MapRenderer.java @@ -172,7 +172,7 @@ public class MapRenderer { if (width <= 0 || height <= 0) return; - gl.viewport(0, 0, width, height); + GLState.viewport(width, height); //GL.scissor(0, 0, width, height); //GL.enable(GL20.SCISSOR_TEST); diff --git a/vtm/src/org/oscim/renderer/OffscreenRenderer.java b/vtm/src/org/oscim/renderer/OffscreenRenderer.java index 334529cb..72174d72 100644 --- a/vtm/src/org/oscim/renderer/OffscreenRenderer.java +++ b/vtm/src/org/oscim/renderer/OffscreenRenderer.java @@ -144,13 +144,13 @@ public class OffscreenRenderer extends LayerRenderer { public void enable(boolean on) { if (on) - gl.bindFramebuffer(GL.FRAMEBUFFER, fb); + GLState.bindFramebuffer(fb); else - gl.bindFramebuffer(GL.FRAMEBUFFER, 0); + GLState.bindFramebuffer(0); } public void begin() { - gl.bindFramebuffer(GL.FRAMEBUFFER, fb); + GLState.bindFramebuffer(fb); gl.depthMask(true); gl.clear(GL.DEPTH_BUFFER_BIT); } @@ -192,15 +192,15 @@ public class OffscreenRenderer extends LayerRenderer { @Override public void render(GLViewport viewport) { - gl.bindFramebuffer(GL.FRAMEBUFFER, fb); - gl.viewport(0, 0, texW, texH); + GLState.bindFramebuffer(fb); + GLState.viewport(texW, texH); gl.depthMask(true); GLState.setClearColor(mClearColor); gl.clear(GL.DEPTH_BUFFER_BIT | GL.COLOR_BUFFER_BIT); mRenderer.render(viewport); - gl.bindFramebuffer(GL.FRAMEBUFFER, 0); + GLState.bindFramebuffer(0); mShader.useProgram();