From 3ffb54130989f89da822e4ea5b285fc17746d6c9 Mon Sep 17 00:00:00 2001 From: codeanticode Date: Thu, 14 May 2015 18:22:18 -0400 Subject: [PATCH] removed jogl library --- java/libraries/jogl/.classpath | 9 - java/libraries/jogl/.gitignore | 1 - java/libraries/jogl/.project | 17 - java/libraries/jogl/build.xml | 32 - .../jogl/examples/LargeStage/LargeStage.pde | 13 - .../examples/OffscreenTest/OffscreenTest.pde | 31 - .../jogl/examples/RestartTest/RestartTest.pde | 28 - java/libraries/jogl/library/.gitignore | 1 - java/libraries/jogl/library/export.txt | 10 - .../jogl/src/processing/jogl/JOGL.java | 8 - .../jogl/src/processing/jogl/PGraphics2D.java | 37 - .../src/processing/jogl/PGraphics2D2X.java | 37 - .../jogl/src/processing/jogl/PGraphics3D.java | 37 - .../src/processing/jogl/PGraphics3D2X.java | 37 - .../src/processing/jogl/PGraphicsJOGL.java | 42 - .../jogl/src/processing/jogl/PJOGL.java | 2630 ----------------- .../src/processing/jogl/PSurfaceJOGL.java | 818 ----- 17 files changed, 3788 deletions(-) delete mode 100644 java/libraries/jogl/.classpath delete mode 100644 java/libraries/jogl/.gitignore delete mode 100644 java/libraries/jogl/.project delete mode 100644 java/libraries/jogl/build.xml delete mode 100644 java/libraries/jogl/examples/LargeStage/LargeStage.pde delete mode 100644 java/libraries/jogl/examples/OffscreenTest/OffscreenTest.pde delete mode 100644 java/libraries/jogl/examples/RestartTest/RestartTest.pde delete mode 100644 java/libraries/jogl/library/.gitignore delete mode 100644 java/libraries/jogl/library/export.txt delete mode 100644 java/libraries/jogl/src/processing/jogl/JOGL.java delete mode 100644 java/libraries/jogl/src/processing/jogl/PGraphics2D.java delete mode 100644 java/libraries/jogl/src/processing/jogl/PGraphics2D2X.java delete mode 100644 java/libraries/jogl/src/processing/jogl/PGraphics3D.java delete mode 100644 java/libraries/jogl/src/processing/jogl/PGraphics3D2X.java delete mode 100644 java/libraries/jogl/src/processing/jogl/PGraphicsJOGL.java delete mode 100644 java/libraries/jogl/src/processing/jogl/PJOGL.java delete mode 100644 java/libraries/jogl/src/processing/jogl/PSurfaceJOGL.java diff --git a/java/libraries/jogl/.classpath b/java/libraries/jogl/.classpath deleted file mode 100644 index a68fe5082..000000000 --- a/java/libraries/jogl/.classpath +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/java/libraries/jogl/.gitignore b/java/libraries/jogl/.gitignore deleted file mode 100644 index ba077a403..000000000 --- a/java/libraries/jogl/.gitignore +++ /dev/null @@ -1 +0,0 @@ -bin diff --git a/java/libraries/jogl/.project b/java/libraries/jogl/.project deleted file mode 100644 index 49e55eb07..000000000 --- a/java/libraries/jogl/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - processing-jogl - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/java/libraries/jogl/build.xml b/java/libraries/jogl/build.xml deleted file mode 100644 index 9145815df..000000000 --- a/java/libraries/jogl/build.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/java/libraries/jogl/examples/LargeStage/LargeStage.pde b/java/libraries/jogl/examples/LargeStage/LargeStage.pde deleted file mode 100644 index 0e69acdd3..000000000 --- a/java/libraries/jogl/examples/LargeStage/LargeStage.pde +++ /dev/null @@ -1,13 +0,0 @@ -import processing.jogl.*; - -void setup() { - size(4000, 2000, JOGL.P3D); -} - -void draw() { - background(255, 0, 0); - line(0, 0, width, height); - line(0, height, width, 0); - println(mouseX, mouseY); - ellipse(mouseX, mouseY, 50, 50); -} \ No newline at end of file diff --git a/java/libraries/jogl/examples/OffscreenTest/OffscreenTest.pde b/java/libraries/jogl/examples/OffscreenTest/OffscreenTest.pde deleted file mode 100644 index e793b9a56..000000000 --- a/java/libraries/jogl/examples/OffscreenTest/OffscreenTest.pde +++ /dev/null @@ -1,31 +0,0 @@ -import processing.jogl.*; - -PGraphics pg; - -void setup() { - size(400, 400, JOGL.P2D); - - pg = createGraphics(400, 400, JOGL.P2D); - pg.smooth(4); -} - -void draw() { - background(0); - - pg.beginDraw(); - pg.background(255, 0, 0); - pg.ellipse(mouseX, mouseY, 100, 100); - pg.endDraw(); - - image(pg, 0, 0, 400, 400); -} - -void keyPressed() { - if (key == '1') pg.smooth(1); - else if (key == '2') pg.smooth(2); - else if (key == '3') pg.smooth(4); - else if (key == '4') pg.smooth(8); - else if (key == '5') pg.smooth(16); - else if (key == '6') pg.smooth(32); -} - diff --git a/java/libraries/jogl/examples/RestartTest/RestartTest.pde b/java/libraries/jogl/examples/RestartTest/RestartTest.pde deleted file mode 100644 index 7c18cbd56..000000000 --- a/java/libraries/jogl/examples/RestartTest/RestartTest.pde +++ /dev/null @@ -1,28 +0,0 @@ -import processing.jogl.*; - -PShape cube; - -void setup() { - size(400, 400, JOGL.P3D); - smooth(); - - cube = createShape(BOX, 100); -} - -void draw() { - background(120); - - lights(); - - translate(mouseX, mouseY); - rotateX(frameCount * 0.01f); - rotateY(frameCount * 0.01f); - - shape(cube); -} - -void keyPressed() { - // Changing the smooth configuration restarts the OpenGL surface. - // Automatically recreates all the current GL resources. - noSmooth(); -} diff --git a/java/libraries/jogl/library/.gitignore b/java/libraries/jogl/library/.gitignore deleted file mode 100644 index 463ff54af..000000000 --- a/java/libraries/jogl/library/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/jogl-java-src.zip diff --git a/java/libraries/jogl/library/export.txt b/java/libraries/jogl/library/export.txt deleted file mode 100644 index 308d1a35a..000000000 --- a/java/libraries/jogl/library/export.txt +++ /dev/null @@ -1,10 +0,0 @@ -# If you want to support more platforms, visit jogamp.org to get the -# natives libraries for the platform in question (i.e. Solaris). - -name = OpenGL - -application.macosx=core.jar,jogl-all.jar,gluegen-rt.jar,jogl-all-natives-macosx-universal.jar,gluegen-rt-natives-macosx-universal.jar -application.windows32=core.jar,jogl-all.jar,gluegen-rt.jar,jogl-all-natives-windows-i586.jar,gluegen-rt-natives-windows-i586.jar -application.windows64=core.jar,jogl-all.jar,gluegen-rt.jar,jogl-all-natives-windows-amd64.jar,gluegen-rt-natives-windows-amd64.jar -application.linux32=core.jar,jogl-all.jar,gluegen-rt.jar,jogl-all-natives-linux-i586.jar,gluegen-rt-natives-linux-i586.jar -application.linux64=core.jar,jogl-all.jar,gluegen-rt.jar,jogl-all-natives-linux-amd64.jar,gluegen-rt-natives-linux-amd64.jar diff --git a/java/libraries/jogl/src/processing/jogl/JOGL.java b/java/libraries/jogl/src/processing/jogl/JOGL.java deleted file mode 100644 index daef4e823..000000000 --- a/java/libraries/jogl/src/processing/jogl/JOGL.java +++ /dev/null @@ -1,8 +0,0 @@ -package processing.jogl; - -public interface JOGL { - static final String P2D = "processing.jogl.PGraphics2D"; - static final String P3D = "processing.jogl.PGraphics3D"; - static final String P2D_2X = "processing.jogl.PGraphics2D2X"; - static final String P3D_2X = "processing.jogl.PGraphics3D2X"; -} diff --git a/java/libraries/jogl/src/processing/jogl/PGraphics2D.java b/java/libraries/jogl/src/processing/jogl/PGraphics2D.java deleted file mode 100644 index 66cf1449a..000000000 --- a/java/libraries/jogl/src/processing/jogl/PGraphics2D.java +++ /dev/null @@ -1,37 +0,0 @@ -/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ - -/* - Part of the Processing project - http://processing.org - - Copyright (c) 2012 Ben Fry and Casey Reas - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License version 2.1 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General - Public License along with this library; if not, write to the - Free Software Foundation, Inc., 59 Temple Place, Suite 330, - Boston, MA 02111-1307 USA - */ - -package processing.jogl; - -import processing.core.PSurface; -import processing.opengl.PGL; -import processing.opengl.PGraphicsOpenGL; - -public class PGraphics2D extends processing.opengl.PGraphics2D { - protected PGL createPGL(PGraphicsOpenGL pg) { - return new PJOGL(pg); - } - @Override - public PSurface createSurface() { // ignore - return new PSurfaceJOGL(this); - } -} \ No newline at end of file diff --git a/java/libraries/jogl/src/processing/jogl/PGraphics2D2X.java b/java/libraries/jogl/src/processing/jogl/PGraphics2D2X.java deleted file mode 100644 index 6e6ff94aa..000000000 --- a/java/libraries/jogl/src/processing/jogl/PGraphics2D2X.java +++ /dev/null @@ -1,37 +0,0 @@ -/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ - -/* - Part of the Processing project - http://processing.org - - Copyright (c) 2012 Ben Fry and Casey Reas - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License version 2.1 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General - Public License along with this library; if not, write to the - Free Software Foundation, Inc., 59 Temple Place, Suite 330, - Boston, MA 02111-1307 USA - */ - -package processing.jogl; - -import processing.core.PSurface; -import processing.opengl.PGL; -import processing.opengl.PGraphicsOpenGL; - -public class PGraphics2D2X extends processing.opengl.PGraphics2D2X { - protected PGL createPGL(PGraphicsOpenGL pg) { - return new PJOGL(pg); - } - @Override - public PSurface createSurface() { // ignore - return new PSurfaceJOGL(this); - } -} \ No newline at end of file diff --git a/java/libraries/jogl/src/processing/jogl/PGraphics3D.java b/java/libraries/jogl/src/processing/jogl/PGraphics3D.java deleted file mode 100644 index b41ceac9f..000000000 --- a/java/libraries/jogl/src/processing/jogl/PGraphics3D.java +++ /dev/null @@ -1,37 +0,0 @@ -/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ - -/* - Part of the Processing project - http://processing.org - - Copyright (c) 2012 Ben Fry and Casey Reas - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License version 2.1 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General - Public License along with this library; if not, write to the - Free Software Foundation, Inc., 59 Temple Place, Suite 330, - Boston, MA 02111-1307 USA - */ - -package processing.jogl; - -import processing.core.PSurface; -import processing.opengl.PGL; -import processing.opengl.PGraphicsOpenGL; - -public class PGraphics3D extends processing.opengl.PGraphics3D { - protected PGL createPGL(PGraphicsOpenGL pg) { - return new PJOGL(pg); - } - @Override - public PSurface createSurface() { // ignore - return new PSurfaceJOGL(this); - } -} \ No newline at end of file diff --git a/java/libraries/jogl/src/processing/jogl/PGraphics3D2X.java b/java/libraries/jogl/src/processing/jogl/PGraphics3D2X.java deleted file mode 100644 index 2c82572c1..000000000 --- a/java/libraries/jogl/src/processing/jogl/PGraphics3D2X.java +++ /dev/null @@ -1,37 +0,0 @@ -/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ - -/* - Part of the Processing project - http://processing.org - - Copyright (c) 2012 Ben Fry and Casey Reas - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License version 2.1 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General - Public License along with this library; if not, write to the - Free Software Foundation, Inc., 59 Temple Place, Suite 330, - Boston, MA 02111-1307 USA - */ - -package processing.jogl; - -import processing.core.PSurface; -import processing.opengl.PGL; -import processing.opengl.PGraphicsOpenGL; - -public class PGraphics3D2X extends processing.opengl.PGraphics3D2X { - protected PGL createPGL(PGraphicsOpenGL pg) { - return new PJOGL(pg); - } - @Override - public PSurface createSurface() { // ignore - return new PSurfaceJOGL(this); - } -} \ No newline at end of file diff --git a/java/libraries/jogl/src/processing/jogl/PGraphicsJOGL.java b/java/libraries/jogl/src/processing/jogl/PGraphicsJOGL.java deleted file mode 100644 index 8403f7eb9..000000000 --- a/java/libraries/jogl/src/processing/jogl/PGraphicsJOGL.java +++ /dev/null @@ -1,42 +0,0 @@ -/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ - -/* - Part of the Processing project - http://processing.org - - Copyright (c) 2004-13 Ben Fry and Casey Reas - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License version 2.1 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General - Public License along with this library; if not, write to the - Free Software Foundation, Inc., 59 Temple Place, Suite 330, - Boston, MA 02111-1307 USA - */ - -package processing.jogl; - -import processing.core.*; -import processing.opengl.PGL; -import processing.opengl.PGraphicsOpenGL; - -/** - * LWJGL renderer. - * - */ -public class PGraphicsJOGL extends PGraphicsOpenGL { - protected PGL createPGL(PGraphicsOpenGL pg) { - return new PJOGL(pg); - } - - @Override - public PSurface createSurface() { // ignore - return new PSurfaceJOGL(this); - } -} diff --git a/java/libraries/jogl/src/processing/jogl/PJOGL.java b/java/libraries/jogl/src/processing/jogl/PJOGL.java deleted file mode 100644 index 9cc54dedf..000000000 --- a/java/libraries/jogl/src/processing/jogl/PJOGL.java +++ /dev/null @@ -1,2630 +0,0 @@ -package processing.jogl; - -import java.awt.Canvas; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Shape; -import java.awt.font.FontRenderContext; -import java.awt.font.GlyphVector; -import java.awt.geom.PathIterator; -import java.io.IOException; -import java.net.URL; -import java.nio.Buffer; -import java.nio.ByteBuffer; -import java.nio.FloatBuffer; -import java.nio.IntBuffer; -//import java.util.concurrent.CountDownLatch; - - - -import com.jogamp.opengl.GL; -import com.jogamp.opengl.GL2; -import com.jogamp.opengl.GL2ES1; -import com.jogamp.opengl.GL2ES2; -import com.jogamp.opengl.GL2ES3; -import com.jogamp.opengl.GL2GL3; -import com.jogamp.opengl.GLAutoDrawable; -import com.jogamp.opengl.GLCapabilitiesImmutable; -import com.jogamp.opengl.GLContext; -import com.jogamp.opengl.GLDrawable; -//import javax.media.opengl.GLEventListener; -//import javax.media.opengl.GLFBODrawable; -import com.jogamp.opengl.GLProfile; -//import javax.media.opengl.awt.GLCanvas; -import com.jogamp.opengl.fixedfunc.GLMatrixFunc; -import com.jogamp.opengl.glu.GLU; -import com.jogamp.opengl.glu.GLUtessellator; -import com.jogamp.opengl.glu.GLUtessellatorCallbackAdapter; - -import processing.core.PApplet; -import processing.core.PGraphics; -import processing.opengl.PGL; -import processing.opengl.PGraphicsOpenGL; - -//import com.jogamp.newt.awt.NewtCanvasAWT; -//import com.jogamp.newt.opengl.GLWindow; -//import com.jogamp.opengl.FBObject; - - -public class PJOGL extends PGL { - // OpenGL profile to use (2, 3 or 4) - public static int PROFILE = 2; - - // Enables/disables Retina support on OSX - public static boolean RETINA = false; - - // The two windowing toolkits available to use in JOGL: - public static final int AWT = 0; // http://jogamp.org/wiki/index.php/Using_JOGL_in_AWT_SWT_and_Swing - public static final int NEWT = 1; // http://jogamp.org/jogl/doc/NEWT-Overview.html - - // ........................................................ - - // Public members to access the underlying GL objects and context - - /** Basic GL functionality, common to all profiles */ - public GL gl; - - /** GLU interface **/ - public GLU glu; - - /** The rendering context (holds rendering state info) */ - public GLContext context; - - /** The canvas where OpenGL rendering takes place */ - public Canvas canvas; - - /** Selected GL profile */ - public static GLProfile profile; - - // ........................................................ - - // Additional parameters - - /** Time that the Processing's animation thread will wait for JOGL's rendering - * thread to be done with a single frame. - */ - protected static int DRAW_TIMEOUT_MILLIS = 500; - - // ........................................................ - - // OS-specific configuration - - /* - protected static int WINDOW_TOOLKIT; - protected static int EVENTS_TOOLKIT; - protected static boolean USE_JOGL_FBOLAYER; - static { - if (PApplet.platform == PConstants.WINDOWS) { - // Using AWT on Windows because NEWT displays a black background while - // initializing, and the cursor functions don't work. GLWindow has some - // functions for basic cursor handling (hide/show): - // GLWindow.setPointerVisible(false); - // but apparently nothing to set the cursor icon: - // https://jogamp.org/bugzilla/show_bug.cgi?id=409 - WINDOW_TOOLKIT = AWT; - EVENTS_TOOLKIT = AWT; - USE_FBOLAYER_BY_DEFAULT = false; - USE_JOGL_FBOLAYER = false; - } else if (PApplet.platform == PConstants.MACOSX) { - // Note: The JOGL FBO layer (in 2.0.2) seems incompatible with NEWT. - WINDOW_TOOLKIT = AWT; - EVENTS_TOOLKIT = AWT; - USE_FBOLAYER_BY_DEFAULT = true; - USE_JOGL_FBOLAYER = true; - } else if (PApplet.platform == PConstants.LINUX) { - WINDOW_TOOLKIT = AWT; - EVENTS_TOOLKIT = AWT; - USE_FBOLAYER_BY_DEFAULT = false; - USE_JOGL_FBOLAYER = false; - } else if (PApplet.platform == PConstants.OTHER) { - WINDOW_TOOLKIT = NEWT; // NEWT works on the Raspberry pi? - EVENTS_TOOLKIT = NEWT; - USE_FBOLAYER_BY_DEFAULT = false; - USE_JOGL_FBOLAYER = false; - } - } -*/ - -// protected static boolean USE_FBOLAYER_BY_DEFAULT = false; -// protected static boolean USE_JOGL_FBOLAYER = false; - - // ........................................................ - - // Protected JOGL-specific objects needed to access the GL profiles - - /** The capabilities of the OpenGL rendering surface */ - protected GLCapabilitiesImmutable capabilities; - - /** The rendering surface */ - protected GLDrawable drawable; - - /** GLES2 functionality (shaders, etc) */ - protected GL2ES2 gl2; - - /** GL3 interface */ - protected GL2GL3 gl3; - - /** GL2 desktop functionality (blit framebuffer, map buffer range, - * multisampled renderbuffers) */ - protected GL2 gl2x; - - /** The AWT-OpenGL canvas */ -// protected GLCanvas canvasAWT; - - /** The NEWT window */ -// protected GLWindow windowNEWT; - - /** The NEWT-OpenGL canvas */ -// protected NewtCanvasAWT canvasNEWT; - - /** The listener that fires the frame rendering in Processing */ -// protected PGLListener listener; - - /** This countdown latch is used to maintain the synchronization between - * Processing's drawing thread and JOGL's rendering thread */ -// protected CountDownLatch drawLatch = new CountDownLatch(0); - - /** Flag used to do request final display() call to make sure that the - * buffers are properly swapped. - */ -// protected boolean prevCanDraw = false; - - /** Stores exceptions that ocurred during drawing */ - protected Exception drawException; - - // ........................................................ - - // JOGL's FBO-layer - - /** Back (== draw, current frame) buffer */ -// protected FBObject backFBO; - /** Sink buffer, used in the multisampled case */ -// protected FBObject sinkFBO; - /** Front (== read, previous frame) buffer */ -// protected FBObject frontFBO; -// protected FBObject.TextureAttachment backTexAttach; -// protected FBObject.TextureAttachment frontTexAttach; - -// protected boolean changedFrontTex = false; -// protected boolean changedBackTex = false; - - // ........................................................ - - // Retina support - - int pixel_scale = 1; - - // ........................................................ - - // Utility arrays to copy projection/modelview matrices to GL - - protected float[] projMatrix; - protected float[] mvMatrix; - - // ........................................................ - - // Static initialization for some parameters that need to be different for - // JOGL - - static { - MIN_DIRECT_BUFFER_SIZE = 2; - INDEX_TYPE = GL.GL_UNSIGNED_SHORT; - } - - - /////////////////////////////////////////////////////////////// - - // Initialization, finalization - - - public PJOGL(PGraphicsOpenGL pg) { - super(pg); - glu = new GLU(); - } - - - /* - @Override - public Canvas getCanvas() { - return canvas; - } -*/ - - - protected void setFps(float fps) { - if (!setFps || targetFps != fps) { - if (60 < fps) { - // Disables v-sync - gl.setSwapInterval(0); - } else if (30 < fps) { - gl.setSwapInterval(1); - } else { - gl.setSwapInterval(2); - } - targetFps = currentFps = fps; - setFps = true; - } - } - - - /* - @Override - protected void initSurface(int antialias) { - - if (profile == null) { - if (PROFILE == 2) { - try { - profile = GLProfile.getGL2ES1(); - } catch (GLException ex) { - profile = GLProfile.getMaxFixedFunc(true); - } - } else if (PROFILE == 3) { - try { - profile = GLProfile.getGL2GL3(); - } catch (GLException ex) { - profile = GLProfile.getMaxProgrammable(true); - } - if (!profile.isGL3()) { - PGraphics.showWarning("Requested profile GL3 but is not available, got: " + profile); - } - } else if (PROFILE == 4) { - try { - profile = GLProfile.getGL4ES3(); - } catch (GLException ex) { - profile = GLProfile.getMaxProgrammable(true); - } - if (!profile.isGL4()) { - PGraphics.showWarning("Requested profile GL4 but is not available, got: " + profile); - } - } else throw new RuntimeException(UNSUPPORTED_GLPROF_ERROR); - - if (2 < PROFILE) { - texVertShaderSource = convertVertexSource(texVertShaderSource, 120, 150); - tex2DFragShaderSource = convertFragmentSource(tex2DFragShaderSource, 120, 150); - texRectFragShaderSource = convertFragmentSource(texRectFragShaderSource, 120, 150); - } - } - - if (canvasAWT != null || canvasNEWT != null) { - // Restarting... - if (canvasAWT != null) { - canvasAWT.removeGLEventListener(listener); - pg.parent.removeListeners(canvasAWT); - pg.parent.remove(canvasAWT); - } else if (canvasNEWT != null) { - windowNEWT.removeGLEventListener(listener); - pg.parent.remove(canvasNEWT); - } - sinkFBO = backFBO = frontFBO = null; - } - - // Setting up the desired capabilities; - GLCapabilities caps = new GLCapabilities(profile); - caps.setAlphaBits(REQUESTED_ALPHA_BITS); - caps.setDepthBits(REQUESTED_DEPTH_BITS); - caps.setStencilBits(REQUESTED_STENCIL_BITS); - - caps.setBackgroundOpaque(true); - caps.setOnscreen(true); - if (USE_FBOLAYER_BY_DEFAULT) { - if (USE_JOGL_FBOLAYER) { - caps.setPBuffer(false); - caps.setFBO(true); - if (1 < antialias) { - caps.setSampleBuffers(true); - caps.setNumSamples(antialias); - } else { - caps.setSampleBuffers(false); - } - fboLayerRequested = false; - } else { - caps.setPBuffer(false); - caps.setFBO(false); - caps.setSampleBuffers(false); - fboLayerRequested = 1 < antialias; - } - } else { - if (1 < antialias) { - caps.setSampleBuffers(true); - caps.setNumSamples(antialias); - } else { - caps.setSampleBuffers(false); - } - fboLayerRequested = false; - } - caps.setDepthBits(REQUESTED_DEPTH_BITS); - caps.setStencilBits(REQUESTED_STENCIL_BITS); - caps.setAlphaBits(REQUESTED_ALPHA_BITS); - reqNumSamples = qualityToSamples(antialias); - - if (WINDOW_TOOLKIT == AWT) { - canvasAWT = new GLCanvas(caps); - - if (RETINA) { - canvasAWT.setSurfaceScale(new int[] { ScalableSurface.AUTOMAX_PIXELSCALE, - ScalableSurface.AUTOMAX_PIXELSCALE }); - retf = 2; - } else { - canvasAWT.setSurfaceScale(new int[] { ScalableSurface.IDENTITY_PIXELSCALE, - ScalableSurface.IDENTITY_PIXELSCALE }); - } - - canvasAWT.setBounds(0, 0, pg.width, pg.height); - canvasAWT.setBackground(new Color(pg.backgroundColor, true)); - canvasAWT.setFocusable(true); - - pg.parent.setLayout(new BorderLayout()); - pg.parent.add(canvasAWT, BorderLayout.CENTER); - canvasAWT.requestFocusInWindow(); - - - - canvas = canvasAWT; - canvasNEWT = null; - } else if (WINDOW_TOOLKIT == NEWT) { - windowNEWT = GLWindow.create(caps); - canvasNEWT = new NewtCanvasAWT(windowNEWT); - canvasNEWT.setBounds(0, 0, pg.width, pg.height); - canvasNEWT.setBackground(new Color(pg.backgroundColor, true)); - canvasNEWT.setFocusable(true); - - pg.parent.setLayout(new BorderLayout()); - pg.parent.add(canvasNEWT, BorderLayout.CENTER); - canvasNEWT.requestFocusInWindow(); - - int[] reqSurfacePixelScale = new int[] { ScalableSurface.AUTOMAX_PIXELSCALE, ScalableSurface.AUTOMAX_PIXELSCALE }; - windowNEWT.setSurfaceScale(reqSurfacePixelScale); - - canvas = canvasNEWT; - canvasAWT = null; - } - - pg.parent.defaultSize = false; - registerListeners(); - - - fboLayerCreated = false; - fboLayerInUse = false; - firstFrame = true; - setFps = false; - } - */ - -/* - @Override - protected void reinitSurface() { - sinkFBO = backFBO = frontFBO = null; - fboLayerCreated = false; - fboLayerInUse = false; - firstFrame = true; - pg.parent.defaultSize = false; - } -*/ - -// @Override -// protected void registerListeners() { -// if (WINDOW_TOOLKIT == AWT) { -// pg.parent.addListeners(canvasAWT); -// -// listener = new PGLListener(); -// canvasAWT.addGLEventListener(listener); -// } else if (WINDOW_TOOLKIT == NEWT) { -// if (EVENTS_TOOLKIT == NEWT) { -// NEWTMouseListener mouseListener = new NEWTMouseListener(); -// windowNEWT.addMouseListener(mouseListener); -// NEWTKeyListener keyListener = new NEWTKeyListener(); -// windowNEWT.addKeyListener(keyListener); -// NEWTWindowListener winListener = new NEWTWindowListener(); -// windowNEWT.addWindowListener(winListener); -// } else if (EVENTS_TOOLKIT == AWT) { -// pg.parent.addListeners(canvasNEWT); -// } -// -// listener = new PGLListener(); -// windowNEWT.addGLEventListener(listener); -// } -// -// if (canvas != null) { -// canvas.setFocusTraversalKeysEnabled(false); -// } -// } - - -// @Override -// protected void deleteSurface() { -// super.deleteSurface(); -// -// if (canvasAWT != null) { -// canvasAWT.removeGLEventListener(listener); -// pg.parent.removeListeners(canvasAWT); -// } else if (canvasNEWT != null) { -// windowNEWT.removeGLEventListener(listener); -// } -// } - -/* - @Override - protected int getReadFramebuffer() { - if (fboLayerInUse) { - return glColorFbo.get(0); - } else if (capabilities.isFBO()) { - return context.getDefaultReadFramebuffer(); - } else { - return 0; - } - } - - - @Override - protected int getDrawFramebuffer() { - if (fboLayerInUse) { - if (1 < numSamples) { - return glMultiFbo.get(0); - } else { - return glColorFbo.get(0); - } - } else if (capabilities.isFBO()) { - return context.getDefaultDrawFramebuffer(); - } else { - return 0; - } - } - - - @Override - protected int getDefaultDrawBuffer() { - if (fboLayerInUse) { - return COLOR_ATTACHMENT0; - } else if (capabilities.isFBO()) { - return GL.GL_COLOR_ATTACHMENT0; - } else if (capabilities.getDoubleBuffered()) { - return GL.GL_BACK; - } else { - return GL.GL_FRONT; - } - } - - - @Override - protected int getDefaultReadBuffer() { - if (fboLayerInUse) { - return COLOR_ATTACHMENT0; - } else if (capabilities.isFBO()) { - return GL.GL_COLOR_ATTACHMENT0; - } else if (capabilities.getDoubleBuffered()) { - return GL.GL_BACK; - } else { - return GL.GL_FRONT; - } - } - - - @Override - protected boolean isFBOBacked() { - return super.isFBOBacked() || capabilities.isFBO(); - } - - - @Override - protected int getDepthBits() { - return capabilities.getDepthBits(); - } - - - @Override - protected int getStencilBits() { - return capabilities.getStencilBits(); - } - - - @Override - protected Texture wrapBackTexture(Texture texture) { - if (texture == null || changedBackTex) { - if (USE_JOGL_FBOLAYER) { - texture = new Texture(pg); - texture.init(pg.width, pg.height, - backTexAttach.getName(), TEXTURE_2D, RGBA, - backTexAttach.getWidth(), backTexAttach.getHeight(), - backTexAttach.minFilter, backTexAttach.magFilter, - backTexAttach.wrapS, backTexAttach.wrapT); - texture.invertedY(true); - texture.colorBuffer(true); - pg.setCache(pg, texture); - } else { - texture = super.wrapBackTexture(null); - } - } else { - if (USE_JOGL_FBOLAYER) { - texture.glName = backTexAttach.getName(); - } else { - texture = super.wrapBackTexture(texture); - } - } - return texture; - } - - - @Override - protected Texture wrapFrontTexture(Texture texture) { - if (texture == null || changedFrontTex) { - if (USE_JOGL_FBOLAYER) { - texture = new Texture(pg); - texture.init(pg.width, pg.height, - backTexAttach.getName(), TEXTURE_2D, RGBA, - frontTexAttach.getWidth(), frontTexAttach.getHeight(), - frontTexAttach.minFilter, frontTexAttach.magFilter, - frontTexAttach.wrapS, frontTexAttach.wrapT); - texture.invertedY(true); - texture.colorBuffer(true); - } else { - texture = super.wrapFrontTexture(null); - } - } else { - if (USE_JOGL_FBOLAYER) { - texture.glName = frontTexAttach.getName(); - } else { - texture = super.wrapFrontTexture(texture); - } - } - return texture; - } - - - @Override - protected void bindFrontTexture() { - if (USE_JOGL_FBOLAYER) { - usingFrontTex = true; - if (!texturingIsEnabled(TEXTURE_2D)) { - enableTexturing(TEXTURE_2D); - } - bindTexture(TEXTURE_2D, frontTexAttach.getName()); - } else super.bindFrontTexture(); - } - - - @Override - protected void unbindFrontTexture() { - if (USE_JOGL_FBOLAYER) { - if (textureIsBound(TEXTURE_2D, frontTexAttach.getName())) { - // We don't want to unbind another texture - // that might be bound instead of this one. - if (!texturingIsEnabled(TEXTURE_2D)) { - enableTexturing(TEXTURE_2D); - bindTexture(TEXTURE_2D, 0); - disableTexturing(TEXTURE_2D); - } else { - bindTexture(TEXTURE_2D, 0); - } - } - } else super.unbindFrontTexture(); - } - - - @Override - protected void syncBackTexture() { - if (USE_JOGL_FBOLAYER) { - if (usingFrontTex) needSepFrontTex = true; - if (1 < numSamples && backFBO != null) { - backFBO.syncSamplingSink(gl); - backFBO.bind(gl); - } - } else super.syncBackTexture(); - } - - - @Override - protected void beginDraw(boolean clear0) { - if (!setFps) setFps(targetFps); - if (USE_JOGL_FBOLAYER) return; - super.beginDraw(clear0); - } - - - @Override - protected void endDraw(boolean clear0) { - if (isFBOBacked()) { - if (USE_JOGL_FBOLAYER) { - if (!clear0 && isFBOBacked() && !isMultisampled() && - frontFBO != null && backFBO != null) { - // Draw the back texture into the front texture, which will be used as - // back texture in the next frame. Otherwise flickering will occur if - // the sketch uses "incremental drawing" (background() not called). - frontFBO.bind(gl); - gl.glDisable(GL.GL_BLEND); - drawTexture(TEXTURE_2D, backTexAttach.getName(), - backTexAttach.getWidth(), backTexAttach.getHeight(), - pg.width, pg.height, - 0, 0, pg.width, pg.height, 0, 0, pg.width, pg.height); - backFBO.bind(gl); - } - } else { - super.endDraw(clear0); - } - } - } -*/ - - @Override - protected void getGL(PGL pgl) { - PJOGL pjogl = (PJOGL)pgl; - - this.drawable = pjogl.drawable; - this.context = pjogl.context; - this.glContext = pjogl.glContext; - setThread(pjogl.glThread); - - this.gl = pjogl.gl; - this.gl2 = pjogl.gl2; - this.gl2x = pjogl.gl2x; - this.gl3 = pjogl.gl3; - } - - - protected void getGL(GLAutoDrawable glDrawable) { - context = glDrawable.getContext(); - glContext = context.hashCode(); - setThread(Thread.currentThread()); - - gl = context.getGL(); - gl2 = gl.getGL2ES2(); - try { - gl2x = gl.getGL2(); - } catch (com.jogamp.opengl.GLException e) { - gl2x = null; - } - try { - gl3 = gl.getGL2GL3(); - } catch (com.jogamp.opengl.GLException e) { - gl3 = null; - } - } - - - - /* - @Override - protected boolean canDraw() { - return true; -// return pg.initialized; -// && pg.parent.isDisplayable(); - } - - - @Override - protected void requestFocus() { } - - - @Override - protected void requestDraw() { - - drawException = null; - boolean canDraw = pg.parent.canDraw(); - if (pg.initialized && (canDraw || prevCanDraw)) { - drawLatch = new CountDownLatch(1); - if (WINDOW_TOOLKIT == AWT) { - canvasAWT.display(); - } else if (WINDOW_TOOLKIT == NEWT) { - windowNEWT.display(); - } - try { - drawLatch.await(DRAW_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - if (canDraw) prevCanDraw = true; - else prevCanDraw = false; - } - - // Throw wherever exception happened during drawing outside the GL thread - // to it is properly picked up by the PDE. - if (drawException != null) { - if (drawException instanceof RuntimeException) { - throw (RuntimeException)drawException; - } else { - throw new RuntimeException(drawException); - } - } - } - - - @Override - protected void swapBuffers() { - if (WINDOW_TOOLKIT == AWT) { - canvasAWT.swapBuffers(); - } else if (WINDOW_TOOLKIT == NEWT) { - windowNEWT.swapBuffers(); - } - } - */ - - - @Override - protected void beginGL() { - if (gl2x != null) { - if (projMatrix == null) { - projMatrix = new float[16]; - } - gl2x.glMatrixMode(GLMatrixFunc.GL_PROJECTION); - projMatrix[ 0] = pg.projection.m00; - projMatrix[ 1] = pg.projection.m10; - projMatrix[ 2] = pg.projection.m20; - projMatrix[ 3] = pg.projection.m30; - projMatrix[ 4] = pg.projection.m01; - projMatrix[ 5] = pg.projection.m11; - projMatrix[ 6] = pg.projection.m21; - projMatrix[ 7] = pg.projection.m31; - projMatrix[ 8] = pg.projection.m02; - projMatrix[ 9] = pg.projection.m12; - projMatrix[10] = pg.projection.m22; - projMatrix[11] = pg.projection.m32; - projMatrix[12] = pg.projection.m03; - projMatrix[13] = pg.projection.m13; - projMatrix[14] = pg.projection.m23; - projMatrix[15] = pg.projection.m33; - gl2x.glLoadMatrixf(projMatrix, 0); - - if (mvMatrix == null) { - mvMatrix = new float[16]; - } - gl2x.glMatrixMode(GLMatrixFunc.GL_MODELVIEW); - mvMatrix[ 0] = pg.modelview.m00; - mvMatrix[ 1] = pg.modelview.m10; - mvMatrix[ 2] = pg.modelview.m20; - mvMatrix[ 3] = pg.modelview.m30; - mvMatrix[ 4] = pg.modelview.m01; - mvMatrix[ 5] = pg.modelview.m11; - mvMatrix[ 6] = pg.modelview.m21; - mvMatrix[ 7] = pg.modelview.m31; - mvMatrix[ 8] = pg.modelview.m02; - mvMatrix[ 9] = pg.modelview.m12; - mvMatrix[10] = pg.modelview.m22; - mvMatrix[11] = pg.modelview.m32; - mvMatrix[12] = pg.modelview.m03; - mvMatrix[13] = pg.modelview.m13; - mvMatrix[14] = pg.modelview.m23; - mvMatrix[15] = pg.modelview.m33; - gl2x.glLoadMatrixf(mvMatrix, 0); - } - } - - - @Override - protected boolean hasFBOs() { - if (context.hasBasicFBOSupport()) return true; - else return super.hasFBOs(); - } - - - @Override - protected boolean hasShaders() { - if (context.hasGLSL()) return true; - else return super.hasShaders(); - } - - - /////////////////////////////////////////////////////////// - - // JOGL event listeners - -/* - protected void getBuffers(GLWindow glWindow) { - if (false) { -// if (capabilities.isFBO()) { -// if (USE_JOGL_FBOLAYER && capabilities.isFBO()) { - // The onscreen drawing surface is backed by an FBO layer. - GLFBODrawable fboDrawable = null; - fboDrawable = (GLFBODrawable)glWindow.getDelegatedDrawable(); - - if (fboDrawable != null) { - backFBO = fboDrawable.getFBObject(GL.GL_BACK); - if (1 < numSamples) { - if (needSepFrontTex) { - // When using multisampled FBO, the back buffer is the MSAA - // surface so it cannot be read from. The sink buffer contains - // the readable 2D texture. - // In this case, we create an auxiliary "front" buffer that it is - // swapped with the sink buffer at the beginning of each frame. - // In this way, we always have a readable copy of the previous - // frame in the front texture, while the back is synchronized - // with the contents of the MSAA back buffer when requested. - if (frontFBO == null) { - // init - frontFBO = new FBObject(); - frontFBO.reset(gl, pg.width, pg.height, numSamples); - frontFBO.attachTexture2D(gl, 0, true); - sinkFBO = backFBO.getSamplingSinkFBO(); - changedFrontTex = changedBackTex = true; - } else { - // swap - FBObject temp = sinkFBO; - sinkFBO = frontFBO; - frontFBO = temp; - backFBO.setSamplingSink(sinkFBO); - changedFrontTex = changedBackTex = false; - } - backTexAttach = (FBObject.TextureAttachment) sinkFBO. - getColorbuffer(0); - frontTexAttach = (FBObject.TextureAttachment)frontFBO. - getColorbuffer(0); - } else { - changedFrontTex = changedBackTex = sinkFBO == null; - - // Default setting (to save resources): the front and back - // textures are the same. - sinkFBO = backFBO.getSamplingSinkFBO(); - backTexAttach = (FBObject.TextureAttachment) sinkFBO. - getColorbuffer(0); - frontTexAttach = backTexAttach; - } - } else { - // w/out multisampling, rendering is done on the back buffer. - frontFBO = fboDrawable.getFBObject(GL.GL_FRONT); - backTexAttach = (FBObject.TextureAttachment) backFBO.getColorbuffer(0); - frontTexAttach = (FBObject.TextureAttachment) frontFBO.getColorbuffer(0); - } - } - - } - } -*/ - - protected void init(GLAutoDrawable glDrawable) { - firstFrame = true; - capabilities = glDrawable.getChosenGLCapabilities(); - if (!hasFBOs()) { - throw new RuntimeException(MISSING_FBO_ERROR); - } - if (!hasShaders()) { - throw new RuntimeException(MISSING_GLSL_ERROR); - } -// if (USE_JOGL_FBOLAYER && capabilities.isFBO()) { -// int maxs = maxSamples(); -// numSamples = PApplet.min(capabilities.getNumSamples(), maxs); -// } - } - - /* - protected class PGLListener implements GLEventListener { - public PGLListener() {} - - @Override - public void display(GLAutoDrawable glDrawable) { - - getGL(glDrawable); - - if (USE_JOGL_FBOLAYER && capabilities.isFBO()) { - // The onscreen drawing surface is backed by an FBO layer. - GLFBODrawable fboDrawable = null; - - if (WINDOW_TOOLKIT == AWT) { - GLCanvas glCanvas = (GLCanvas)glDrawable; - fboDrawable = (GLFBODrawable)glCanvas.getDelegatedDrawable(); - } else { - GLWindow glWindow = (GLWindow)glDrawable; - fboDrawable = (GLFBODrawable)glWindow.getDelegatedDrawable(); - } - - if (fboDrawable != null) { - backFBO = fboDrawable.getFBObject(GL.GL_BACK); - if (1 < numSamples) { - if (needSepFrontTex) { - // When using multisampled FBO, the back buffer is the MSAA - // surface so it cannot be read from. The sink buffer contains - // the readable 2D texture. - // In this case, we create an auxiliary "front" buffer that it is - // swapped with the sink buffer at the beginning of each frame. - // In this way, we always have a readable copy of the previous - // frame in the front texture, while the back is synchronized - // with the contents of the MSAA back buffer when requested. - if (frontFBO == null) { - // init - frontFBO = new FBObject(); - frontFBO.reset(gl, pg.width, pg.height, numSamples); - frontFBO.attachTexture2D(gl, 0, true); - sinkFBO = backFBO.getSamplingSinkFBO(); - changedFrontTex = changedBackTex = true; - } else { - // swap - FBObject temp = sinkFBO; - sinkFBO = frontFBO; - frontFBO = temp; - backFBO.setSamplingSink(sinkFBO); - changedFrontTex = changedBackTex = false; - } - backTexAttach = (FBObject.TextureAttachment) sinkFBO. - getColorbuffer(0); - frontTexAttach = (FBObject.TextureAttachment)frontFBO. - getColorbuffer(0); - } else { - changedFrontTex = changedBackTex = sinkFBO == null; - - // Default setting (to save resources): the front and back - // textures are the same. - sinkFBO = backFBO.getSamplingSinkFBO(); - backTexAttach = (FBObject.TextureAttachment) sinkFBO. - getColorbuffer(0); - frontTexAttach = backTexAttach; - } - } else { - // w/out multisampling, rendering is done on the back buffer. - frontFBO = fboDrawable.getFBObject(GL.GL_FRONT); - backTexAttach = (FBObject.TextureAttachment) backFBO.getColorbuffer(0); - frontTexAttach = (FBObject.TextureAttachment) frontFBO.getColorbuffer(0); - } - } - } - - try { - pg.parent.handleDraw(); - } catch (Exception ex) { - drawException = ex; - } - drawLatch.countDown(); - } - - @Override - public void dispose(GLAutoDrawable adrawable) { - } - - @Override - public void init(GLAutoDrawable glDrawable) { - getGL(glDrawable); - - capabilities = glDrawable.getChosenGLCapabilities(); - if (!hasFBOs()) { - throw new RuntimeException(MISSING_FBO_ERROR); - } - if (!hasShaders()) { - throw new RuntimeException(MISSING_GLSL_ERROR); - } - if (USE_JOGL_FBOLAYER && capabilities.isFBO()) { - int maxs = maxSamples(); - numSamples = PApplet.min(capabilities.getNumSamples(), maxs); - } - } - - @Override - public void reshape(GLAutoDrawable glDrawable, int x, int y, int w, int h) { - //getGL(glDrawable); - } - -// private void getGL(GLAutoDrawable glDrawable) { -// drawable = glDrawable; -// context = glDrawable.getContext(); -// glContext = context.hashCode(); -// glThread = Thread.currentThread(); -// -// gl = context.getGL(); -// gl2 = gl.getGL2ES2(); -// try { -// gl2x = gl.getGL2(); -// } catch (javax.media.opengl.GLException e) { -// gl2x = null; -// } -// try { -// gl3 = gl.getGL2GL3(); -// } catch (javax.media.opengl.GLException e) { -// gl3 = null; -// } -// } - } - */ - - /* - protected void nativeMouseEvent(com.jogamp.newt.event.MouseEvent nativeEvent, - int peAction) { - int modifiers = nativeEvent.getModifiers(); - int peModifiers = modifiers & - (InputEvent.SHIFT_MASK | - InputEvent.CTRL_MASK | - InputEvent.META_MASK | - InputEvent.ALT_MASK); - - int peButton = 0; - if ((modifiers & InputEvent.BUTTON1_MASK) != 0) { - peButton = PConstants.LEFT; - } else if ((modifiers & InputEvent.BUTTON2_MASK) != 0) { - peButton = PConstants.CENTER; - } else if ((modifiers & InputEvent.BUTTON3_MASK) != 0) { - peButton = PConstants.RIGHT; - } - - if (PApplet.platform == PConstants.MACOSX) { - //if (nativeEvent.isPopupTrigger()) { - if ((modifiers & InputEvent.CTRL_MASK) != 0) { - peButton = PConstants.RIGHT; - } - } - - int peCount = 0; - if (peAction == MouseEvent.WHEEL) { - peCount = nativeEvent.isShiftDown() ? (int)nativeEvent.getRotation()[0] : - (int)nativeEvent.getRotation()[1]; - } else { - peCount = nativeEvent.getClickCount(); - } - - MouseEvent me = new MouseEvent(nativeEvent, nativeEvent.getWhen(), - peAction, peModifiers, - nativeEvent.getX(), nativeEvent.getY(), - peButton, - peCount); - - pg.parent.postEvent(me); - } - - protected void nativeKeyEvent(com.jogamp.newt.event.KeyEvent nativeEvent, - int peAction) { - int peModifiers = nativeEvent.getModifiers() & - (InputEvent.SHIFT_MASK | - InputEvent.CTRL_MASK | - InputEvent.META_MASK | - InputEvent.ALT_MASK); - - char keyChar; - if (nativeEvent.getKeyChar() == 0) { - keyChar = PConstants.CODED; - } else { - keyChar = nativeEvent.getKeyChar(); - } - - KeyEvent ke = new KeyEvent(nativeEvent, nativeEvent.getWhen(), - peAction, peModifiers, - keyChar, - nativeEvent.getKeyCode()); - - pg.parent.postEvent(ke); - } - - protected class NEWTWindowListener implements com.jogamp.newt.event.WindowListener { - public NEWTWindowListener() { - super(); - } - @Override - public void windowGainedFocus(com.jogamp.newt.event.WindowEvent arg0) { - pg.parent.focusGained(null); - } - - @Override - public void windowLostFocus(com.jogamp.newt.event.WindowEvent arg0) { - pg.parent.focusLost(null); - } - - @Override - public void windowDestroyNotify(com.jogamp.newt.event.WindowEvent arg0) { - } - - @Override - public void windowDestroyed(com.jogamp.newt.event.WindowEvent arg0) { - } - - @Override - public void windowMoved(com.jogamp.newt.event.WindowEvent arg0) { - } - - @Override - public void windowRepaint(com.jogamp.newt.event.WindowUpdateEvent arg0) { - } - - @Override - public void windowResized(com.jogamp.newt.event.WindowEvent arg0) { } - } - - // NEWT mouse listener - protected class NEWTMouseListener extends com.jogamp.newt.event.MouseAdapter { - public NEWTMouseListener() { - super(); - } - @Override - public void mousePressed(com.jogamp.newt.event.MouseEvent e) { - nativeMouseEvent(e, MouseEvent.PRESS); - } - @Override - public void mouseReleased(com.jogamp.newt.event.MouseEvent e) { - nativeMouseEvent(e, MouseEvent.RELEASE); - } - @Override - public void mouseClicked(com.jogamp.newt.event.MouseEvent e) { - nativeMouseEvent(e, MouseEvent.CLICK); - } - @Override - public void mouseDragged(com.jogamp.newt.event.MouseEvent e) { - nativeMouseEvent(e, MouseEvent.DRAG); - } - @Override - public void mouseMoved(com.jogamp.newt.event.MouseEvent e) { - nativeMouseEvent(e, MouseEvent.MOVE); - } - @Override - public void mouseWheelMoved(com.jogamp.newt.event.MouseEvent e) { - nativeMouseEvent(e, MouseEvent.WHEEL); - } - @Override - public void mouseEntered(com.jogamp.newt.event.MouseEvent e) { - nativeMouseEvent(e, MouseEvent.ENTER); - } - @Override - public void mouseExited(com.jogamp.newt.event.MouseEvent e) { - nativeMouseEvent(e, MouseEvent.EXIT); - } - } - - // NEWT key listener - protected class NEWTKeyListener extends com.jogamp.newt.event.KeyAdapter { - public NEWTKeyListener() { - super(); - } - @Override - public void keyPressed(com.jogamp.newt.event.KeyEvent e) { - nativeKeyEvent(e, KeyEvent.PRESS); - } - @Override - public void keyReleased(com.jogamp.newt.event.KeyEvent e) { - nativeKeyEvent(e, KeyEvent.RELEASE); - } - public void keyTyped(com.jogamp.newt.event.KeyEvent e) { - nativeKeyEvent(e, KeyEvent.TYPE); - } - } -*/ - - /////////////////////////////////////////////////////////// - - // Utility functions - - - @Override - protected void enableTexturing(int target) { - if (PROFILE == 2) enable(target); - if (target == TEXTURE_2D) { - texturingTargets[0] = true; - } else if (target == TEXTURE_RECTANGLE) { - texturingTargets[1] = true; - } - } - - - @Override - protected void disableTexturing(int target) { - if (PROFILE == 2) disable(target); - if (target == TEXTURE_2D) { - texturingTargets[0] = false; - } else if (target == TEXTURE_RECTANGLE) { - texturingTargets[1] = false; - } - } - - - - @Override - protected int getFontAscent(Object font) { - return pg.getFontMetrics((Font) font).getAscent(); - } - - - @Override - protected int getFontDescent(Object font) { - return pg.getFontMetrics((Font) font).getDescent(); - } - - - @Override - protected int getTextWidth(Object font, char[] buffer, int start, int stop) { - // maybe should use one of the newer/fancier functions for this? - int length = stop - start; - FontMetrics metrics = pg.getFontMetrics((Font) font); - return metrics.charsWidth(buffer, start, length); - } - - - @Override - protected Object getDerivedFont(Object font, float size) { - return ((Font) font).deriveFont(size); - } - - - @Override - protected String[] loadVertexShader(String filename, int version) { - if (2 < PROFILE && version < 150) { - String[] fragSrc0 = pg.parent.loadStrings(filename); - return convertFragmentSource(fragSrc0, version, 150); - } else { - return pg.parent.loadStrings(filename); - } - } - - - @Override - protected String[] loadFragmentShader(String filename, int version) { - if (2 < PROFILE && version < 150) { - String[] vertSrc0 = pg.parent.loadStrings(filename); - return convertVertexSource(vertSrc0, version, 150); - } else { - return pg.parent.loadStrings(filename); - } - } - - - @Override - protected String[] loadFragmentShader(URL url, int version) { - try { - if (2 < PROFILE && version < 150) { - String[] fragSrc0 = PApplet.loadStrings(url.openStream()); - return convertFragmentSource(fragSrc0, version, 150); - } else { - return PApplet.loadStrings(url.openStream()); - } - } catch (IOException e) { - PGraphics.showException("Cannot load fragment shader " + url.getFile()); - } - return null; - } - - - @Override - protected String[] loadVertexShader(URL url, int version) { - try { - if (2 < PROFILE && version < 150) { - String[] vertSrc0 = PApplet.loadStrings(url.openStream()); - return convertVertexSource(vertSrc0, version, 150); - } else { - return PApplet.loadStrings(url.openStream()); - } - } catch (IOException e) { - PGraphics.showException("Cannot load vertex shader " + url.getFile()); - } - return null; - } - - - /////////////////////////////////////////////////////////// - - // Tessellator - - - @Override - protected Tessellator createTessellator(TessellatorCallback callback) { - return new Tessellator(callback); - } - - - protected static class Tessellator implements PGL.Tessellator { - protected GLUtessellator tess; - protected TessellatorCallback callback; - protected GLUCallback gluCallback; - - public Tessellator(TessellatorCallback callback) { - this.callback = callback; - tess = GLU.gluNewTess(); - gluCallback = new GLUCallback(); - - GLU.gluTessCallback(tess, GLU.GLU_TESS_BEGIN, gluCallback); - GLU.gluTessCallback(tess, GLU.GLU_TESS_END, gluCallback); - GLU.gluTessCallback(tess, GLU.GLU_TESS_VERTEX, gluCallback); - GLU.gluTessCallback(tess, GLU.GLU_TESS_COMBINE, gluCallback); - GLU.gluTessCallback(tess, GLU.GLU_TESS_ERROR, gluCallback); - } - - @Override - public void beginPolygon() { - GLU.gluTessBeginPolygon(tess, null); - } - - @Override - public void endPolygon() { - GLU.gluTessEndPolygon(tess); - } - - @Override - public void setWindingRule(int rule) { - GLU.gluTessProperty(tess, GLU.GLU_TESS_WINDING_RULE, rule); - } - - @Override - public void beginContour() { - GLU.gluTessBeginContour(tess); - } - - @Override - public void endContour() { - GLU.gluTessEndContour(tess); - } - - @Override - public void addVertex(double[] v) { - GLU.gluTessVertex(tess, v, 0, v); - } - - protected class GLUCallback extends GLUtessellatorCallbackAdapter { - @Override - public void begin(int type) { - callback.begin(type); - } - - @Override - public void end() { - callback.end(); - } - - @Override - public void vertex(Object data) { - callback.vertex(data); - } - - @Override - public void combine(double[] coords, Object[] data, - float[] weight, Object[] outData) { - callback.combine(coords, data, weight, outData); - } - - @Override - public void error(int errnum) { - callback.error(errnum); - } - } - } - - - @Override - protected String tessError(int err) { - return glu.gluErrorString(err); - } - - - /////////////////////////////////////////////////////////// - - // Font outline - - - static { - SHAPE_TEXT_SUPPORTED = true; - SEG_MOVETO = PathIterator.SEG_MOVETO; - SEG_LINETO = PathIterator.SEG_LINETO; - SEG_QUADTO = PathIterator.SEG_QUADTO; - SEG_CUBICTO = PathIterator.SEG_CUBICTO; - SEG_CLOSE = PathIterator.SEG_CLOSE; - } - - - @Override - protected FontOutline createFontOutline(char ch, Object font) { - return new FontOutline(ch, (Font) font); - } - - - protected class FontOutline implements PGL.FontOutline { - PathIterator iter; - - public FontOutline(char ch, Font font) { - char textArray[] = new char[] { ch }; - FontRenderContext frc = pg.getFontRenderContext(font); - GlyphVector gv = font.createGlyphVector(frc, textArray); - Shape shp = gv.getOutline(); - iter = shp.getPathIterator(null); - } - - public boolean isDone() { - return iter.isDone(); - } - - public int currentSegment(float coords[]) { - return iter.currentSegment(coords); - } - - public void next() { - iter.next(); - } - } - - - /////////////////////////////////////////////////////////// - - // Constants - - static { - FALSE = GL.GL_FALSE; - TRUE = GL.GL_TRUE; - - INT = GL2ES2.GL_INT; - BYTE = GL.GL_BYTE; - SHORT = GL.GL_SHORT; - FLOAT = GL.GL_FLOAT; - BOOL = GL2ES2.GL_BOOL; - UNSIGNED_INT = GL.GL_UNSIGNED_INT; - UNSIGNED_BYTE = GL.GL_UNSIGNED_BYTE; - UNSIGNED_SHORT = GL.GL_UNSIGNED_SHORT; - - RGB = GL.GL_RGB; - RGBA = GL.GL_RGBA; - ALPHA = GL.GL_ALPHA; - LUMINANCE = GL.GL_LUMINANCE; - LUMINANCE_ALPHA = GL.GL_LUMINANCE_ALPHA; - - UNSIGNED_SHORT_5_6_5 = GL.GL_UNSIGNED_SHORT_5_6_5; - UNSIGNED_SHORT_4_4_4_4 = GL.GL_UNSIGNED_SHORT_4_4_4_4; - UNSIGNED_SHORT_5_5_5_1 = GL.GL_UNSIGNED_SHORT_5_5_5_1; - - RGBA4 = GL.GL_RGBA4; - RGB5_A1 = GL.GL_RGB5_A1; - RGB565 = GL.GL_RGB565; - RGB8 = GL.GL_RGB8; - RGBA8 = GL.GL_RGBA8; - ALPHA8 = GL.GL_ALPHA8; - - READ_ONLY = GL2GL3.GL_READ_ONLY; - WRITE_ONLY = GL.GL_WRITE_ONLY; - READ_WRITE = GL2GL3.GL_READ_WRITE; - - TESS_WINDING_NONZERO = GLU.GLU_TESS_WINDING_NONZERO; - TESS_WINDING_ODD = GLU.GLU_TESS_WINDING_ODD; - - GENERATE_MIPMAP_HINT = GL.GL_GENERATE_MIPMAP_HINT; - FASTEST = GL.GL_FASTEST; - NICEST = GL.GL_NICEST; - DONT_CARE = GL.GL_DONT_CARE; - - VENDOR = GL.GL_VENDOR; - RENDERER = GL.GL_RENDERER; - VERSION = GL.GL_VERSION; - EXTENSIONS = GL.GL_EXTENSIONS; - SHADING_LANGUAGE_VERSION = GL2ES2.GL_SHADING_LANGUAGE_VERSION; - - MAX_SAMPLES = GL2ES3.GL_MAX_SAMPLES; - SAMPLES = GL.GL_SAMPLES; - - ALIASED_LINE_WIDTH_RANGE = GL.GL_ALIASED_LINE_WIDTH_RANGE; - ALIASED_POINT_SIZE_RANGE = GL.GL_ALIASED_POINT_SIZE_RANGE; - - DEPTH_BITS = GL.GL_DEPTH_BITS; - STENCIL_BITS = GL.GL_STENCIL_BITS; - - CCW = GL.GL_CCW; - CW = GL.GL_CW; - - VIEWPORT = GL.GL_VIEWPORT; - - ARRAY_BUFFER = GL.GL_ARRAY_BUFFER; - ELEMENT_ARRAY_BUFFER = GL.GL_ELEMENT_ARRAY_BUFFER; - - MAX_VERTEX_ATTRIBS = GL2ES2.GL_MAX_VERTEX_ATTRIBS; - - STATIC_DRAW = GL.GL_STATIC_DRAW; - DYNAMIC_DRAW = GL.GL_DYNAMIC_DRAW; - STREAM_DRAW = GL2ES2.GL_STREAM_DRAW; - - BUFFER_SIZE = GL.GL_BUFFER_SIZE; - BUFFER_USAGE = GL.GL_BUFFER_USAGE; - - POINTS = GL.GL_POINTS; - LINE_STRIP = GL.GL_LINE_STRIP; - LINE_LOOP = GL.GL_LINE_LOOP; - LINES = GL.GL_LINES; - TRIANGLE_FAN = GL.GL_TRIANGLE_FAN; - TRIANGLE_STRIP = GL.GL_TRIANGLE_STRIP; - TRIANGLES = GL.GL_TRIANGLES; - - CULL_FACE = GL.GL_CULL_FACE; - FRONT = GL.GL_FRONT; - BACK = GL.GL_BACK; - FRONT_AND_BACK = GL.GL_FRONT_AND_BACK; - - POLYGON_OFFSET_FILL = GL.GL_POLYGON_OFFSET_FILL; - - UNPACK_ALIGNMENT = GL.GL_UNPACK_ALIGNMENT; - PACK_ALIGNMENT = GL.GL_PACK_ALIGNMENT; - - TEXTURE_2D = GL.GL_TEXTURE_2D; - TEXTURE_RECTANGLE = GL2GL3.GL_TEXTURE_RECTANGLE; - - TEXTURE_BINDING_2D = GL.GL_TEXTURE_BINDING_2D; - TEXTURE_BINDING_RECTANGLE = GL2GL3.GL_TEXTURE_BINDING_RECTANGLE; - - MAX_TEXTURE_SIZE = GL.GL_MAX_TEXTURE_SIZE; - TEXTURE_MAX_ANISOTROPY = GL.GL_TEXTURE_MAX_ANISOTROPY_EXT; - MAX_TEXTURE_MAX_ANISOTROPY = GL.GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT; - - MAX_VERTEX_TEXTURE_IMAGE_UNITS = GL2ES2.GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS; - MAX_TEXTURE_IMAGE_UNITS = GL2ES2.GL_MAX_TEXTURE_IMAGE_UNITS; - MAX_COMBINED_TEXTURE_IMAGE_UNITS = GL2ES2.GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS; - - NUM_COMPRESSED_TEXTURE_FORMATS = GL.GL_NUM_COMPRESSED_TEXTURE_FORMATS; - COMPRESSED_TEXTURE_FORMATS = GL.GL_COMPRESSED_TEXTURE_FORMATS; - - NEAREST = GL.GL_NEAREST; - LINEAR = GL.GL_LINEAR; - LINEAR_MIPMAP_NEAREST = GL.GL_LINEAR_MIPMAP_NEAREST; - LINEAR_MIPMAP_LINEAR = GL.GL_LINEAR_MIPMAP_LINEAR; - - CLAMP_TO_EDGE = GL.GL_CLAMP_TO_EDGE; - REPEAT = GL.GL_REPEAT; - - TEXTURE0 = GL.GL_TEXTURE0; - TEXTURE1 = GL.GL_TEXTURE1; - TEXTURE2 = GL.GL_TEXTURE2; - TEXTURE3 = GL.GL_TEXTURE3; - TEXTURE_MIN_FILTER = GL.GL_TEXTURE_MIN_FILTER; - TEXTURE_MAG_FILTER = GL.GL_TEXTURE_MAG_FILTER; - TEXTURE_WRAP_S = GL.GL_TEXTURE_WRAP_S; - TEXTURE_WRAP_T = GL.GL_TEXTURE_WRAP_T; - TEXTURE_WRAP_R = GL2ES2.GL_TEXTURE_WRAP_R; - - TEXTURE_CUBE_MAP = GL.GL_TEXTURE_CUBE_MAP; - TEXTURE_CUBE_MAP_POSITIVE_X = GL.GL_TEXTURE_CUBE_MAP_POSITIVE_X; - TEXTURE_CUBE_MAP_POSITIVE_Y = GL.GL_TEXTURE_CUBE_MAP_POSITIVE_Y; - TEXTURE_CUBE_MAP_POSITIVE_Z = GL.GL_TEXTURE_CUBE_MAP_POSITIVE_Z; - TEXTURE_CUBE_MAP_NEGATIVE_X = GL.GL_TEXTURE_CUBE_MAP_NEGATIVE_X; - TEXTURE_CUBE_MAP_NEGATIVE_Y = GL.GL_TEXTURE_CUBE_MAP_NEGATIVE_Y; - TEXTURE_CUBE_MAP_NEGATIVE_Z = GL.GL_TEXTURE_CUBE_MAP_NEGATIVE_Z; - - VERTEX_SHADER = GL2ES2.GL_VERTEX_SHADER; - FRAGMENT_SHADER = GL2ES2.GL_FRAGMENT_SHADER; - INFO_LOG_LENGTH = GL2ES2.GL_INFO_LOG_LENGTH; - SHADER_SOURCE_LENGTH = GL2ES2.GL_SHADER_SOURCE_LENGTH; - COMPILE_STATUS = GL2ES2.GL_COMPILE_STATUS; - LINK_STATUS = GL2ES2.GL_LINK_STATUS; - VALIDATE_STATUS = GL2ES2.GL_VALIDATE_STATUS; - SHADER_TYPE = GL2ES2.GL_SHADER_TYPE; - DELETE_STATUS = GL2ES2.GL_DELETE_STATUS; - - FLOAT_VEC2 = GL2ES2.GL_FLOAT_VEC2; - FLOAT_VEC3 = GL2ES2.GL_FLOAT_VEC3; - FLOAT_VEC4 = GL2ES2.GL_FLOAT_VEC4; - FLOAT_MAT2 = GL2ES2.GL_FLOAT_MAT2; - FLOAT_MAT3 = GL2ES2.GL_FLOAT_MAT3; - FLOAT_MAT4 = GL2ES2.GL_FLOAT_MAT4; - INT_VEC2 = GL2ES2.GL_INT_VEC2; - INT_VEC3 = GL2ES2.GL_INT_VEC3; - INT_VEC4 = GL2ES2.GL_INT_VEC4; - BOOL_VEC2 = GL2ES2.GL_BOOL_VEC2; - BOOL_VEC3 = GL2ES2.GL_BOOL_VEC3; - BOOL_VEC4 = GL2ES2.GL_BOOL_VEC4; - SAMPLER_2D = GL2ES2.GL_SAMPLER_2D; - SAMPLER_CUBE = GL2ES2.GL_SAMPLER_CUBE; - - LOW_FLOAT = GL2ES2.GL_LOW_FLOAT; - MEDIUM_FLOAT = GL2ES2.GL_MEDIUM_FLOAT; - HIGH_FLOAT = GL2ES2.GL_HIGH_FLOAT; - LOW_INT = GL2ES2.GL_LOW_INT; - MEDIUM_INT = GL2ES2.GL_MEDIUM_INT; - HIGH_INT = GL2ES2.GL_HIGH_INT; - - CURRENT_VERTEX_ATTRIB = GL2ES2.GL_CURRENT_VERTEX_ATTRIB; - - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = GL2ES2.GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING; - VERTEX_ATTRIB_ARRAY_ENABLED = GL2ES2.GL_VERTEX_ATTRIB_ARRAY_ENABLED; - VERTEX_ATTRIB_ARRAY_SIZE = GL2ES2.GL_VERTEX_ATTRIB_ARRAY_SIZE; - VERTEX_ATTRIB_ARRAY_STRIDE = GL2ES2.GL_VERTEX_ATTRIB_ARRAY_STRIDE; - VERTEX_ATTRIB_ARRAY_TYPE = GL2ES2.GL_VERTEX_ATTRIB_ARRAY_TYPE; - VERTEX_ATTRIB_ARRAY_NORMALIZED = GL2ES2.GL_VERTEX_ATTRIB_ARRAY_NORMALIZED; - VERTEX_ATTRIB_ARRAY_POINTER = GL2ES2.GL_VERTEX_ATTRIB_ARRAY_POINTER; - - BLEND = GL.GL_BLEND; - ONE = GL.GL_ONE; - ZERO = GL.GL_ZERO; - SRC_ALPHA = GL.GL_SRC_ALPHA; - DST_ALPHA = GL.GL_DST_ALPHA; - ONE_MINUS_SRC_ALPHA = GL.GL_ONE_MINUS_SRC_ALPHA; - ONE_MINUS_DST_COLOR = GL.GL_ONE_MINUS_DST_COLOR; - ONE_MINUS_SRC_COLOR = GL.GL_ONE_MINUS_SRC_COLOR; - DST_COLOR = GL.GL_DST_COLOR; - SRC_COLOR = GL.GL_SRC_COLOR; - - SAMPLE_ALPHA_TO_COVERAGE = GL.GL_SAMPLE_ALPHA_TO_COVERAGE; - SAMPLE_COVERAGE = GL.GL_SAMPLE_COVERAGE; - - KEEP = GL.GL_KEEP; - REPLACE = GL.GL_REPLACE; - INCR = GL.GL_INCR; - DECR = GL.GL_DECR; - INVERT = GL.GL_INVERT; - INCR_WRAP = GL.GL_INCR_WRAP; - DECR_WRAP = GL.GL_DECR_WRAP; - NEVER = GL.GL_NEVER; - ALWAYS = GL.GL_ALWAYS; - - EQUAL = GL.GL_EQUAL; - LESS = GL.GL_LESS; - LEQUAL = GL.GL_LEQUAL; - GREATER = GL.GL_GREATER; - GEQUAL = GL.GL_GEQUAL; - NOTEQUAL = GL.GL_NOTEQUAL; - - FUNC_ADD = GL.GL_FUNC_ADD; - FUNC_MIN = GL2ES3.GL_MIN; - FUNC_MAX = GL2ES3.GL_MAX; - FUNC_REVERSE_SUBTRACT = GL.GL_FUNC_REVERSE_SUBTRACT; - FUNC_SUBTRACT = GL.GL_FUNC_SUBTRACT; - - DITHER = GL.GL_DITHER; - - CONSTANT_COLOR = GL2ES2.GL_CONSTANT_COLOR; - CONSTANT_ALPHA = GL2ES2.GL_CONSTANT_ALPHA; - ONE_MINUS_CONSTANT_COLOR = GL2ES2.GL_ONE_MINUS_CONSTANT_COLOR; - ONE_MINUS_CONSTANT_ALPHA = GL2ES2.GL_ONE_MINUS_CONSTANT_ALPHA; - SRC_ALPHA_SATURATE = GL.GL_SRC_ALPHA_SATURATE; - - SCISSOR_TEST = GL.GL_SCISSOR_TEST; - STENCIL_TEST = GL.GL_STENCIL_TEST; - DEPTH_TEST = GL.GL_DEPTH_TEST; - DEPTH_WRITEMASK = GL.GL_DEPTH_WRITEMASK; - ALPHA_TEST = GL2ES1.GL_ALPHA_TEST; - - COLOR_BUFFER_BIT = GL.GL_COLOR_BUFFER_BIT; - DEPTH_BUFFER_BIT = GL.GL_DEPTH_BUFFER_BIT; - STENCIL_BUFFER_BIT = GL.GL_STENCIL_BUFFER_BIT; - - FRAMEBUFFER = GL.GL_FRAMEBUFFER; - COLOR_ATTACHMENT0 = GL.GL_COLOR_ATTACHMENT0; - COLOR_ATTACHMENT1 = GL2ES2.GL_COLOR_ATTACHMENT1; - COLOR_ATTACHMENT2 = GL2ES2.GL_COLOR_ATTACHMENT2; - COLOR_ATTACHMENT3 = GL2ES2.GL_COLOR_ATTACHMENT3; - RENDERBUFFER = GL.GL_RENDERBUFFER; - DEPTH_ATTACHMENT = GL.GL_DEPTH_ATTACHMENT; - STENCIL_ATTACHMENT = GL.GL_STENCIL_ATTACHMENT; - READ_FRAMEBUFFER = GL2ES3.GL_READ_FRAMEBUFFER; - DRAW_FRAMEBUFFER = GL2ES3.GL_DRAW_FRAMEBUFFER; - - RGBA8 = GL.GL_RGBA8; - DEPTH24_STENCIL8 = GL.GL_DEPTH24_STENCIL8; - - DEPTH_COMPONENT = GL2ES2.GL_DEPTH_COMPONENT; - DEPTH_COMPONENT16 = GL.GL_DEPTH_COMPONENT16; - DEPTH_COMPONENT24 = GL.GL_DEPTH_COMPONENT24; - DEPTH_COMPONENT32 = GL.GL_DEPTH_COMPONENT32; - - STENCIL_INDEX = GL2ES2.GL_STENCIL_INDEX; - STENCIL_INDEX1 = GL.GL_STENCIL_INDEX1; - STENCIL_INDEX4 = GL.GL_STENCIL_INDEX4; - STENCIL_INDEX8 = GL.GL_STENCIL_INDEX8; - - DEPTH_STENCIL = GL.GL_DEPTH_STENCIL; - - FRAMEBUFFER_COMPLETE = GL.GL_FRAMEBUFFER_COMPLETE; - FRAMEBUFFER_INCOMPLETE_ATTACHMENT = GL.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT; - FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = GL.GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT; - FRAMEBUFFER_INCOMPLETE_DIMENSIONS = GL.GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS; - FRAMEBUFFER_INCOMPLETE_FORMATS = GL.GL_FRAMEBUFFER_INCOMPLETE_FORMATS; - FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = GL2GL3.GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER; - FRAMEBUFFER_INCOMPLETE_READ_BUFFER = GL2GL3.GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER; - FRAMEBUFFER_UNSUPPORTED = GL.GL_FRAMEBUFFER_UNSUPPORTED; - - FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = GL.GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE; - FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = GL.GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME; - FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = GL.GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL; - FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = GL.GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE; - - RENDERBUFFER_WIDTH = GL.GL_RENDERBUFFER_WIDTH; - RENDERBUFFER_HEIGHT = GL.GL_RENDERBUFFER_HEIGHT; - RENDERBUFFER_RED_SIZE = GL.GL_RENDERBUFFER_RED_SIZE; - RENDERBUFFER_GREEN_SIZE = GL.GL_RENDERBUFFER_GREEN_SIZE; - RENDERBUFFER_BLUE_SIZE = GL.GL_RENDERBUFFER_BLUE_SIZE; - RENDERBUFFER_ALPHA_SIZE = GL.GL_RENDERBUFFER_ALPHA_SIZE; - RENDERBUFFER_DEPTH_SIZE = GL.GL_RENDERBUFFER_DEPTH_SIZE; - RENDERBUFFER_STENCIL_SIZE = GL.GL_RENDERBUFFER_STENCIL_SIZE; - RENDERBUFFER_INTERNAL_FORMAT = GL.GL_RENDERBUFFER_INTERNAL_FORMAT; - - MULTISAMPLE = GL.GL_MULTISAMPLE; - POINT_SMOOTH = GL2ES1.GL_POINT_SMOOTH; - LINE_SMOOTH = GL.GL_LINE_SMOOTH; - POLYGON_SMOOTH = GL2GL3.GL_POLYGON_SMOOTH; - } - - /////////////////////////////////////////////////////////// - - // Special Functions - - @Override - public void flush() { - gl.glFlush(); - } - - @Override - public void finish() { - gl.glFinish(); - } - - @Override - public void hint(int target, int hint) { - gl.glHint(target, hint); - } - - /////////////////////////////////////////////////////////// - - // State and State Requests - - @Override - public void enable(int value) { - if (-1 < value) { - gl.glEnable(value); - } - } - - @Override - public void disable(int value) { - if (-1 < value) { - gl.glDisable(value); - } - } - - @Override - public void getBooleanv(int value, IntBuffer data) { - if (-1 < value) { - if (byteBuffer.capacity() < data.capacity()) { - byteBuffer = allocateDirectByteBuffer(data.capacity()); - } - gl.glGetBooleanv(value, byteBuffer); - for (int i = 0; i < data.capacity(); i++) { - data.put(i, byteBuffer.get(i)); - } - } else { - fillIntBuffer(data, 0, data.capacity() - 1, 0); - } - } - - @Override - public void getIntegerv(int value, IntBuffer data) { - if (-1 < value) { - gl.glGetIntegerv(value, data); - } else { - fillIntBuffer(data, 0, data.capacity() - 1, 0); - } - } - - @Override - public void getFloatv(int value, FloatBuffer data) { - if (-1 < value) { - gl.glGetFloatv(value, data); - } else { - fillFloatBuffer(data, 0, data.capacity() - 1, 0); - } - } - - @Override - public boolean isEnabled(int value) { - return gl.glIsEnabled(value); - } - - @Override - public String getString(int name) { - return gl.glGetString(name); - } - - /////////////////////////////////////////////////////////// - - // Error Handling - - @Override - public int getError() { - return gl.glGetError(); - } - - @Override - public String errorString(int err) { - return glu.gluErrorString(err); - } - - ////////////////////////////////////////////////////////////////////////////// - - // Buffer Objects - - @Override - public void genBuffers(int n, IntBuffer buffers) { - gl.glGenBuffers(n, buffers); - } - - @Override - public void deleteBuffers(int n, IntBuffer buffers) { - gl.glDeleteBuffers(n, buffers); - } - - @Override - public void bindBuffer(int target, int buffer) { - gl.glBindBuffer(target, buffer); - } - - @Override - public void bufferData(int target, int size, Buffer data, int usage) { - gl.glBufferData(target, size, data, usage); - } - - @Override - public void bufferSubData(int target, int offset, int size, Buffer data) { - gl.glBufferSubData(target, offset, size, data); - } - - @Override - public void isBuffer(int buffer) { - gl.glIsBuffer(buffer); - } - - @Override - public void getBufferParameteriv(int target, int value, IntBuffer data) { - gl.glGetBufferParameteriv(target, value, data); - } - - @Override - public ByteBuffer mapBuffer(int target, int access) { - return gl2.glMapBuffer(target, access); - } - - @Override - public ByteBuffer mapBufferRange(int target, int offset, int length, int access) { - if (gl2x != null) { - return gl2x.glMapBufferRange(target, offset, length, access); - } else if (gl3 != null) { - return gl3.glMapBufferRange(target, offset, length, access); - } else { - throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glMapBufferRange()")); - } - } - - @Override - public void unmapBuffer(int target) { - gl2.glUnmapBuffer(target); - } - - ////////////////////////////////////////////////////////////////////////////// - - // Viewport and Clipping - - @Override - public void depthRangef(float n, float f) { - gl.glDepthRangef(n, f); - } - - @Override - public void viewport(int x, int y, int w, int h) { -// gl.glViewport(pixel_scale * x, pixel_scale * y, pixel_scale * w, pixel_scale * h); - gl.glViewport(x, y, w, h); - } - - ////////////////////////////////////////////////////////////////////////////// - - // Reading Pixels - - @Override - protected void readPixelsImpl(int x, int y, int width, int height, int format, int type, Buffer buffer) { - gl.glReadPixels(x, y, width, height, format, type, buffer); - } - - ////////////////////////////////////////////////////////////////////////////// - - // Vertices - - @Override - public void vertexAttrib1f(int index, float value) { - gl2.glVertexAttrib1f(index, value); - } - - @Override - public void vertexAttrib2f(int index, float value0, float value1) { - gl2.glVertexAttrib2f(index, value0, value1); - } - - @Override - public void vertexAttrib3f(int index, float value0, float value1, float value2) { - gl2.glVertexAttrib3f(index, value0, value1, value2); - } - - @Override - public void vertexAttrib4f(int index, float value0, float value1, float value2, float value3) { - gl2.glVertexAttrib4f(index, value0, value1, value2, value3); - } - - @Override - public void vertexAttrib1fv(int index, FloatBuffer values) { - gl2.glVertexAttrib1fv(index, values); - } - - @Override - public void vertexAttrib2fv(int index, FloatBuffer values) { - gl2.glVertexAttrib2fv(index, values); - } - - @Override - public void vertexAttrib3fv(int index, FloatBuffer values) { - gl2.glVertexAttrib3fv(index, values); - } - - @Override - public void vertexAttri4fv(int index, FloatBuffer values) { - gl2.glVertexAttrib4fv(index, values); - } - - @Override - public void vertexAttribPointer(int index, int size, int type, boolean normalized, int stride, int offset) { - gl2.glVertexAttribPointer(index, size, type, normalized, stride, offset); - } - - @Override - public void vertexAttribPointer(int index, int size, int type, boolean normalized, int stride, Buffer data) { - if (gl2x != null) { - gl2x.glVertexAttribPointer(index, size, type, normalized, stride, data); - } else { - throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glVertexAttribPointer()")); - } - } - - @Override - public void enableVertexAttribArray(int index) { - gl2.glEnableVertexAttribArray(index); - } - - @Override - public void disableVertexAttribArray(int index) { - gl2.glDisableVertexAttribArray(index); - } - - @Override - public void drawArrays(int mode, int first, int count) { - gl.glDrawArrays(mode, first, count); - } - - @Override - public void drawElements(int mode, int count, int type, int offset) { - gl.glDrawElements(mode, count, type, offset); - } - - @Override - public void drawElements(int mode, int count, int type, Buffer indices) { - if (gl2x != null) { - gl2x.glDrawElements(mode, count, type, indices); - } else { - throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glDrawElements()")); - } - } - - ////////////////////////////////////////////////////////////////////////////// - - // Rasterization - - @Override - public void lineWidth(float width) { - gl.glLineWidth(width); - } - - @Override - public void frontFace(int dir) { - gl.glFrontFace(dir); - } - - @Override - public void cullFace(int mode) { - gl.glCullFace(mode); - } - - @Override - public void polygonOffset(float factor, float units) { - gl.glPolygonOffset(factor, units); - } - - ////////////////////////////////////////////////////////////////////////////// - - // Pixel Rectangles - - @Override - public void pixelStorei(int pname, int param) { - gl.glPixelStorei(pname, param); - } - - /////////////////////////////////////////////////////////// - - // Texturing - - @Override - public void texImage2D(int target, int level, int internalFormat, int width, int height, int border, int format, int type, Buffer data) { - gl.glTexImage2D(target, level, internalFormat, width, height, border, format, type, data); - } - - @Override - public void copyTexImage2D(int target, int level, int internalFormat, int x, int y, int width, int height, int border) { - gl.glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); - } - - @Override - public void texSubImage2D(int target, int level, int xOffset, int yOffset, int width, int height, int format, int type, Buffer data) { - gl.glTexSubImage2D(target, level, xOffset, yOffset, width, height, format, type, data); - } - - @Override - public void copyTexSubImage2D(int target, int level, int xOffset, int yOffset, int x, int y, int width, int height) { - gl.glCopyTexSubImage2D(target, level, x, y, xOffset, yOffset, width, height); - } - - @Override - public void compressedTexImage2D(int target, int level, int internalFormat, int width, int height, int border, int imageSize, Buffer data) { - gl.glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data); - } - - @Override - public void compressedTexSubImage2D(int target, int level, int xOffset, int yOffset, int width, int height, int format, int imageSize, Buffer data) { - gl.glCompressedTexSubImage2D(target, level, xOffset, yOffset, width, height, format, imageSize, data); - } - - @Override - public void texParameteri(int target, int pname, int param) { - gl.glTexParameteri(target, pname, param); - } - - @Override - public void texParameterf(int target, int pname, float param) { - gl.glTexParameterf(target, pname, param); - } - - @Override - public void texParameteriv(int target, int pname, IntBuffer params) { - gl.glTexParameteriv(target, pname, params); - } - - @Override - public void texParameterfv(int target, int pname, FloatBuffer params) { - gl.glTexParameterfv(target, pname, params); - } - - @Override - public void generateMipmap(int target) { - gl.glGenerateMipmap(target); - } - - @Override - public void genTextures(int n, IntBuffer textures) { - gl.glGenTextures(n, textures); - } - - @Override - public void deleteTextures(int n, IntBuffer textures) { - gl.glDeleteTextures(n, textures); - } - - @Override - public void getTexParameteriv(int target, int pname, IntBuffer params) { - gl.glGetTexParameteriv(target, pname, params); - } - - @Override - public void getTexParameterfv(int target, int pname, FloatBuffer params) { - gl.glGetTexParameterfv(target, pname, params); - } - - @Override - public boolean isTexture(int texture) { - return gl.glIsTexture(texture); - } - - @Override - protected void activeTextureImpl(int texture) { - gl.glActiveTexture(texture); - } - - @Override - protected void bindTextureImpl(int target, int texture) { - gl.glBindTexture(target, texture); - } - - /////////////////////////////////////////////////////////// - - // Shaders and Programs - - @Override - public int createShader(int type) { - return gl2.glCreateShader(type); - } - - @Override - public void shaderSource(int shader, String source) { - gl2.glShaderSource(shader, 1, new String[] { source }, (int[]) null, 0); - } - - @Override - public void compileShader(int shader) { - gl2.glCompileShader(shader); - } - - @Override - public void releaseShaderCompiler() { - gl2.glReleaseShaderCompiler(); - } - - @Override - public void deleteShader(int shader) { - gl2.glDeleteShader(shader); - } - - @Override - public void shaderBinary(int count, IntBuffer shaders, int binaryFormat, Buffer binary, int length) { - gl2.glShaderBinary(count, shaders, binaryFormat, binary, length); - } - - @Override - public int createProgram() { - return gl2.glCreateProgram(); - } - - @Override - public void attachShader(int program, int shader) { - gl2.glAttachShader(program, shader); - } - - @Override - public void detachShader(int program, int shader) { - gl2.glDetachShader(program, shader); - } - - @Override - public void linkProgram(int program) { - gl2.glLinkProgram(program); - } - - @Override - public void useProgram(int program) { - gl2.glUseProgram(program); - } - - @Override - public void deleteProgram(int program) { - gl2.glDeleteProgram(program); - } - - @Override - public String getActiveAttrib(int program, int index, IntBuffer size, IntBuffer type) { - int[] tmp = {0, 0, 0}; - byte[] namebuf = new byte[1024]; - gl2.glGetActiveAttrib(program, index, 1024, tmp, 0, tmp, 1, tmp, 2, namebuf, 0); - size.put(tmp[1]); - type.put(tmp[2]); - String name = new String(namebuf, 0, tmp[0]); - return name; - } - - @Override - public int getAttribLocation(int program, String name) { - return gl2.glGetAttribLocation(program, name); - } - - @Override - public void bindAttribLocation(int program, int index, String name) { - gl2.glBindAttribLocation(program, index, name); - } - - @Override - public int getUniformLocation(int program, String name) { - return gl2.glGetUniformLocation(program, name); - } - - @Override - public String getActiveUniform(int program, int index, IntBuffer size, IntBuffer type) { - int[] tmp= {0, 0, 0}; - byte[] namebuf = new byte[1024]; - gl2.glGetActiveUniform(program, index, 1024, tmp, 0, tmp, 1, tmp, 2, namebuf, 0); - size.put(tmp[1]); - type.put(tmp[2]); - String name = new String(namebuf, 0, tmp[0]); - return name; - } - - @Override - public void uniform1i(int location, int value) { - gl2.glUniform1i(location, value); - } - - @Override - public void uniform2i(int location, int value0, int value1) { - gl2.glUniform2i(location, value0, value1); - } - - @Override - public void uniform3i(int location, int value0, int value1, int value2) { - gl2.glUniform3i(location, value0, value1, value2); - } - - @Override - public void uniform4i(int location, int value0, int value1, int value2, int value3) { - gl2.glUniform4i(location, value0, value1, value2, value3); - } - - @Override - public void uniform1f(int location, float value) { - gl2.glUniform1f(location, value); - } - - @Override - public void uniform2f(int location, float value0, float value1) { - gl2.glUniform2f(location, value0, value1); - } - - @Override - public void uniform3f(int location, float value0, float value1, float value2) { - gl2.glUniform3f(location, value0, value1, value2); - } - - @Override - public void uniform4f(int location, float value0, float value1, float value2, float value3) { - gl2.glUniform4f(location, value0, value1, value2, value3); - } - - @Override - public void uniform1iv(int location, int count, IntBuffer v) { - gl2.glUniform1iv(location, count, v); - } - - @Override - public void uniform2iv(int location, int count, IntBuffer v) { - gl2.glUniform2iv(location, count, v); - } - - @Override - public void uniform3iv(int location, int count, IntBuffer v) { - gl2.glUniform3iv(location, count, v); - } - - @Override - public void uniform4iv(int location, int count, IntBuffer v) { - gl2.glUniform4iv(location, count, v); - } - - @Override - public void uniform1fv(int location, int count, FloatBuffer v) { - gl2.glUniform1fv(location, count, v); - } - - @Override - public void uniform2fv(int location, int count, FloatBuffer v) { - gl2.glUniform2fv(location, count, v); - } - - @Override - public void uniform3fv(int location, int count, FloatBuffer v) { - gl2.glUniform3fv(location, count, v); - } - - @Override - public void uniform4fv(int location, int count, FloatBuffer v) { - gl2.glUniform4fv(location, count, v); - } - - @Override - public void uniformMatrix2fv(int location, int count, boolean transpose, FloatBuffer mat) { - gl2.glUniformMatrix2fv(location, count, transpose, mat); - } - - @Override - public void uniformMatrix3fv(int location, int count, boolean transpose, FloatBuffer mat) { - gl2.glUniformMatrix3fv(location, count, transpose, mat); - } - - @Override - public void uniformMatrix4fv(int location, int count, boolean transpose, FloatBuffer mat) { - gl2.glUniformMatrix4fv(location, count, transpose, mat); - } - - @Override - public void validateProgram(int program) { - gl2.glValidateProgram(program); - } - - @Override - public boolean isShader(int shader) { - return gl2.glIsShader(shader); - } - - @Override - public void getShaderiv(int shader, int pname, IntBuffer params) { - gl2.glGetShaderiv(shader, pname, params); - } - - @Override - public void getAttachedShaders(int program, int maxCount, IntBuffer count, IntBuffer shaders) { - gl2.glGetAttachedShaders(program, maxCount, count, shaders); - } - - @Override - public String getShaderInfoLog(int shader) { - int[] val = { 0 }; - gl2.glGetShaderiv(shader, GL2ES2.GL_INFO_LOG_LENGTH, val, 0); - int length = val[0]; - - byte[] log = new byte[length]; - gl2.glGetShaderInfoLog(shader, length, val, 0, log, 0); - return new String(log); - } - - @Override - public String getShaderSource(int shader) { - int[] len = {0}; - byte[] buf = new byte[1024]; - gl2.glGetShaderSource(shader, 1024, len, 0, buf, 0); - return new String(buf, 0, len[0]); - } - - @Override - public void getShaderPrecisionFormat(int shaderType, int precisionType, IntBuffer range, IntBuffer precision) { - gl2.glGetShaderPrecisionFormat(shaderType, precisionType, range, precision); - } - - @Override - public void getVertexAttribfv(int index, int pname, FloatBuffer params) { - gl2.glGetVertexAttribfv(index, pname, params); - } - - @Override - public void getVertexAttribiv(int index, int pname, IntBuffer params) { - gl2.glGetVertexAttribiv(index, pname, params); - } - - @Override - public void getVertexAttribPointerv(int index, int pname, ByteBuffer data) { - throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glGetVertexAttribPointerv()")); - } - - @Override - public void getUniformfv(int program, int location, FloatBuffer params) { - gl2.glGetUniformfv(program, location, params); - } - - @Override - public void getUniformiv(int program, int location, IntBuffer params) { - gl2.glGetUniformiv(program, location, params); - } - - @Override - public boolean isProgram(int program) { - return gl2.glIsProgram(program); - } - - @Override - public void getProgramiv(int program, int pname, IntBuffer params) { - gl2.glGetProgramiv(program, pname, params); - } - - @Override - public String getProgramInfoLog(int program) { - int[] val = { 0 }; - gl2.glGetShaderiv(program, GL2ES2.GL_INFO_LOG_LENGTH, val, 0); - int length = val[0]; - - if (0 < length) { - byte[] log = new byte[length]; - gl2.glGetProgramInfoLog(program, length, val, 0, log, 0); - return new String(log); - } else { - return "Unknow error"; - } - } - - /////////////////////////////////////////////////////////// - - // Per-Fragment Operations - - @Override - public void scissor(int x, int y, int w, int h) { -// gl.glScissor(pixel_scale * x, pixel_scale * y, pixel_scale * w, pixel_scale * h); - gl.glScissor(x, y, w, h); - } - - @Override - public void sampleCoverage(float value, boolean invert) { - gl2.glSampleCoverage(value, invert); - } - - @Override - public void stencilFunc(int func, int ref, int mask) { - gl2.glStencilFunc(func, ref, mask); - } - - @Override - public void stencilFuncSeparate(int face, int func, int ref, int mask) { - gl2.glStencilFuncSeparate(face, func, ref, mask); - } - - @Override - public void stencilOp(int sfail, int dpfail, int dppass) { - gl2.glStencilOp(sfail, dpfail, dppass); - } - - @Override - public void stencilOpSeparate(int face, int sfail, int dpfail, int dppass) { - gl2.glStencilOpSeparate(face, sfail, dpfail, dppass); - } - - @Override - public void depthFunc(int func) { - gl.glDepthFunc(func); - } - - @Override - public void blendEquation(int mode) { - gl.glBlendEquation(mode); - } - - @Override - public void blendEquationSeparate(int modeRGB, int modeAlpha) { - gl.glBlendEquationSeparate(modeRGB, modeAlpha); - } - - @Override - public void blendFunc(int src, int dst) { - gl.glBlendFunc(src, dst); - } - - @Override - public void blendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha) { - gl.glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); - } - - @Override - public void blendColor(float red, float green, float blue, float alpha) { - gl2.glBlendColor(red, green, blue, alpha); - } - - @Override - public void alphaFunc(int func, float ref) { - if (gl2x != null) { - gl2x.glAlphaFunc(func, ref); - } else { - throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glAlphaFunc()")); - } - } - - /////////////////////////////////////////////////////////// - - // Whole Framebuffer Operations - - @Override - public void colorMask(boolean r, boolean g, boolean b, boolean a) { - gl.glColorMask(r, g, b, a); - } - - @Override - public void depthMask(boolean mask) { - gl.glDepthMask(mask); - } - - @Override - public void stencilMask(int mask) { - gl.glStencilMask(mask); - } - - @Override - public void stencilMaskSeparate(int face, int mask) { - gl2.glStencilMaskSeparate(face, mask); - } - - @Override - public void clear(int buf) { - gl.glClear(buf); - } - - @Override - public void clearColor(float r, float g, float b, float a) { - gl.glClearColor(r, g, b, a); - } - - @Override - public void clearDepth(float d) { - gl.glClearDepthf(d); - } - - @Override - public void clearStencil(int s) { - gl.glClearStencil(s); - } - - /////////////////////////////////////////////////////////// - - // Framebuffers Objects - - @Override - protected void bindFramebufferImpl(int target, int framebuffer) { - gl.glBindFramebuffer(target, framebuffer); - } - - @Override - public void deleteFramebuffers(int n, IntBuffer framebuffers) { - gl.glDeleteFramebuffers(n, framebuffers); - } - - @Override - public void genFramebuffers(int n, IntBuffer framebuffers) { - gl.glGenFramebuffers(n, framebuffers); - } - - @Override - public void bindRenderbuffer(int target, int renderbuffer) { - gl.glBindRenderbuffer(target, renderbuffer); - } - - @Override - public void deleteRenderbuffers(int n, IntBuffer renderbuffers) { - gl.glDeleteRenderbuffers(n, renderbuffers); - } - - @Override - public void genRenderbuffers(int n, IntBuffer renderbuffers) { - gl.glGenRenderbuffers(n, renderbuffers); - } - - @Override - public void renderbufferStorage(int target, int internalFormat, int width, int height) { - gl.glRenderbufferStorage(target, internalFormat, width, height); - } - - @Override - public void framebufferRenderbuffer(int target, int attachment, int rendbuferfTarget, int renderbuffer) { - gl.glFramebufferRenderbuffer(target, attachment, rendbuferfTarget, renderbuffer); - } - - @Override - public void framebufferTexture2D(int target, int attachment, int texTarget, int texture, int level) { - gl.glFramebufferTexture2D(target, attachment, texTarget, texture, level); - } - - @Override - public int checkFramebufferStatus(int target) { - return gl.glCheckFramebufferStatus(target); - } - - @Override - public boolean isFramebuffer(int framebuffer) { - return gl2.glIsFramebuffer(framebuffer); - } - - @Override - public void getFramebufferAttachmentParameteriv(int target, int attachment, int pname, IntBuffer params) { - gl2.glGetFramebufferAttachmentParameteriv(target, attachment, pname, params); - } - - @Override - public boolean isRenderbuffer(int renderbuffer) { - return gl2.glIsRenderbuffer(renderbuffer); - } - - @Override - public void getRenderbufferParameteriv(int target, int pname, IntBuffer params) { - gl2.glGetRenderbufferParameteriv(target, pname, params); - } - - @Override - public void blitFramebuffer(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, int mask, int filter) { - if (gl2x != null) { - gl2x.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); - } else if (gl3 != null) { - gl3.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); - } else { - throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glBlitFramebuffer()")); - } - } - - @Override - public void renderbufferStorageMultisample(int target, int samples, int format, int width, int height) { - if (gl2x != null) { - gl2x.glRenderbufferStorageMultisample(target, samples, format, width, height); - } else if (gl3 != null) { - gl3.glRenderbufferStorageMultisample(target, samples, format, width, height); - } else { - throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glRenderbufferStorageMultisample()")); - } - } - - @Override - public void readBuffer(int buf) { - if (gl2x != null) { - gl2x.glReadBuffer(buf); - } else if (gl3 != null) { - gl3.glReadBuffer(buf); - } else { - throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glReadBuffer()")); - } - } - - @Override - public void drawBuffer(int buf) { - if (gl2x != null) { - gl2x.glDrawBuffer(buf); - } else if (gl3 != null) { - gl3.glDrawBuffer(buf); - } else { - throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glDrawBuffer()")); - } - } -} diff --git a/java/libraries/jogl/src/processing/jogl/PSurfaceJOGL.java b/java/libraries/jogl/src/processing/jogl/PSurfaceJOGL.java deleted file mode 100644 index a94bd935c..000000000 --- a/java/libraries/jogl/src/processing/jogl/PSurfaceJOGL.java +++ /dev/null @@ -1,818 +0,0 @@ -package processing.jogl; - -import java.awt.Component; -//import java.awt.Dimension; -import java.awt.Point; -//import java.awt.Frame; -import java.awt.Rectangle; -import java.util.ArrayList; - -import com.jogamp.nativewindow.NativeSurface; -import com.jogamp.nativewindow.ScalableSurface; -import com.jogamp.opengl.GLAnimatorControl; -import com.jogamp.opengl.GLAutoDrawable; -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLEventListener; -import com.jogamp.opengl.GLException; -import com.jogamp.opengl.GLProfile; -import com.jogamp.nativewindow.MutableGraphicsConfiguration; -import com.jogamp.newt.Display; -import com.jogamp.newt.MonitorDevice; -import com.jogamp.newt.NewtFactory; -import com.jogamp.newt.Screen; -import com.jogamp.newt.awt.NewtCanvasAWT; -import com.jogamp.newt.event.InputEvent; -import com.jogamp.newt.event.WindowAdapter; -import com.jogamp.newt.event.WindowEvent; -import com.jogamp.newt.opengl.GLWindow; -import com.jogamp.opengl.util.FPSAnimator; - -import processing.core.PApplet; -import processing.core.PConstants; -import processing.core.PGraphics; -import processing.core.PImage; -import processing.core.PSurface; -import processing.event.KeyEvent; -import processing.event.MouseEvent; -import processing.opengl.PGraphicsOpenGL; -import processing.opengl.PGL; - -public class PSurfaceJOGL implements PSurface { - /** Selected GL profile */ - public static GLProfile profile; - - PJOGL pgl; - - GLWindow window; -// Frame frame; - FPSAnimator animator; - Rectangle screenRect; - - PApplet sketch; - PGraphics graphics; - - int sketchX; - int sketchY; - int sketchWidth; - int sketchHeight; - - MonitorDevice displayDevice; - Throwable drawException; - Object waitObject = new Object(); - - NewtCanvasAWT canvas; - - - public PSurfaceJOGL(PGraphics graphics) { - this.graphics = graphics; - this.pgl = (PJOGL) ((PGraphicsOpenGL)graphics).pgl; - } - - - public void initOffscreen(PApplet sketch) { - this.sketch = sketch; - - sketchWidth = sketch.sketchWidth(); - sketchHeight = sketch.sketchHeight(); - - if (window != null) { - canvas = new NewtCanvasAWT(window); - canvas.setBounds(0, 0, window.getWidth(), window.getHeight()); -// canvas.setBackground(new Color(pg.backgroundColor, true)); - canvas.setFocusable(true); - } - } - - - public void initFrame(PApplet sketch, int backgroundColor, - int deviceIndex, boolean fullScreen, - boolean spanDisplays) { - this.sketch = sketch; - - Display display = NewtFactory.createDisplay(null); - display.addReference(); - Screen screen = NewtFactory.createScreen(display, 0); - screen.addReference(); - - ArrayList monitors = new ArrayList(); - for (int i = 0; i < screen.getMonitorDevices().size(); i++) { - MonitorDevice monitor = screen.getMonitorDevices().get(i); - System.out.println("Monitor " + monitor.getId() + " ************"); - System.out.println(monitor.toString()); - System.out.println(monitor.getViewportInWindowUnits()); - System.out.println(monitor.getViewport()); - - monitors.add(monitor); - } - System.out.println("*******************************"); - - if (deviceIndex >= 0) { // if -1, use the default device - if (deviceIndex < monitors.size()) { - displayDevice = monitors.get(deviceIndex); - } else { - System.err.format("Display %d does not exist, " + - "using the default display instead.", deviceIndex); - for (int i = 0; i < monitors.size(); i++) { - System.err.format("Display %d is %s\n", i, monitors.get(i)); - } - } - } - - if (profile == null) { - if (PJOGL.PROFILE == 2) { - try { - profile = GLProfile.getGL2ES1(); - } catch (GLException ex) { - profile = GLProfile.getMaxFixedFunc(true); - } - } else if (PJOGL.PROFILE == 3) { - try { - profile = GLProfile.getGL2GL3(); - } catch (GLException ex) { - profile = GLProfile.getMaxProgrammable(true); - } - if (!profile.isGL3()) { - PGraphics.showWarning("Requested profile GL3 but is not available, got: " + profile); - } - } else if (PJOGL.PROFILE == 4) { - try { - profile = GLProfile.getGL4ES3(); - } catch (GLException ex) { - profile = GLProfile.getMaxProgrammable(true); - } - if (!profile.isGL4()) { - PGraphics.showWarning("Requested profile GL4 but is not available, got: " + profile); - } - } else throw new RuntimeException(PGL.UNSUPPORTED_GLPROF_ERROR); - } - - // Setting up the desired capabilities; - GLCapabilities caps = new GLCapabilities(profile); - caps.setAlphaBits(PGL.REQUESTED_ALPHA_BITS); - caps.setDepthBits(PGL.REQUESTED_DEPTH_BITS); - caps.setStencilBits(PGL.REQUESTED_STENCIL_BITS); - -// caps.setPBuffer(false); -// caps.setFBO(false); - - pgl.reqNumSamples = graphics.quality; - caps.setSampleBuffers(true); - caps.setNumSamples(pgl.reqNumSamples); - caps.setBackgroundOpaque(true); - caps.setOnscreen(true); - pgl.capabilities = caps; - System.err.println("0. create window"); - window = GLWindow.create(screen, caps); - - sketchWidth = sketch.sketchWidth(); - sketchHeight = sketch.sketchHeight(); - - if (displayDevice == null) { - displayDevice = window.getMainMonitor(); - } - sketchX = displayDevice.getViewportInWindowUnits().getX(); - sketchY = displayDevice.getViewportInWindowUnits().getY(); - - int screenWidth = screen.getWidth(); - int screenHeight = screen.getHeight(); - - screenRect = spanDisplays ? new Rectangle(0, 0, screen.getWidth(), screen.getHeight()) : - new Rectangle(0, 0, displayDevice.getViewportInWindowUnits().getWidth(), - displayDevice.getViewportInWindowUnits().getHeight()); - - sketch.displayWidth = screenRect.width; - sketch.displayHeight = screenRect.height; - - // Sketch has already requested to be the same as the screen's - // width and height, so let's roll with full screen mode. - if (screenRect.width == sketchWidth && - screenRect.height == sketchHeight) { - fullScreen = true; - } - -// if (fullScreen || spanDisplays) { - if (spanDisplays) { - sketchWidth = screenRect.width; - sketchHeight = screenRect.height; - } - -// window..setBackground(new Color(backgroundColor, true)); - window.setSize(sketchWidth, sketchHeight); - - System.out.println("deviceIndex: " + deviceIndex); - System.out.println(displayDevice); - System.out.println("Screen res " + screenWidth + "x" + screenHeight); - - // This example could be useful: - // com.jogamp.opengl.test.junit.newt.mm.TestScreenMode01cNEWT - if (fullScreen) { - PApplet.hideMenuBar(); - if (spanDisplays) { - window.setFullscreen(monitors); - } else { - window.setFullscreen(true); - } - } - - float[] reqSurfacePixelScale; - if (graphics.is2X()) { - // Retina - reqSurfacePixelScale = new float[] { ScalableSurface.AUTOMAX_PIXELSCALE, - ScalableSurface.AUTOMAX_PIXELSCALE }; -// pgl.pixel_scale = 2; - } else { - // Non-retina - reqSurfacePixelScale = new float[] { ScalableSurface.IDENTITY_PIXELSCALE, - ScalableSurface.IDENTITY_PIXELSCALE }; -// pgl.pixel_scale = 1; - } - window.setSurfaceScale(reqSurfacePixelScale); - - NEWTMouseListener mouseListener = new NEWTMouseListener(); - window.addMouseListener(mouseListener); - NEWTKeyListener keyListener = new NEWTKeyListener(); - window.addKeyListener(keyListener); - NEWTWindowListener winListener = new NEWTWindowListener(); - window.addWindowListener(winListener); - - DrawListener drawlistener = new DrawListener(); - window.addGLEventListener(drawlistener); - - System.err.println("1. create animator"); - animator = new FPSAnimator(window, 60); - drawException = null; - animator.setUncaughtExceptionHandler(new GLAnimatorControl.UncaughtExceptionHandler() { - @Override - public void uncaughtException(final GLAnimatorControl animator, - final GLAutoDrawable drawable, - final Throwable cause) { - synchronized (waitObject) { -// System.err.println("Caught exception: " + cause.getMessage()); - drawException = cause; - waitObject.notify(); - } - } - }); - - new Thread(new Runnable() { - public void run() { - synchronized (waitObject) { - try { - if (drawException == null) waitObject.wait(); - } catch (InterruptedException e) { - e.printStackTrace(); - } -// System.err.println("Caught exception: " + drawException.getMessage()); - if (drawException instanceof RuntimeException) { - throw (RuntimeException)drawException.getCause(); - } else { - throw new RuntimeException(drawException.getCause()); - } - } - } - }).start(); - - - window.addWindowListener(new WindowAdapter() { - @Override - public void windowDestroyNotify(final WindowEvent e) { - animator.stop(); - PSurfaceJOGL.this.sketch.exit(); - window.destroy(); - } - }); - - - window.setVisible(true); - System.err.println("4. set visible"); - - /* - try { - EventQueue.invokeAndWait(new Runnable() { - public void run() { - window.setVisible(true); - System.err.println("1. set visible"); - }}); - } catch (Exception ex) { - // error setting the window visible, should quit... - } -*/ - -// frame = new DummyFrame(); -// return frame; - } - - @Override - public void setTitle(String title) { - window.setTitle(title); - } - - @Override - public void setVisible(boolean visible) { - window.setVisible(visible); - } - - @Override - public void setResizable(boolean resizable) { - // TODO Auto-generated method stub - - } - - private void setFrameCentered() { - // Can't use frame.setLocationRelativeTo(null) because it sends the - // frame to the main display, which undermines the --display setting. - int sketchX = displayDevice.getViewportInWindowUnits().getX(); - int sketchY = displayDevice.getViewportInWindowUnits().getY(); - System.err.println("just center on the screen at " + sketchX + screenRect.x + (screenRect.width - sketchWidth) / 2 + ", " + - sketchY + screenRect.y + (screenRect.height - sketchHeight) / 2); - - System.err.println(" Display starts at " + sketchX + ", " + sketchY); - System.err.println(" Screen rect pos: " + screenRect.x + ", " + screenRect.y); - System.err.println(" Screen rect w/h: " + screenRect.width + ", " + screenRect.height); - System.err.println(" Sketch w/h: " + sketchWidth + ", " + sketchHeight); - - int w = sketchWidth; - int h = sketchHeight; - if (graphics.is2X()) { - w /= 2; - h /= 2; - } - - window.setPosition(sketchX + screenRect.x + (screenRect.width - w) / 2, - sketchY + screenRect.y + (screenRect.height - h) / 2); - } - - - @Override - public void placeWindow(int[] location, int[] editorLocation) { -// Dimension dim = new Dimension(sketchWidth, sketchHeight); -// int contentW = Math.max(sketchWidth, MIN_WINDOW_WIDTH); -// int contentH = Math.max(sketchHeight, MIN_WINDOW_HEIGHT); - - if (location != null) { - System.err.println("place window at " + location[0] + ", " + location[1]); - // a specific location was received from the Runner - // (applet has been run more than once, user placed window) -// frame.setLocation(location[0], location[1]); - window.setPosition(location[0], location[1]); - - } else if (editorLocation != null) { - System.err.println("place window at editor location " + editorLocation[0] + ", " + editorLocation[1]); - int locationX = editorLocation[0] - 20; - int locationY = editorLocation[1]; - - if (locationX - window.getWidth() > 10) { - // if it fits to the left of the window - window.setPosition(locationX - window.getWidth(), locationY); - - } else { // doesn't fit - // if it fits inside the editor window, - // offset slightly from upper lefthand corner - // so that it's plunked inside the text area - locationX = editorLocation[0] + 66; - locationY = editorLocation[1] + 66; - - if ((locationX + window.getWidth() > sketch.displayWidth - 33) || - (locationY + window.getHeight() > sketch.displayHeight - 33)) { - // otherwise center on screen - locationX = (sketch.displayWidth - window.getWidth()) / 2; - locationY = (sketch.displayHeight - window.getHeight()) / 2; - } - window.setPosition(locationX, locationY); - } - } else { // just center on screen - setFrameCentered(); - } - Point frameLoc = new Point(window.getX(), window.getY()); - if (frameLoc.y < 0) { - // Windows actually allows you to place frames where they can't be - // closed. Awesome. http://dev.processing.org/bugs/show_bug.cgi?id=1508 - window.setPosition(frameLoc.x, 30); - } - -// canvas.setBounds((contentW - sketchWidth)/2, -// (contentH - sketchHeight)/2, -// sketchWidth, sketchHeight); - - - - } - - boolean presentMode = false; - float offsetX; - float offsetY; - public void placePresent(int stopColor) { - if (sketchWidth < screenRect.width || sketchHeight < screenRect.height) { - System.err.println("Present mode"); -// System.err.println("WILL USE FBO"); - presentMode = pgl.presentMode = true; - offsetX = pgl.offsetX = 0.5f * (screenRect.width - sketchWidth); - offsetY = pgl.offsetY = 0.5f * (screenRect.height - sketchHeight); - pgl.requestFBOLayer(); - } - } - - public void setupExternalMessages() { - // TODO Auto-generated method stub - - } - - public void startThread() { - if (animator != null) { - System.err.println("5. start animator"); - animator.start(); - - if (0 < sketchX && 0 < sketchY) { - System.err.println("5.1 set inital window position"); - window.setPosition(sketchX, sketchY); - sketchX = sketchY = 0; - } -// animator.getThread().setName("Processing-GL-draw"); - } - } - - public void pauseThread() { - if (animator != null) { - animator.pause(); - } - } - - public void resumeThread() { - if (animator != null) { - animator.resume(); - } - } - - public boolean stopThread() { - if (animator != null) { - return animator.stop(); - } else { - return false; - } - } - - public boolean isStopped() { - if (animator != null) { - return !animator.isAnimating(); - } else { - return true; - } - } - - public void setSize(int width, int height) { -// if (frame != null) { - System.err.println("3. set size"); - - sketchWidth = sketch.width = width; - sketchHeight = sketch.height = height; - graphics.setSize(width, height); -// } - } - - public Component getComponent() { - return canvas; - } - - public void setSmooth(int level) { - pgl.reqNumSamples = level; - GLCapabilities caps = new GLCapabilities(profile); - caps.setAlphaBits(PGL.REQUESTED_ALPHA_BITS); - caps.setDepthBits(PGL.REQUESTED_DEPTH_BITS); - caps.setStencilBits(PGL.REQUESTED_STENCIL_BITS); - caps.setSampleBuffers(true); - caps.setNumSamples(pgl.reqNumSamples); - caps.setBackgroundOpaque(true); - caps.setOnscreen(true); - NativeSurface target = window.getNativeSurface(); - MutableGraphicsConfiguration config = (MutableGraphicsConfiguration) target.getGraphicsConfiguration(); - config.setChosenCapabilities(caps); - } - - public void setFrameRate(float fps) { - if (animator != null) { - animator.stop(); - animator.setFPS((int)fps); - pgl.setFps(fps); - animator.start(); - } - } - - public void requestFocus() { - window.requestFocus(); - - } - - class DrawListener implements GLEventListener { - public void display(GLAutoDrawable drawable) { - pgl.getGL(drawable); -// System.out.println(" - " + sketch.frameCount); - sketch.handleDraw(); - - if (sketch.frameCount == 1) { - requestFocus(); - } - } - public void dispose(GLAutoDrawable drawable) { - pgl.getGL(drawable); - sketch.dispose(); - if (sketch.exitCalled()) { - sketch.exitActual(); - } - } - public void init(GLAutoDrawable drawable) { - System.err.println("2. init drawable"); - pgl.getGL(drawable); - pgl.init(drawable); - sketch.start(); -// setSize(sketchWidth, sketchHeight); - - int c = graphics.backgroundColor; - pgl.clearColor(((c >> 16) & 0xff) / 255f, - ((c >> 8) & 0xff) / 255f, - ((c >> 0) & 0xff) / 255f, - ((c >> 24) & 0xff) / 255f); - pgl.clear(PGL.COLOR_BUFFER_BIT); - } - - public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) { - - final float[] valReqSurfacePixelScale = window.getRequestedSurfaceScale(new float[2]); - final float[] hasSurfacePixelScale = window.getCurrentSurfaceScale(new float[2]); - final float[] nativeSurfacePixelScale = window.getMaximumSurfaceScale(new float[2]); - System.err.println("[set PixelScale post]: "+ - valReqSurfacePixelScale[0]+"x"+valReqSurfacePixelScale[1]+" (val) -> "+ - hasSurfacePixelScale[0]+"x"+hasSurfacePixelScale[1]+" (has), "+ - nativeSurfacePixelScale[0]+"x"+nativeSurfacePixelScale[1]+" (native)"); - - - - - System.out.println("reshape: " + w + ", " + h); - pgl.getGL(drawable); - if (!graphics.is2X() && 1 < hasSurfacePixelScale[0]) { - setSize(w/2, h/2); - } else { - setSize(w, h); - } - } - } - - protected class NEWTWindowListener implements com.jogamp.newt.event.WindowListener { - public NEWTWindowListener() { - super(); - } - @Override - public void windowGainedFocus(com.jogamp.newt.event.WindowEvent arg0) { -// pg.parent.focusGained(null); - } - - @Override - public void windowLostFocus(com.jogamp.newt.event.WindowEvent arg0) { -// pg.parent.focusLost(null); - } - - @Override - public void windowDestroyNotify(com.jogamp.newt.event.WindowEvent arg0) { - } - - @Override - public void windowDestroyed(com.jogamp.newt.event.WindowEvent arg0) { - } - - @Override - public void windowMoved(com.jogamp.newt.event.WindowEvent arg0) { - } - - @Override - public void windowRepaint(com.jogamp.newt.event.WindowUpdateEvent arg0) { - } - - @Override - public void windowResized(com.jogamp.newt.event.WindowEvent arg0) { } - } - - // NEWT mouse listener - protected class NEWTMouseListener extends com.jogamp.newt.event.MouseAdapter { - public NEWTMouseListener() { - super(); - } - @Override - public void mousePressed(com.jogamp.newt.event.MouseEvent e) { - nativeMouseEvent(e, MouseEvent.PRESS); - } - @Override - public void mouseReleased(com.jogamp.newt.event.MouseEvent e) { - nativeMouseEvent(e, MouseEvent.RELEASE); - } - @Override - public void mouseClicked(com.jogamp.newt.event.MouseEvent e) { - nativeMouseEvent(e, MouseEvent.CLICK); - } - @Override - public void mouseDragged(com.jogamp.newt.event.MouseEvent e) { - nativeMouseEvent(e, MouseEvent.DRAG); - } - @Override - public void mouseMoved(com.jogamp.newt.event.MouseEvent e) { - nativeMouseEvent(e, MouseEvent.MOVE); - } - @Override - public void mouseWheelMoved(com.jogamp.newt.event.MouseEvent e) { - nativeMouseEvent(e, MouseEvent.WHEEL); - } - @Override - public void mouseEntered(com.jogamp.newt.event.MouseEvent e) { - nativeMouseEvent(e, MouseEvent.ENTER); - } - @Override - public void mouseExited(com.jogamp.newt.event.MouseEvent e) { - nativeMouseEvent(e, MouseEvent.EXIT); - } - } - - // NEWT key listener - protected class NEWTKeyListener extends com.jogamp.newt.event.KeyAdapter { - public NEWTKeyListener() { - super(); - } - @Override - public void keyPressed(com.jogamp.newt.event.KeyEvent e) { - nativeKeyEvent(e, KeyEvent.PRESS); - } - @Override - public void keyReleased(com.jogamp.newt.event.KeyEvent e) { - nativeKeyEvent(e, KeyEvent.RELEASE); - } - public void keyTyped(com.jogamp.newt.event.KeyEvent e) { - nativeKeyEvent(e, KeyEvent.TYPE); - } - } - - protected void nativeMouseEvent(com.jogamp.newt.event.MouseEvent nativeEvent, - int peAction) { - int modifiers = nativeEvent.getModifiers(); - int peModifiers = modifiers & - (InputEvent.SHIFT_MASK | - InputEvent.CTRL_MASK | - InputEvent.META_MASK | - InputEvent.ALT_MASK); - - int peButton = 0; - if ((modifiers & InputEvent.BUTTON1_MASK) != 0) { - peButton = PConstants.LEFT; - } else if ((modifiers & InputEvent.BUTTON2_MASK) != 0) { - peButton = PConstants.CENTER; - } else if ((modifiers & InputEvent.BUTTON3_MASK) != 0) { - peButton = PConstants.RIGHT; - } - - if (PApplet.platform == PConstants.MACOSX) { - //if (nativeEvent.isPopupTrigger()) { - if ((modifiers & InputEvent.CTRL_MASK) != 0) { - peButton = PConstants.RIGHT; - } - } - - int peCount = 0; - if (peAction == MouseEvent.WHEEL) { - peCount = nativeEvent.isShiftDown() ? (int)nativeEvent.getRotation()[0] : - (int)nativeEvent.getRotation()[1]; - } else { - peCount = nativeEvent.getClickCount(); - } - - - if (presentMode) { - if (20 < nativeEvent.getX() && nativeEvent.getX() < 20 + 100 && - screenRect.height - 70 < nativeEvent.getY() && nativeEvent.getY() < screenRect.height - 20) { - System.err.println("clicked on exit button"); -// if (externalMessages) { -// System.err.println(PApplet.EXTERNAL_QUIT); -// System.err.flush(); // important -// } - animator.stop(); - PSurfaceJOGL.this.sketch.exit(); - window.destroy(); - } - } - - final float[] hasSurfacePixelScale = window.getCurrentSurfaceScale(new float[2]); - int x = nativeEvent.getX() - (int)offsetX; - int y = nativeEvent.getY() - (int)offsetY; - if (!graphics.is2X() && 1 < hasSurfacePixelScale[0]) { - x /= 2; - y /= 2; - } - - MouseEvent me = new MouseEvent(nativeEvent, nativeEvent.getWhen(), - peAction, peModifiers, - x, y, - peButton, - peCount); - - sketch.postEvent(me); - } - - protected void nativeKeyEvent(com.jogamp.newt.event.KeyEvent nativeEvent, - int peAction) { - int peModifiers = nativeEvent.getModifiers() & - (InputEvent.SHIFT_MASK | - InputEvent.CTRL_MASK | - InputEvent.META_MASK | - InputEvent.ALT_MASK); - - short code = nativeEvent.getKeyCode(); - char keyChar; - int keyCode; - if (isPCodedKey(code)) { - keyCode = mapToPConst(code); - keyChar = PConstants.CODED; - } else { - keyCode = code; - keyChar = nativeEvent.getKeyChar(); - } - - // From http://jogamp.org/deployment/v2.1.0/javadoc/jogl/javadoc/com/jogamp/newt/event/KeyEvent.html - // public final short getKeySymbol() - // Returns the virtual key symbol reflecting the current keyboard layout. - // public final short getKeyCode() - // Returns the virtual key code using a fixed mapping to the US keyboard layout. - // In contrast to key symbol, key code uses a fixed US keyboard layout and therefore is keyboard layout independent. - // E.g. virtual key code VK_Y denotes the same physical key regardless whether keyboard layout QWERTY or QWERTZ is active. The key symbol of the former is VK_Y, where the latter produces VK_Y. - KeyEvent ke = new KeyEvent(nativeEvent, nativeEvent.getWhen(), - peAction, peModifiers, - keyChar, - keyCode); -// nativeEvent.getKeySymbol()); - - sketch.postEvent(ke); - } - - // Why do we need this mapping? - // Relevant discussion and links here: - // http://forum.jogamp.org/Newt-wrong-keycode-for-key-td4033690.html#a4033697 - // (I don't think this is a complete solution). - private static int mapToPConst(short code) { - if (code == com.jogamp.newt.event.KeyEvent.VK_UP) { - return PConstants.UP; - } else if (code == com.jogamp.newt.event.KeyEvent.VK_DOWN) { - return PConstants.DOWN; - } else if (code == com.jogamp.newt.event.KeyEvent.VK_LEFT) { - return PConstants.LEFT; - } else if (code == com.jogamp.newt.event.KeyEvent.VK_RIGHT) { - return PConstants.RIGHT; - } else if (code == com.jogamp.newt.event.KeyEvent.VK_ALT) { - return PConstants.ALT; - } else if (code == com.jogamp.newt.event.KeyEvent.VK_CONTROL) { - return PConstants.CONTROL; - } else if (code == com.jogamp.newt.event.KeyEvent.VK_SHIFT) { - return PConstants.SHIFT; - } - return code; - } - - private static boolean isPCodedKey(short code) { - return code == com.jogamp.newt.event.KeyEvent.VK_UP || - code == com.jogamp.newt.event.KeyEvent.VK_DOWN || - code == com.jogamp.newt.event.KeyEvent.VK_LEFT || - code == com.jogamp.newt.event.KeyEvent.VK_RIGHT || - code == com.jogamp.newt.event.KeyEvent.VK_ALT || - code == com.jogamp.newt.event.KeyEvent.VK_CONTROL || - code == com.jogamp.newt.event.KeyEvent.VK_SHIFT; - } - - // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - - - public void setCursor(int kind) { - System.err.println("Cursor types not supported in OpenGL, provide your cursor image"); - } - - - public void setCursor(PImage image, int hotspotX, int hotspotY) { - final Display disp = window.getScreen().getDisplay(); - disp.createNative(); - -// BufferedImage jimg = (BufferedImage)image.getNative(); -// IntBuffer buf = IntBuffer.wrap(jimg.getRGB(0, 0, jimg.getWidth(), jimg.getHeight(), -// null, 0, jimg.getWidth())); -// -// final PixelRectangle pixelrect = new PixelRectangle.GenericPixelRect(srcFmt, new Dimension(width, height), -// srcStrideBytes, srcIsGLOriented, srcPixels); -// -// PointerIcon pi = disp.createPointerIcon(PixelRectangle pixelrect, -// hotspotX, -// hotspotY); -// -// window.setPointerIcon(pi); - - } - - public void showCursor() { - window.setPointerVisible(true); - } - - public void hideCursor() { - window.setPointerVisible(false); - } -}