diff --git a/core/src/processing/opengl/PGL.java b/core/src/processing/opengl/PGL.java index a8451572b..6d37e7987 100644 --- a/core/src/processing/opengl/PGL.java +++ b/core/src/processing/opengl/PGL.java @@ -316,6 +316,11 @@ public abstract class PGL { ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN; + + public boolean presentMode = false; + public float offsetX; + public float offsetY; + /////////////////////////////////////////////////////////////// // Initialization, finalization @@ -410,7 +415,7 @@ public abstract class PGL { } - protected void requestFBOLayer() { + public void requestFBOLayer() { fboLayerRequested = true; } @@ -526,6 +531,8 @@ public abstract class PGL { if (needFBOLayer(clear0)) { if (!fboLayerCreated) createFBOLayer(); +// System.err.println("Using FBO layer"); + bindFramebufferImpl(FRAMEBUFFER, glColorFbo.get(0)); framebufferTexture2D(FRAMEBUFFER, COLOR_ATTACHMENT0, TEXTURE_2D, glColorTex.get(backTex), 0); @@ -561,14 +568,14 @@ public abstract class PGL { firstFrame = false; } - if (!USE_FBOLAYER_BY_DEFAULT) { +// if (!USE_FBOLAYER_BY_DEFAULT) { // The result of this assignment is the following: if the user requested // at some point the use of the FBO layer, but subsequently didn't // request it again, then the rendering won't render to the FBO layer if // not needed by the config, since it is slower than simple onscreen // rendering. - fboLayerRequested = false; - } +// fboLayerRequested = false; +// } } @@ -967,7 +974,7 @@ public abstract class PGL { // Making sure that the viewport matches the provided screen dimensions viewBuffer.rewind(); getIntegerv(VIEWPORT, viewBuffer); - viewport(0, 0, scrW, scrH); + viewport((int)offsetX, (int)offsetY, scrW, scrH); useProgram(ppgl.tex2DShaderProgram); diff --git a/java/libraries/lwjgl/src/processing/lwjgl/PSurfaceLWJGL.java b/java/libraries/lwjgl/src/processing/lwjgl/PSurfaceLWJGL.java index 853a149ac..92d9f97f8 100644 --- a/java/libraries/lwjgl/src/processing/lwjgl/PSurfaceLWJGL.java +++ b/java/libraries/lwjgl/src/processing/lwjgl/PSurfaceLWJGL.java @@ -9,9 +9,7 @@ import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; //import java.awt.Insets; -import java.awt.Label; import java.awt.Rectangle; -import java.awt.event.MouseAdapter; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.nio.IntBuffer; @@ -201,8 +199,13 @@ public class PSurfaceLWJGL implements PSurface { float r = ((argb >> 16) & 0xff) / 255.0f; float g = ((argb >> 8) & 0xff) / 255.0f; float b = ((argb) & 0xff) / 255.0f; - Display.setInitialBackground(r, g, b); - Display.setDisplayMode(new DisplayMode(sketchWidth, sketchHeight)); + Display.setInitialBackground(r, g, b); + if (fullScreen) { + Display.setDisplayMode(new DisplayMode(screenRect.width, screenRect.height)); + } else { + Display.setDisplayMode(new DisplayMode(sketchWidth, sketchHeight)); + } + System.err.println(sketchWidth + " " + sketchHeight); if (fullScreenRequested) { Display.setFullscreen(true); @@ -318,11 +321,28 @@ public class PSurfaceLWJGL implements PSurface { JFrame presentFrame; Canvas presentCanvas; + boolean presentMode = false; + float offsetX; + float offsetY; @Override public void placePresent(Color stopColor) { if (sketchWidth < screenRect.width || sketchHeight < screenRect.height) { - + 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(); +// try { +//// Display.setFullscreen(true); +// Display.setDisplayMode(new DisplayMode(screenRect.width, screenRect.height)); +// } catch (LWJGLException e1) { +// // TODO Auto-generated catch block +// e1.printStackTrace(); +// } + + /* presentFrame = new JFrame(displayDevice.getDefaultConfiguration()); presentFrame.getContentPane().setBackground(WINDOW_BGCOLOR); @@ -369,6 +389,7 @@ public class PSurfaceLWJGL implements PSurface { label.setSize(labelSize); label.setLocation(20, screenRect.height - labelSize.height - 20); } + */ } @@ -703,6 +724,7 @@ public class PSurfaceLWJGL implements PSurface { deinit = false; break; } +// System.err.println(Display.isActive()); } if (deinit) { @@ -738,6 +760,11 @@ public class PSurfaceLWJGL implements PSurface { Display.setResizable(resizable); } +// @Override +// public void setLocation(int x, int y) { +// Display.setLocation(x, y); +// } + @Override public void setVisible(boolean visible) { // Display.isVisible() @@ -954,8 +981,9 @@ public class PSurfaceLWJGL implements PSurface { modifiers |= Event.ALT; } - int x = Mouse.getX(); - int y = sketchHeight - Mouse.getY(); + PApplet.println(Mouse.getX(), Mouse.getY(), offsetX, offsetY); + int x = Mouse.getX() - (int)offsetX; + int y = sketchHeight - (Mouse.getY() - (int)offsetY); int button = 0; if (Mouse.isButtonDown(0)) { button = PConstants.LEFT; @@ -1095,232 +1123,5 @@ public class PSurfaceLWJGL implements PSurface { System.err.println("ERROR: Invalid LWJGL KeyCode " + code); return -1; } - - - /* - switch (code) { - case Keyboard.KEY_0: - return java.awt.event.KeyEvent.VK_0; - case Keyboard.KEY_1: - return java.awt.event.KeyEvent.VK_1; - case Keyboard.KEY_2: - return java.awt.event.KeyEvent.VK_2; - case Keyboard.KEY_3: - return java.awt.event.KeyEvent.VK_3; - case Keyboard.KEY_4: - return java.awt.event.KeyEvent.VK_4; - case Keyboard.KEY_5: - return java.awt.event.KeyEvent.VK_5; - case Keyboard.KEY_6: - return java.awt.event.KeyEvent.VK_6; - case Keyboard.KEY_7: - return java.awt.event.KeyEvent.VK_7; - case Keyboard.KEY_8: - return java.awt.event.KeyEvent.VK_8; - case Keyboard.KEY_9: - return java.awt.event.KeyEvent.VK_9; - case Keyboard.KEY_A: - return java.awt.event.KeyEvent.VK_A; - case Keyboard.KEY_B: - return java.awt.event.KeyEvent.VK_B; - case Keyboard.KEY_C: - return java.awt.event.KeyEvent.VK_C; - case Keyboard.KEY_D: - return java.awt.event.KeyEvent.VK_D; - case Keyboard.KEY_E: - return java.awt.event.KeyEvent.VK_E; - case Keyboard.KEY_F: - return java.awt.event.KeyEvent.VK_F; - case Keyboard.KEY_G: - return java.awt.event.KeyEvent.VK_G; - case Keyboard.KEY_H: - return java.awt.event.KeyEvent.VK_H; - case Keyboard.KEY_I: - return java.awt.event.KeyEvent.VK_I; - case Keyboard.KEY_J: - return java.awt.event.KeyEvent.VK_J; - case Keyboard.KEY_K: - return java.awt.event.KeyEvent.VK_K; - case Keyboard.KEY_L: - return java.awt.event.KeyEvent.VK_L; - case Keyboard.KEY_M: - return java.awt.event.KeyEvent.VK_M; - case Keyboard.KEY_N: - return java.awt.event.KeyEvent.VK_N; - case Keyboard.KEY_O: - return java.awt.event.KeyEvent.VK_O; - case Keyboard.KEY_P: - return java.awt.event.KeyEvent.VK_P; - case Keyboard.KEY_Q: - return java.awt.event.KeyEvent.VK_Q; - case Keyboard.KEY_R: - return java.awt.event.KeyEvent.VK_R; - case Keyboard.KEY_S: - return java.awt.event.KeyEvent.VK_S; - case Keyboard.KEY_T: - return java.awt.event.KeyEvent.VK_T; - case Keyboard.KEY_U: - return java.awt.event.KeyEvent.VK_U; - case Keyboard.KEY_V: - return java.awt.event.KeyEvent.VK_V; - case Keyboard.KEY_W: - return java.awt.event.KeyEvent.VK_W; - case Keyboard.KEY_X: - return java.awt.event.KeyEvent.VK_X; - case Keyboard.KEY_Y: - return java.awt.event.KeyEvent.VK_Y; - case Keyboard.KEY_Z: - return java.awt.event.KeyEvent.VK_Z; - case Keyboard.KEY_ADD: - return java.awt.event.KeyEvent.VK_ADD; - case Keyboard.KEY_APOSTROPHE: - return java.awt.event.KeyEvent.VK_ASTERISK; - case Keyboard.KEY_AT: - return java.awt.event.KeyEvent.VK_AT; - case Keyboard.KEY_BACK: - return java.awt.event.KeyEvent.VK_BACK_SPACE; - case Keyboard.KEY_BACKSLASH: - return java.awt.event.KeyEvent.VK_BACK_SLASH; - case Keyboard.KEY_CAPITAL: - return java.awt.event.KeyEvent.VK_CAPS_LOCK; - case Keyboard.KEY_CIRCUMFLEX: - return java.awt.event.KeyEvent.VK_CIRCUMFLEX; - case Keyboard.KEY_COLON: - return java.awt.event.KeyEvent.VK_COLON; - case Keyboard.KEY_COMMA: - return java.awt.event.KeyEvent.VK_COMMA; - case Keyboard.KEY_CONVERT: - return java.awt.event.KeyEvent.VK_CONVERT; - case Keyboard.KEY_DECIMAL: - return java.awt.event.KeyEvent.VK_DECIMAL; - case Keyboard.KEY_DELETE: - return java.awt.event.KeyEvent.VK_DELETE; - case Keyboard.KEY_DIVIDE: - return java.awt.event.KeyEvent.VK_DIVIDE; - case Keyboard.KEY_DOWN: - return java.awt.event.KeyEvent.VK_DOWN; - case Keyboard.KEY_END: - return java.awt.event.KeyEvent.VK_END; - case Keyboard.KEY_EQUALS: - return java.awt.event.KeyEvent.VK_EQUALS; - case Keyboard.KEY_ESCAPE: - return java.awt.event.KeyEvent.VK_ESCAPE; - case Keyboard.KEY_F1: - return java.awt.event.KeyEvent.VK_F1; - case Keyboard.KEY_F10: - return java.awt.event.KeyEvent.VK_F10; - case Keyboard.KEY_F11: - return java.awt.event.KeyEvent.VK_F11; - case Keyboard.KEY_F12: - return java.awt.event.KeyEvent.VK_F12; - case Keyboard.KEY_F13: - return java.awt.event.KeyEvent.VK_F13; - case Keyboard.KEY_F14: - return java.awt.event.KeyEvent.VK_F14; - case Keyboard.KEY_F15: - return java.awt.event.KeyEvent.VK_F15; - case Keyboard.KEY_F2: - return java.awt.event.KeyEvent.VK_F2; - case Keyboard.KEY_F3: - return java.awt.event.KeyEvent.VK_F3; - case Keyboard.KEY_F4: - return java.awt.event.KeyEvent.VK_F4; - case Keyboard.KEY_F5: - return java.awt.event.KeyEvent.VK_F5; - case Keyboard.KEY_F6: - return java.awt.event.KeyEvent.VK_F6; - case Keyboard.KEY_F7: - return java.awt.event.KeyEvent.VK_F7; - case Keyboard.KEY_F8: - return java.awt.event.KeyEvent.VK_F8; - case Keyboard.KEY_F9: - return java.awt.event.KeyEvent.VK_F9; -// case Keyboard.KEY_GRAVE: - case Keyboard.KEY_HOME: - return java.awt.event.KeyEvent.VK_HOME; - case Keyboard.KEY_INSERT: - return java.awt.event.KeyEvent.VK_INSERT; - case Keyboard.KEY_LBRACKET: - return java.awt.event.KeyEvent.VK_BRACELEFT; - case Keyboard.KEY_LCONTROL: - return java.awt.event.KeyEvent.VK_CONTROL; - case Keyboard.KEY_LEFT: - return java.awt.event.KeyEvent.VK_LEFT; - case Keyboard.KEY_LMENU: - return java.awt.event.KeyEvent.VK_ALT; - case Keyboard.KEY_LMETA: - return java.awt.event.KeyEvent.VK_META; - case Keyboard.KEY_LSHIFT: - return java.awt.event.KeyEvent.VK_SHIFT; - case Keyboard.KEY_MINUS: - return java.awt.event.KeyEvent.VK_MINUS; - case Keyboard.KEY_MULTIPLY: - return java.awt.event.KeyEvent.VK_MULTIPLY; -// case Keyboard.KEY_NEXT: - case Keyboard.KEY_NUMLOCK: - return java.awt.event.KeyEvent.VK_NUM_LOCK; - case Keyboard.KEY_NUMPAD0: - return java.awt.event.KeyEvent.VK_NUMPAD0; - case Keyboard.KEY_NUMPAD1: - return java.awt.event.KeyEvent.VK_NUMPAD1; - case Keyboard.KEY_NUMPAD2: - return java.awt.event.KeyEvent.VK_NUMPAD2; - case Keyboard.KEY_NUMPAD3: - return java.awt.event.KeyEvent.VK_NUMPAD3; - case Keyboard.KEY_NUMPAD4: - return java.awt.event.KeyEvent.VK_NUMPAD4; - case Keyboard.KEY_NUMPAD5: - return java.awt.event.KeyEvent.VK_NUMPAD5; - case Keyboard.KEY_NUMPAD6: - return java.awt.event.KeyEvent.VK_NUMPAD6; - case Keyboard.KEY_NUMPAD7: - return java.awt.event.KeyEvent.VK_NUMPAD7; - case Keyboard.KEY_NUMPAD8: - return java.awt.event.KeyEvent.VK_NUMPAD8; - case Keyboard.KEY_NUMPAD9: - return java.awt.event.KeyEvent.VK_NUMPAD9; -// case Keyboard.KEY_NUMPADCOMMA: -// case Keyboard.KEY_NUMPADENTER: -// case Keyboard.KEY_NUMPADEQUALS: - case Keyboard.KEY_PAUSE: - return java.awt.event.KeyEvent.VK_PAUSE; - case Keyboard.KEY_PERIOD: - return java.awt.event.KeyEvent.VK_PERIOD; -// case Keyboard.KEY_POWER: -// case Keyboard.KEY_PRIOR: - case Keyboard.KEY_RBRACKET: - return java.awt.event.KeyEvent.VK_BRACERIGHT; - case Keyboard.KEY_RCONTROL: - return java.awt.event.KeyEvent.VK_CONTROL; - case Keyboard.KEY_RETURN: - return java.awt.event.KeyEvent.VK_ENTER; - case Keyboard.KEY_RIGHT: - return java.awt.event.KeyEvent.VK_RIGHT; -// case Keyboard.KEY_RMENU: - case Keyboard.KEY_RMETA: - return java.awt.event.KeyEvent.VK_META; - case Keyboard.KEY_RSHIFT: - return java.awt.event.KeyEvent.VK_SHIFT; -// case Keyboard.KEY_SCROLL: - case Keyboard.KEY_SEMICOLON: - return java.awt.event.KeyEvent.VK_SEMICOLON; - case Keyboard.KEY_SLASH: - return java.awt.event.KeyEvent.VK_SLASH; -// case Keyboard.KEY_SLEEP: - case Keyboard.KEY_SPACE: - return java.awt.event.KeyEvent.VK_SPACE; - case Keyboard.KEY_STOP: - return java.awt.event.KeyEvent.VK_STOP; - case Keyboard.KEY_SUBTRACT: - return java.awt.event.KeyEvent.VK_SUBTRACT; - case Keyboard.KEY_TAB: - return java.awt.event.KeyEvent.VK_TAB; -// case Keyboard.KEY_UNDERLINE: - case Keyboard.KEY_UP: - return java.awt.event.KeyEvent.VK_UP; - default: - return 0; - } - */ } }