From eed51037511ee86d826e0d0ef8aaffd3ee73a008 Mon Sep 17 00:00:00 2001 From: Benjamin Maus Date: Sat, 5 Oct 2013 18:38:46 +0200 Subject: [PATCH] Changed setSize logic: SetSize only sets the sized flag. All the rest is done directly before draw. Force reallocation of lights and transformation matrices (might get garbled during resize...). Do not perform a full init of the primary surface but rather a light version... --- .../processing/opengl/PGraphicsOpenGL.java | 44 ++++++++++++------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/core/src/processing/opengl/PGraphicsOpenGL.java b/core/src/processing/opengl/PGraphicsOpenGL.java index 8850be7e1..fa7806d10 100644 --- a/core/src/processing/opengl/PGraphicsOpenGL.java +++ b/core/src/processing/opengl/PGraphicsOpenGL.java @@ -559,22 +559,6 @@ public class PGraphicsOpenGL extends PGraphics { width = iwidth; height = iheight; - allocate(); - reapplySettings(); - - // init perspective projection based on new dimensions - cameraFOV = 60 * DEG_TO_RAD; // at least for now - cameraX = width / 2.0f; - cameraY = height / 2.0f; - cameraZ = cameraY / ((float) Math.tan(cameraFOV / 2.0f)); - cameraNear = cameraZ / 10.0f; - cameraFar = cameraZ * 10.0f; - cameraAspect = (float) width / (float) height; - - // Forces a restart of OpenGL so the canvas has the right size. - restartPGL(); - - // set this flag so that beginDraw() will do an update to the camera. sized = true; } @@ -1582,6 +1566,8 @@ public class PGraphicsOpenGL extends PGraphics { public void requestDraw() { if (primarySurface) { if (initialized) { + if (sized) reinitPrimary(); + pgl.requestDraw(); } else { initPrimary(); @@ -5961,6 +5947,32 @@ public class PGraphicsOpenGL extends PGraphics { } + protected void reinitPrimary() { + lightsAllocated = false; + matricesAllocated = false; + + allocate(); + + reapplySettings(); + + // init perspective projection based on new dimensions + cameraFOV = 60 * DEG_TO_RAD; // at least for now + cameraX = width / 2.0f; + cameraY = height / 2.0f; + cameraZ = cameraY / ((float) Math.tan(cameraFOV / 2.0f)); + cameraNear = cameraZ / 10.0f; + cameraFar = cameraZ * 10.0f; + cameraAspect = (float) width / (float) height; + + // Forces a restart of OpenGL so the canvas has the right size. + // restartPGL(); + + // System.out.println("hasbeenSized"); + + pgl.reinitSurface(); + } + + protected void beginOnscreenDraw() { pgl.beginDraw(clearColorBuffer);