From e34786cfe6d4759a585e8686672cf422c538521d Mon Sep 17 00:00:00 2001 From: Jannik Date: Thu, 24 Sep 2020 15:47:22 +0200 Subject: [PATCH] Handle reshaping/resizing the Window, set SkyBox pos to camera pos --- src/main/java/rv/effects/EffectManager.java | 2 +- .../java/rv/ui/screens/ViewerScreenBase.java | 2 +- src/main/java/rv/world/WorldModel.java | 5 +-- .../roboviz/rendering/ViewRenderer.kt | 34 +++++++++++++------ 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/src/main/java/rv/effects/EffectManager.java b/src/main/java/rv/effects/EffectManager.java index 54fcdcd8..1329270b 100644 --- a/src/main/java/rv/effects/EffectManager.java +++ b/src/main/java/rv/effects/EffectManager.java @@ -64,7 +64,7 @@ public void init(GL2 gl, Viewport screen, Configuration.Graphics config, Content if (!success) bloom = null; //else - // viewer.addWindowResizeListener(bloom); // TODO + // viewer.addWindowResizeListener(bloom); // not needed windowResized is called in Renderer.reshape } if (config.useShadows) { diff --git a/src/main/java/rv/ui/screens/ViewerScreenBase.java b/src/main/java/rv/ui/screens/ViewerScreenBase.java index 13cc227a..74aba2f3 100644 --- a/src/main/java/rv/ui/screens/ViewerScreenBase.java +++ b/src/main/java/rv/ui/screens/ViewerScreenBase.java @@ -504,7 +504,7 @@ public void selectionChanged(ISelectable newSelection) } if (trackerCameraType == TrackerCameraType.PLAYER && newSelection instanceof Agent) { - //viewer.getUI().getTrackerCamera().setTarget(newSelection); // TODO + CameraController.trackerCamera.setTarget(newSelection); } } diff --git a/src/main/java/rv/world/WorldModel.java b/src/main/java/rv/world/WorldModel.java index 3e4aec9a..f016523a 100644 --- a/src/main/java/rv/world/WorldModel.java +++ b/src/main/java/rv/world/WorldModel.java @@ -25,6 +25,7 @@ import jsgl.jogl.light.LightModel; import jsgl.math.vector.Matrix; import jsgl.math.vector.Vec3f; +import org.magmaoffenburg.roboviz.rendering.CameraController; import org.magmaoffenburg.roboviz.util.DataTypes; import rv.Configuration; import rv.comm.rcssserver.GameState; @@ -232,7 +233,7 @@ private void initTeams() sgItems.add(rightTeam); } - public synchronized void update(GL gl, double elapsedMS) //, UserInterface ui) // TODO + public synchronized void update(GL gl, double elapsedMS) { // Allow scene graph items to update their states prior to rendering. // This is done in the update loop rather than the scene graph update @@ -243,7 +244,7 @@ public synchronized void update(GL gl, double elapsedMS) //, UserInterface ui) / sgi.update(sceneGraph); } - //skyBox.setPosition(ui.getCamera().getPosition()); // TODO + skyBox.setPosition(CameraController.camera.getPosition()); ballCircleTimeLeft -= elapsedMS / 1000.0; } diff --git a/src/main/kotlin/org/magmaoffenburg/roboviz/rendering/ViewRenderer.kt b/src/main/kotlin/org/magmaoffenburg/roboviz/rendering/ViewRenderer.kt index f83d6d15..64fbe93f 100644 --- a/src/main/kotlin/org/magmaoffenburg/roboviz/rendering/ViewRenderer.kt +++ b/src/main/kotlin/org/magmaoffenburg/roboviz/rendering/ViewRenderer.kt @@ -30,6 +30,7 @@ import rv.effects.EffectManager import rv.ui.screens.LiveGameScreen import rv.ui.screens.LogfileModeScreen import rv.ui.screens.ViewerScreenBase +import rv.util.WindowResizeEvent import rv.world.WorldModel import rv.world.rendering.BasicSceneRenderer import rv.world.rendering.PhongWorldRenderer @@ -40,7 +41,7 @@ import java.io.File /** * TODO implement Window resizing */ -class ViewRenderer : GLProgram(MainWindow.glCanvas.width, MainWindow.glCanvas.height) { +class ViewRenderer : GLProgram(MainWindow.instance.width, MainWindow.instance.height) { private var isInitialized = false @@ -160,24 +161,23 @@ class ViewRenderer : GLProgram(MainWindow.glCanvas.width, MainWindow.glCanvas.he // Renderer.render() synchronized(world) { val gl2 = drawable.gl.gL2 - if (graphics.useShadows) { val shadowRenderer = effectManager.shadowRenderer shadowRenderer.render(gl2, world, drawings) } if (graphics.useStereo) { - vantage?.applyLeft(gl2, glu, getScreen()) + vantage?.applyLeft(gl2, glu, screen) gl2?.glDrawBuffer(GL2.GL_BACK_LEFT) gl2?.glClear(GL.GL_COLOR_BUFFER_BIT or GL.GL_DEPTH_BUFFER_BIT) drawScene(gl2) - vantage?.applyRight(gl2, glu, getScreen()) + vantage?.applyRight(gl2, glu, screen) gl2.glDrawBuffer(GL2.GL_BACK_RIGHT) gl2.glClear(GL.GL_COLOR_BUFFER_BIT or GL.GL_DEPTH_BUFFER_BIT) drawScene(gl2) } else { - vantage?.apply(gl2, glu, getScreen()) + vantage?.apply(gl2, glu, screen) gl2.glDrawBuffer(GL.GL_BACK) gl2.glClear(GL.GL_COLOR_BUFFER_BIT or GL.GL_DEPTH_BUFFER_BIT) drawScene(gl2) @@ -189,17 +189,31 @@ class ViewRenderer : GLProgram(MainWindow.glCanvas.width, MainWindow.glCanvas.he gl2.glDisable(GL2.GL_LIGHTING) gl2.glMatrixMode(GL2.GL_PROJECTION) gl2.glLoadIdentity() - glu.gluOrtho2D(0.0, getScreen().w.toDouble(), 0.0, getScreen().h.toDouble()) + glu.gluOrtho2D(0.0, screen.w.toDouble(), 0.0, screen.h.toDouble()) gl2.glMatrixMode(GL2.GL_MODELVIEW) gl2.glLoadIdentity() - activeScreen.render(gl2, glu, glut, getScreen()) + activeScreen.render(gl2, glu, glut, screen) gl2.glDisable(GL.GL_BLEND) } } + override fun reshape(drawable: GLAutoDrawable?, x: Int, y: Int, width: Int, height: Int) { + super.reshape(drawable, x, y, width, height) + + if (graphics.useBloom || graphics.useShadows) { + sceneFBO?.dispose(drawable!!.gl) + msSceneFBO?.dispose(drawable!!.gl) + genFBO(drawable!!.gl.gL2, screen) + } + + val event = WindowResizeEvent(this, screen) + activeScreen.windowResized(event) + effectManager.bloom.windowResized(event) + } + override fun addKeyListener(l: KeyListener?) { AWTKeyAdapter(l, MainWindow.glCanvas).addTo(MainWindow.glCanvas) } @@ -228,7 +242,7 @@ class ViewRenderer : GLProgram(MainWindow.glCanvas.width, MainWindow.glCanvas.he if (graphics.useBloom) { numSamples = if (useFSAA) graphics.fsaaSamples else -1 - genFBO(gl.gL2, getScreen()) // if we do post-processing we'll need an FBO for the scene + genFBO(gl.gL2, screen) // if we do post-processing we'll need an FBO for the scene } selectRenderer(gl.gL2, contentManager) @@ -288,12 +302,12 @@ class ViewRenderer : GLProgram(MainWindow.glCanvas.width, MainWindow.glCanvas.he gl.glColor4f(1f, 1f, 1f, 1f) // render result to window - getScreen().apply(gl) + screen.apply(gl) output.bind(gl) EffectManager.renderScreenQuad(gl) Texture2D.unbind(gl) } else { - getScreen().apply(gl) + screen.apply(gl) sceneRenderer?.render(gl, world, drawings) } }