From 41af142324215134cb8084cec2b1009522e3124f Mon Sep 17 00:00:00 2001 From: Ioannis Tsakpinis Date: Sat, 3 Sep 2011 18:52:45 +0000 Subject: [PATCH] Added support for OpenGL 3.2 on MacOS X 10.7+. --- .../lwjgl/opengl/AWTCanvasImplementation.java | 2 +- src/java/org/lwjgl/opengl/AWTGLCanvas.java | 4 +- src/java/org/lwjgl/opengl/ContextAttribs.java | 9 +- src/java/org/lwjgl/opengl/Display.java | 57 ++++++----- .../lwjgl/opengl/DisplayImplementation.java | 14 +-- src/java/org/lwjgl/opengl/DrawableGL.java | 6 +- src/java/org/lwjgl/opengl/DrawableLWJGL.java | 2 + .../opengl/LinuxCanvasImplementation.java | 2 +- .../org/lwjgl/opengl/LinuxContextAttribs.java | 13 +-- src/java/org/lwjgl/opengl/LinuxDisplay.java | 6 +- .../opengl/MacOSXAWTGLCanvasPeerInfo.java | 4 +- .../opengl/MacOSXCanvasImplementation.java | 6 +- .../lwjgl/opengl/MacOSXCanvasPeerInfo.java | 4 +- .../lwjgl/opengl/MacOSXContextAttribs.java | 94 ------------------- .../opengl/MacOSXContextImplementation.java | 4 +- src/java/org/lwjgl/opengl/MacOSXDisplay.java | 16 ++-- .../lwjgl/opengl/MacOSXDisplayPeerInfo.java | 4 +- .../lwjgl/opengl/MacOSXPbufferPeerInfo.java | 4 +- src/java/org/lwjgl/opengl/MacOSXPeerInfo.java | 17 ++-- src/java/org/lwjgl/opengl/Pbuffer.java | 8 +- .../opengl/WindowsCanvasImplementation.java | 2 +- .../lwjgl/opengl/WindowsContextAttribs.java | 10 +- src/java/org/lwjgl/opengl/WindowsDisplay.java | 6 +- src/native/macosx/context.h | 28 +++--- src/native/macosx/context.m | 38 ++++---- ...lwjgl_opengl_MacOSXContextImplementation.m | 30 +++--- .../macosx/org_lwjgl_opengl_MacOSXPeerInfo.m | 30 +++--- 27 files changed, 174 insertions(+), 246 deletions(-) delete mode 100644 src/java/org/lwjgl/opengl/MacOSXContextAttribs.java diff --git a/src/java/org/lwjgl/opengl/AWTCanvasImplementation.java b/src/java/org/lwjgl/opengl/AWTCanvasImplementation.java index 0645ea09..a9faffd6 100644 --- a/src/java/org/lwjgl/opengl/AWTCanvasImplementation.java +++ b/src/java/org/lwjgl/opengl/AWTCanvasImplementation.java @@ -47,7 +47,7 @@ interface AWTCanvasImplementation { /** * Return an opaque handle to the canvas peer information required to create a context from it. */ - PeerInfo createPeerInfo(Canvas component, PixelFormat pixel_format) throws LWJGLException; + PeerInfo createPeerInfo(Canvas component, PixelFormat pixel_format, ContextAttribs attribs) throws LWJGLException; /** * Find a proper GraphicsConfiguration from the given GraphicsDevice and PixelFormat. diff --git a/src/java/org/lwjgl/opengl/AWTGLCanvas.java b/src/java/org/lwjgl/opengl/AWTGLCanvas.java index 62469aea..683446ae 100644 --- a/src/java/org/lwjgl/opengl/AWTGLCanvas.java +++ b/src/java/org/lwjgl/opengl/AWTGLCanvas.java @@ -107,7 +107,7 @@ public class AWTGLCanvas extends Canvas implements DrawableLWJGL, ComponentListe } } - public void setPixelFormat(final PixelFormatLWJGL pf) throws LWJGLException { + public void setPixelFormat(final PixelFormatLWJGL pf, final ContextAttribs attribs) throws LWJGLException { throw new UnsupportedOperationException(); } @@ -311,7 +311,7 @@ public class AWTGLCanvas extends Canvas implements DrawableLWJGL, ComponentListe return; try { if ( peer_info == null ) { - this.peer_info = implementation.createPeerInfo(this, pixel_format); + this.peer_info = implementation.createPeerInfo(this, pixel_format, attribs); } peer_info.lockAndGetHandle(); try { diff --git a/src/java/org/lwjgl/opengl/ContextAttribs.java b/src/java/org/lwjgl/opengl/ContextAttribs.java index 3cbc1483..7134f0b2 100644 --- a/src/java/org/lwjgl/opengl/ContextAttribs.java +++ b/src/java/org/lwjgl/opengl/ContextAttribs.java @@ -51,6 +51,10 @@ import java.nio.IntBuffer; * If the forwardCompatible * attribute is used, LWJGL will not load the deprecated functionality (as defined in the OpenGL 3.0 specification). This * means that developers can start working on cleaning up their applications without an OpenGL 3.0 complaint driver. + *

+ * This extension is not supported on MacOS X. However, in order to enable the GL 3.2 context on MacOS X 10.7 or newer, an + * instance of this class must be passed to LWJGL. The only valid configuration is new ContextAttribs(3, 2).withProfileCore(), + * anything else will be ignored. * * @author spasi */ @@ -243,14 +247,15 @@ public final class ContextAttribs { return new LinuxContextAttribs(); case LWJGLUtil.PLATFORM_WINDOWS: return new WindowsContextAttribs(); - case LWJGLUtil.PLATFORM_MACOSX: - return new MacOSXContextAttribs(); default: throw new IllegalStateException("Unsupported platform"); } } IntBuffer getAttribList() { + if ( LWJGLUtil.getPlatform() == LWJGLUtil.PLATFORM_MACOSX ) + return null; + ContextAttribsImplementation implementation = getImplementation(); int attribCount = 0; diff --git a/src/java/org/lwjgl/opengl/Display.java b/src/java/org/lwjgl/opengl/Display.java index cd6a2507..a4a53dde 100644 --- a/src/java/org/lwjgl/opengl/Display.java +++ b/src/java/org/lwjgl/opengl/Display.java @@ -93,10 +93,10 @@ public final class Display { * unlike GL, where it is typically at the bottom of the display. */ private static int y = -1; - + /** the width of the Display window */ private static int width = 0; - + /** the height of the Display window */ private static int height = 0; @@ -115,9 +115,9 @@ public final class Display { private static boolean window_created; private static boolean parent_resized; - + private static boolean window_resized; - + private static boolean window_resizable; /** Initial Background Color of Display */ @@ -305,7 +305,7 @@ public final class Display { DisplayMode mode = getEffectiveMode(); display_impl.createWindow(drawable, mode, tmp_parent, getWindowX(), getWindowY()); window_created = true; - + width = Display.getDisplayMode().getWidth(); height = Display.getDisplayMode().getHeight(); @@ -674,9 +674,9 @@ public final class Display { throw new RuntimeException(e); } } - + window_resized = !isFullscreen() && parent == null && display_impl.wasResized(); - + if ( window_resized ) { width = display_impl.getWidth(); height = display_impl.getHeight(); @@ -894,7 +894,7 @@ public final class Display { Display.drawable = drawable; try { - drawable.setPixelFormat(pixel_format); + drawable.setPixelFormat(pixel_format, attribs); try { createWindow(); try { @@ -1008,6 +1008,11 @@ public final class Display { switchDisplayMode(); final DrawableGLES drawable = new DrawableGLES() { + + public void setPixelFormat(final PixelFormatLWJGL pf, final ContextAttribs attribs) throws LWJGLException { + throw new UnsupportedOperationException(); + } + public void destroy() { synchronized ( GlobalLock.lock ) { if ( !isCreated() ) @@ -1269,11 +1274,11 @@ public final class Display { } } } - + /** * Enable or disable the Display window to be resized. * - * @param set true to make the Display window resizable; + * @param resizable set to true to make the Display window resizable; * false to disable resizing on the Display window. */ public static void setResizable(boolean resizable) { @@ -1282,65 +1287,65 @@ public final class Display { display_impl.setResizable(resizable); } } - + /** * @return true if the Display window is resizable. */ public static boolean isResizable() { return window_resizable; } - + /** * @return true if the Display window has been resized. * This value will be updated after a call to Display.update(). - * + * * This will return false if running in fullscreen or with Display.setParent(Canvas parent) */ public static boolean wasResized() { return window_resized; } - + /** * @return this method will return the width of the Display window. - * + * * If running in fullscreen mode it will return the width of the current set DisplayMode. * If running Display.setParent(Canvas parent) is being used, the width of the parent * will be returned. - * + * * This value will be updated after a call to Display.update(). */ public static int getWidth() { - + if (Display.isFullscreen()) { return Display.getDisplayMode().getWidth(); } - + if (parent != null) { return parent.getWidth(); } - + return width; } - + /** * @return this method will return the height of the Display window. - * + * * If running in fullscreen mode it will return the height of the current set DisplayMode. * If running Display.setParent(Canvas parent) is being used, the height of the parent * will be returned. - * + * * This value will be updated after a call to Display.update(). */ public static int getHeight() { - + if (Display.isFullscreen()) { return Display.getDisplayMode().getHeight(); - } - + } + if (parent != null) { return parent.getHeight(); } - + return height; } } diff --git a/src/java/org/lwjgl/opengl/DisplayImplementation.java b/src/java/org/lwjgl/opengl/DisplayImplementation.java index 51fc066e..47d171dc 100644 --- a/src/java/org/lwjgl/opengl/DisplayImplementation.java +++ b/src/java/org/lwjgl/opengl/DisplayImplementation.java @@ -108,7 +108,7 @@ interface DisplayImplementation extends InputImplementation { * Create the native PeerInfo. * @throws LWJGLException */ - PeerInfo createPeerInfo(PixelFormat pixel_format) throws LWJGLException; + PeerInfo createPeerInfo(PixelFormat pixel_format, ContextAttribs attribs) throws LWJGLException; // void destroyPeerInfo(); @@ -136,7 +136,7 @@ interface DisplayImplementation extends InputImplementation { /** * Method to create a Pbuffer */ - PeerInfo createPbuffer(int width, int height, PixelFormat pixel_format, + PeerInfo createPbuffer(int width, int height, PixelFormat pixel_format, ContextAttribs attribs, IntBuffer pixelFormatCaps, IntBuffer pBufferAttribs) throws LWJGLException; @@ -159,25 +159,25 @@ interface DisplayImplementation extends InputImplementation { * @return number of icons used. */ int setIcon(ByteBuffer[] icons); - + /** * Enable or disable the Display window to be resized. * - * @param set true to make the Display window resizable; + * @param resizable set to true to make the Display window resizable; * false to disable resizing on the Display window. */ void setResizable(boolean resizable); - + /** * @return true if the Display window has been resized since this method was last called. */ boolean wasResized(); - + /** * @return this method will return a the width of the Display window. */ int getWidth(); - + /** * @return this method will return a the height of the Display window. */ diff --git a/src/java/org/lwjgl/opengl/DrawableGL.java b/src/java/org/lwjgl/opengl/DrawableGL.java index 6462b634..b1b767c9 100644 --- a/src/java/org/lwjgl/opengl/DrawableGL.java +++ b/src/java/org/lwjgl/opengl/DrawableGL.java @@ -53,8 +53,12 @@ abstract class DrawableGL implements DrawableLWJGL { } public void setPixelFormat(final PixelFormatLWJGL pf) throws LWJGLException { + throw new UnsupportedOperationException(); + } + + public void setPixelFormat(final PixelFormatLWJGL pf, final ContextAttribs attribs) throws LWJGLException { this.pixel_format = (PixelFormat)pf; - this.peer_info = Display.getImplementation().createPeerInfo(pixel_format); + this.peer_info = Display.getImplementation().createPeerInfo(pixel_format, attribs); } public PixelFormatLWJGL getPixelFormat() { diff --git a/src/java/org/lwjgl/opengl/DrawableLWJGL.java b/src/java/org/lwjgl/opengl/DrawableLWJGL.java index a995097b..e4d989df 100644 --- a/src/java/org/lwjgl/opengl/DrawableLWJGL.java +++ b/src/java/org/lwjgl/opengl/DrawableLWJGL.java @@ -42,6 +42,8 @@ interface DrawableLWJGL extends Drawable { void setPixelFormat(PixelFormatLWJGL pf) throws LWJGLException; + void setPixelFormat(PixelFormatLWJGL pf, ContextAttribs attribs) throws LWJGLException; + PixelFormatLWJGL getPixelFormat(); /** diff --git a/src/java/org/lwjgl/opengl/LinuxCanvasImplementation.java b/src/java/org/lwjgl/opengl/LinuxCanvasImplementation.java index cdd44e79..e84d4000 100644 --- a/src/java/org/lwjgl/opengl/LinuxCanvasImplementation.java +++ b/src/java/org/lwjgl/opengl/LinuxCanvasImplementation.java @@ -76,7 +76,7 @@ final class LinuxCanvasImplementation implements AWTCanvasImplementation { } } - public PeerInfo createPeerInfo(Canvas component, PixelFormat pixel_format) throws LWJGLException { + public PeerInfo createPeerInfo(Canvas component, PixelFormat pixel_format, ContextAttribs attribs) throws LWJGLException { return new LinuxAWTGLCanvasPeerInfo(component); } diff --git a/src/java/org/lwjgl/opengl/LinuxContextAttribs.java b/src/java/org/lwjgl/opengl/LinuxContextAttribs.java index d8fa015f..2a629557 100644 --- a/src/java/org/lwjgl/opengl/LinuxContextAttribs.java +++ b/src/java/org/lwjgl/opengl/LinuxContextAttribs.java @@ -33,8 +33,6 @@ package org.lwjgl.opengl; /** * An implementation of ContextAttribs using GLX_create_context. - *

- * ---- WIP - GLX_create_context has not been defined yet ---- * * @author spasi */ @@ -42,14 +40,13 @@ final class LinuxContextAttribs implements ContextAttribsImplementation { private static final int GLX_CONTEXT_MAJOR_VERSION_ARB = 0x2091; private static final int GLX_CONTEXT_MINOR_VERSION_ARB = 0x2092; - private static final int GLX_CONTEXT_LAYER_PLANE_ARB = 0x2093; - private static final int GLX_CONTEXT_FLAGS_ARB = 0x2094; - private static final int GLX_CONTEXT_PROFILE_MASK_ARB = 0x9126; + private static final int GLX_CONTEXT_FLAGS_ARB = 0x2094; + private static final int GLX_CONTEXT_PROFILE_MASK_ARB = 0x9126; - private static final int GLX_CONTEXT_DEBUG_BIT_ARB = 0x0001; + private static final int GLX_CONTEXT_DEBUG_BIT_ARB = 0x0001; private static final int GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB = 0x0002; - private static final int GLX_CONTEXT_CORE_PROFILE_BIT_ARB = 0x00000001; + private static final int GLX_CONTEXT_CORE_PROFILE_BIT_ARB = 0x00000001; private static final int GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB = 0x00000002; LinuxContextAttribs() { @@ -64,7 +61,7 @@ final class LinuxContextAttribs implements ContextAttribsImplementation { } public int getLayerPlaneAttrib() { - return GLX_CONTEXT_LAYER_PLANE_ARB; + throw new UnsupportedOperationException(); } public int getFlagsAttrib() { diff --git a/src/java/org/lwjgl/opengl/LinuxDisplay.java b/src/java/org/lwjgl/opengl/LinuxDisplay.java index 91634a7e..28e8ddf0 100644 --- a/src/java/org/lwjgl/opengl/LinuxDisplay.java +++ b/src/java/org/lwjgl/opengl/LinuxDisplay.java @@ -516,7 +516,7 @@ final class LinuxDisplay implements DisplayImplementation { private static long getHandle(Canvas parent) throws LWJGLException { AWTCanvasImplementation awt_impl = AWTGLCanvas.createImplementation(); - LinuxPeerInfo parent_peer_info = (LinuxPeerInfo)awt_impl.createPeerInfo(parent, null); + LinuxPeerInfo parent_peer_info = (LinuxPeerInfo)awt_impl.createPeerInfo(parent, null, null); ByteBuffer parent_peer_info_handle = parent_peer_info.lockAndGetHandle(); try { return parent_peer_info.getDrawable(); @@ -757,7 +757,7 @@ final class LinuxDisplay implements DisplayImplementation { return result; } - public PeerInfo createPeerInfo(PixelFormat pixel_format) throws LWJGLException { + public PeerInfo createPeerInfo(PixelFormat pixel_format, ContextAttribs attribs) throws LWJGLException { peer_info = new LinuxDisplayPeerInfo(pixel_format); return peer_info; } @@ -1243,7 +1243,7 @@ final class LinuxDisplay implements DisplayImplementation { return false; } - public PeerInfo createPbuffer(int width, int height, PixelFormat pixel_format, + public PeerInfo createPbuffer(int width, int height, PixelFormat pixel_format, ContextAttribs attribs, IntBuffer pixelFormatCaps, IntBuffer pBufferAttribs) throws LWJGLException { return new LinuxPbufferPeerInfo(width, height, pixel_format); diff --git a/src/java/org/lwjgl/opengl/MacOSXAWTGLCanvasPeerInfo.java b/src/java/org/lwjgl/opengl/MacOSXAWTGLCanvasPeerInfo.java index 04428dd6..69e9d3d9 100644 --- a/src/java/org/lwjgl/opengl/MacOSXAWTGLCanvasPeerInfo.java +++ b/src/java/org/lwjgl/opengl/MacOSXAWTGLCanvasPeerInfo.java @@ -44,8 +44,8 @@ import java.awt.Canvas; final class MacOSXAWTGLCanvasPeerInfo extends MacOSXCanvasPeerInfo { private final Canvas component; - MacOSXAWTGLCanvasPeerInfo(Canvas component, PixelFormat pixel_format, boolean support_pbuffer) throws LWJGLException { - super(pixel_format, support_pbuffer); + MacOSXAWTGLCanvasPeerInfo(Canvas component, PixelFormat pixel_format, ContextAttribs attribs, boolean support_pbuffer) throws LWJGLException { + super(pixel_format, attribs, support_pbuffer); this.component = component; } diff --git a/src/java/org/lwjgl/opengl/MacOSXCanvasImplementation.java b/src/java/org/lwjgl/opengl/MacOSXCanvasImplementation.java index 705c33fa..6bd7b236 100644 --- a/src/java/org/lwjgl/opengl/MacOSXCanvasImplementation.java +++ b/src/java/org/lwjgl/opengl/MacOSXCanvasImplementation.java @@ -44,11 +44,11 @@ import org.lwjgl.LWJGLException; * $Id$ */ final class MacOSXCanvasImplementation implements AWTCanvasImplementation { - public PeerInfo createPeerInfo(Canvas component, PixelFormat pixel_format) throws LWJGLException { + public PeerInfo createPeerInfo(Canvas component, PixelFormat pixel_format, ContextAttribs attribs) throws LWJGLException { try { - return new MacOSXAWTGLCanvasPeerInfo(component, pixel_format, true); + return new MacOSXAWTGLCanvasPeerInfo(component, pixel_format, attribs, true); } catch (LWJGLException e) { - return new MacOSXAWTGLCanvasPeerInfo(component, pixel_format, false); + return new MacOSXAWTGLCanvasPeerInfo(component, pixel_format, attribs, false); } } diff --git a/src/java/org/lwjgl/opengl/MacOSXCanvasPeerInfo.java b/src/java/org/lwjgl/opengl/MacOSXCanvasPeerInfo.java index 46d7d79a..fdfc3d7f 100644 --- a/src/java/org/lwjgl/opengl/MacOSXCanvasPeerInfo.java +++ b/src/java/org/lwjgl/opengl/MacOSXCanvasPeerInfo.java @@ -45,8 +45,8 @@ import org.lwjgl.LWJGLException; abstract class MacOSXCanvasPeerInfo extends MacOSXPeerInfo { private final AWTSurfaceLock awt_surface = new AWTSurfaceLock(); - protected MacOSXCanvasPeerInfo(PixelFormat pixel_format, boolean support_pbuffer) throws LWJGLException { - super(pixel_format, true, true, support_pbuffer, true); + protected MacOSXCanvasPeerInfo(PixelFormat pixel_format, ContextAttribs attribs, boolean support_pbuffer) throws LWJGLException { + super(pixel_format, attribs, true, true, support_pbuffer, true); } protected void initHandle(Canvas component) throws LWJGLException { diff --git a/src/java/org/lwjgl/opengl/MacOSXContextAttribs.java b/src/java/org/lwjgl/opengl/MacOSXContextAttribs.java deleted file mode 100644 index 01a5c5a4..00000000 --- a/src/java/org/lwjgl/opengl/MacOSXContextAttribs.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (c) 2002-2008 LWJGL Project - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * * Neither the name of 'LWJGL' nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.lwjgl.opengl; - -/** - * An implementation of ContextAttribs for MacOS X. - *

- * ---- WIP - No XGL_create_context has been defined for MacOS X yet ---- - * - * @author spasi - */ -final class MacOSXContextAttribs implements ContextAttribsImplementation { - - private static final int XGL_CONTEXT_MAJOR_VERSION_ARB = 0x2091; - private static final int XGL_CONTEXT_MINOR_VERSION_ARB = 0x2092; - private static final int XGL_CONTEXT_LAYER_PLANE_ARB = 0x2093; - private static final int XGL_CONTEXT_FLAGS_ARB = 0x2094; - private static final int XGL_CONTEXT_PROFILE_MASK_ARB = 0x9126; - - private static final int XGL_CONTEXT_DEBUG_BIT_ARB = 0x0001; - private static final int XGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB = 0x0002; - - private static final int XGL_CONTEXT_CORE_PROFILE_BIT_ARB = 0x00000001; - private static final int XGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB = 0x00000002; - - MacOSXContextAttribs() { - } - - public int getMajorVersionAttrib() { - return XGL_CONTEXT_MAJOR_VERSION_ARB; - } - - public int getMinorVersionAttrib() { - return XGL_CONTEXT_MINOR_VERSION_ARB; - } - - public int getLayerPlaneAttrib() { - return XGL_CONTEXT_LAYER_PLANE_ARB; - } - - public int getFlagsAttrib() { - return XGL_CONTEXT_FLAGS_ARB; - } - - public int getDebugBit() { - return XGL_CONTEXT_DEBUG_BIT_ARB; - } - - public int getForwardCompatibleBit() { - return XGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB; - } - - public int getProfileMaskAttrib() { - return XGL_CONTEXT_PROFILE_MASK_ARB; - } - - public int getProfileCoreBit() { - return XGL_CONTEXT_CORE_PROFILE_BIT_ARB; - } - - public int getProfileCompatibilityBit() { - return XGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB; - } - -} \ No newline at end of file diff --git a/src/java/org/lwjgl/opengl/MacOSXContextImplementation.java b/src/java/org/lwjgl/opengl/MacOSXContextImplementation.java index 9386266f..fae1f7d1 100644 --- a/src/java/org/lwjgl/opengl/MacOSXContextImplementation.java +++ b/src/java/org/lwjgl/opengl/MacOSXContextImplementation.java @@ -46,13 +46,13 @@ final class MacOSXContextImplementation implements ContextImplementation { public ByteBuffer create(PeerInfo peer_info, IntBuffer attribs, ByteBuffer shared_context_handle) throws LWJGLException { ByteBuffer peer_handle = peer_info.lockAndGetHandle(); try { - return nCreate(peer_handle, attribs, shared_context_handle); + return nCreate(peer_handle, shared_context_handle); } finally { peer_info.unlock(); } } - private static native ByteBuffer nCreate(ByteBuffer peer_handle, IntBuffer attribs, ByteBuffer shared_context_handle) throws LWJGLException; + private static native ByteBuffer nCreate(ByteBuffer peer_handle, ByteBuffer shared_context_handle) throws LWJGLException; public void swapBuffers() throws LWJGLException { ContextGL current_context = ContextGL.getCurrentContext(); diff --git a/src/java/org/lwjgl/opengl/MacOSXDisplay.java b/src/java/org/lwjgl/opengl/MacOSXDisplay.java index 3a3f5f80..465775da 100644 --- a/src/java/org/lwjgl/opengl/MacOSXDisplay.java +++ b/src/java/org/lwjgl/opengl/MacOSXDisplay.java @@ -240,11 +240,11 @@ final class MacOSXDisplay implements DisplayImplementation { return frame != null && frame.getCanvas().syncIsDirty(); } - public PeerInfo createPeerInfo(PixelFormat pixel_format) throws LWJGLException { + public PeerInfo createPeerInfo(PixelFormat pixel_format, ContextAttribs attribs) throws LWJGLException { try { - return new MacOSXDisplayPeerInfo(pixel_format, true); + return new MacOSXDisplayPeerInfo(pixel_format, attribs, true); } catch (LWJGLException e) { - return new MacOSXDisplayPeerInfo(pixel_format, false); + return new MacOSXDisplayPeerInfo(pixel_format, attribs, false); } } @@ -434,10 +434,10 @@ final class MacOSXDisplay implements DisplayImplementation { return false; } - public PeerInfo createPbuffer(int width, int height, PixelFormat pixel_format, + public PeerInfo createPbuffer(int width, int height, PixelFormat pixel_format, ContextAttribs attribs, IntBuffer pixelFormatCaps, IntBuffer pBufferAttribs) throws LWJGLException { - return new MacOSXPbufferPeerInfo(width, height, pixel_format); + return new MacOSXPbufferPeerInfo(width, height, pixel_format, attribs); } public void setPbufferAttrib(PeerInfo handle, int attrib, int value) { @@ -507,13 +507,13 @@ final class MacOSXDisplay implements DisplayImplementation { public boolean isInsideWindow() { return true; } - + public void setResizable(boolean resizable) { frame.setResizable(resizable); } - + public boolean wasResized() { return canvas_listener.wasResized(); } - + } diff --git a/src/java/org/lwjgl/opengl/MacOSXDisplayPeerInfo.java b/src/java/org/lwjgl/opengl/MacOSXDisplayPeerInfo.java index 1d92d78e..4c7040e3 100644 --- a/src/java/org/lwjgl/opengl/MacOSXDisplayPeerInfo.java +++ b/src/java/org/lwjgl/opengl/MacOSXDisplayPeerInfo.java @@ -44,8 +44,8 @@ import org.lwjgl.LWJGLException; final class MacOSXDisplayPeerInfo extends MacOSXCanvasPeerInfo { private boolean locked; - MacOSXDisplayPeerInfo(PixelFormat pixel_format, boolean support_pbuffer) throws LWJGLException { - super(pixel_format, support_pbuffer); + MacOSXDisplayPeerInfo(PixelFormat pixel_format, ContextAttribs attribs, boolean support_pbuffer) throws LWJGLException { + super(pixel_format, attribs, support_pbuffer); } protected void doLockAndInitHandle() throws LWJGLException { diff --git a/src/java/org/lwjgl/opengl/MacOSXPbufferPeerInfo.java b/src/java/org/lwjgl/opengl/MacOSXPbufferPeerInfo.java index 9995bbb9..d39a528e 100644 --- a/src/java/org/lwjgl/opengl/MacOSXPbufferPeerInfo.java +++ b/src/java/org/lwjgl/opengl/MacOSXPbufferPeerInfo.java @@ -42,8 +42,8 @@ import org.lwjgl.LWJGLException; * $Id$ */ final class MacOSXPbufferPeerInfo extends MacOSXPeerInfo { - MacOSXPbufferPeerInfo(int width, int height, PixelFormat pixel_format) throws LWJGLException { - super(pixel_format, false, false, true, false); + MacOSXPbufferPeerInfo(int width, int height, PixelFormat pixel_format, ContextAttribs attribs) throws LWJGLException { + super(pixel_format, attribs, false, false, true, false); nCreate(getHandle(), width, height); } private static native void nCreate(ByteBuffer handle, int width, int height) throws LWJGLException; diff --git a/src/java/org/lwjgl/opengl/MacOSXPeerInfo.java b/src/java/org/lwjgl/opengl/MacOSXPeerInfo.java index a8618f6b..464ed343 100644 --- a/src/java/org/lwjgl/opengl/MacOSXPeerInfo.java +++ b/src/java/org/lwjgl/opengl/MacOSXPeerInfo.java @@ -43,18 +43,23 @@ import org.lwjgl.LWJGLUtil; * $Id$ */ abstract class MacOSXPeerInfo extends PeerInfo { - MacOSXPeerInfo(PixelFormat pixel_format, boolean use_display_bpp, boolean support_window, boolean support_pbuffer, boolean double_buffered) throws LWJGLException { + MacOSXPeerInfo(PixelFormat pixel_format, ContextAttribs attribs, boolean use_display_bpp, boolean support_window, boolean support_pbuffer, boolean double_buffered) throws LWJGLException { super(createHandle()); if (pixel_format.isFloatingPoint() && !LWJGLUtil.isMacOSXEqualsOrBetterThan(10, 4)) - throw new LWJGLException("Floating point pixel format requested, but is not supported"); - choosePixelFormat(pixel_format, use_display_bpp, support_window, support_pbuffer, double_buffered); + throw new LWJGLException("Floating point pixel format requested, but it requires MacOS X 10.4 or newer"); + + boolean gl32 = attribs.getMajorVersion() == 3 && attribs.getMinorVersion() == 2 && attribs.isProfileCore(); + if ( gl32 && !LWJGLUtil.isMacOSXEqualsOrBetterThan(10, 7) ) + throw new LWJGLException("OpenGL 3.2 requested, but it requires MacOS X 10.7 or newer"); + + choosePixelFormat(pixel_format, gl32, use_display_bpp, support_window, support_pbuffer, double_buffered); } private static native ByteBuffer createHandle(); - private void choosePixelFormat(PixelFormat pixel_format, boolean use_display_bpp, boolean support_window, boolean support_pbuffer, boolean double_buffered) throws LWJGLException { - nChoosePixelFormat(getHandle(), pixel_format, use_display_bpp, support_window, support_pbuffer, double_buffered); + private void choosePixelFormat(PixelFormat pixel_format, boolean gl32, boolean use_display_bpp, boolean support_window, boolean support_pbuffer, boolean double_buffered) throws LWJGLException { + nChoosePixelFormat(getHandle(), pixel_format, gl32, use_display_bpp, support_window, support_pbuffer, double_buffered); } - private static native void nChoosePixelFormat(ByteBuffer peer_info_handle, PixelFormat pixel_format, boolean use_display_bpp, boolean support_window, boolean support_pbuffer, boolean double_buffered) throws LWJGLException; + private static native void nChoosePixelFormat(ByteBuffer peer_info_handle, PixelFormat pixel_format, boolean gl32, boolean use_display_bpp, boolean support_window, boolean support_pbuffer, boolean double_buffered) throws LWJGLException; public void destroy() { nDestroy(getHandle()); diff --git a/src/java/org/lwjgl/opengl/Pbuffer.java b/src/java/org/lwjgl/opengl/Pbuffer.java index f2228298..2e88017c 100644 --- a/src/java/org/lwjgl/opengl/Pbuffer.java +++ b/src/java/org/lwjgl/opengl/Pbuffer.java @@ -216,7 +216,7 @@ public final class Pbuffer extends DrawableGL { throw new NullPointerException("Pixel format must be non-null"); this.width = width; this.height = height; - this.peer_info = createPbuffer(width, height, pixel_format, renderTexture); + this.peer_info = createPbuffer(width, height, pixel_format, attribs, renderTexture); Context shared_context = null; if ( shared_drawable == null ) shared_drawable = Display.getDrawable(); // May be null @@ -225,15 +225,15 @@ public final class Pbuffer extends DrawableGL { this.context = new ContextGL(peer_info, attribs, (ContextGL)shared_context); } - private static PeerInfo createPbuffer(int width, int height, PixelFormat pixel_format, RenderTexture renderTexture) throws LWJGLException { + private static PeerInfo createPbuffer(int width, int height, PixelFormat pixel_format, ContextAttribs attribs, RenderTexture renderTexture) throws LWJGLException { if ( renderTexture == null ) { // Though null is a perfectly valid argument, Matrox Parhelia drivers expect // a 0 terminated list, or else they crash. Supplying NULL or 0, should // cause the drivers to use default settings IntBuffer defaultAttribs = BufferUtils.createIntBuffer(1); - return Display.getImplementation().createPbuffer(width, height, pixel_format, null, defaultAttribs); + return Display.getImplementation().createPbuffer(width, height, pixel_format, attribs, null, defaultAttribs); } else - return Display.getImplementation().createPbuffer(width, height, pixel_format, + return Display.getImplementation().createPbuffer(width, height, pixel_format, attribs, renderTexture.pixelFormatCaps, renderTexture.pBufferAttribs); } diff --git a/src/java/org/lwjgl/opengl/WindowsCanvasImplementation.java b/src/java/org/lwjgl/opengl/WindowsCanvasImplementation.java index 052fd5ef..846fe069 100644 --- a/src/java/org/lwjgl/opengl/WindowsCanvasImplementation.java +++ b/src/java/org/lwjgl/opengl/WindowsCanvasImplementation.java @@ -66,7 +66,7 @@ final class WindowsCanvasImplementation implements AWTCanvasImplementation { }); } - public PeerInfo createPeerInfo(Canvas component, PixelFormat pixel_format) throws LWJGLException { + public PeerInfo createPeerInfo(Canvas component, PixelFormat pixel_format, ContextAttribs attribs) throws LWJGLException { return new WindowsAWTGLCanvasPeerInfo(component, pixel_format); } diff --git a/src/java/org/lwjgl/opengl/WindowsContextAttribs.java b/src/java/org/lwjgl/opengl/WindowsContextAttribs.java index 3273144b..11a7ac81 100644 --- a/src/java/org/lwjgl/opengl/WindowsContextAttribs.java +++ b/src/java/org/lwjgl/opengl/WindowsContextAttribs.java @@ -40,14 +40,14 @@ final class WindowsContextAttribs implements ContextAttribsImplementation { private static final int WGL_CONTEXT_MAJOR_VERSION_ARB = 0x2091; private static final int WGL_CONTEXT_MINOR_VERSION_ARB = 0x2092; - private static final int WGL_CONTEXT_LAYER_PLANE_ARB = 0x2093; - private static final int WGL_CONTEXT_FLAGS_ARB = 0x2094; - private static final int WGL_CONTEXT_PROFILE_MASK_ARB = 0x9126; + private static final int WGL_CONTEXT_LAYER_PLANE_ARB = 0x2093; + private static final int WGL_CONTEXT_FLAGS_ARB = 0x2094; + private static final int WGL_CONTEXT_PROFILE_MASK_ARB = 0x9126; - private static final int WGL_CONTEXT_DEBUG_BIT_ARB = 0x0001; + private static final int WGL_CONTEXT_DEBUG_BIT_ARB = 0x0001; private static final int WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB = 0x0002; - private static final int WGL_CONTEXT_CORE_PROFILE_BIT_ARB = 0x00000001; + private static final int WGL_CONTEXT_CORE_PROFILE_BIT_ARB = 0x00000001; private static final int WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB = 0x00000002; WindowsContextAttribs() { diff --git a/src/java/org/lwjgl/opengl/WindowsDisplay.java b/src/java/org/lwjgl/opengl/WindowsDisplay.java index ce34dbf4..bbca5ed4 100644 --- a/src/java/org/lwjgl/opengl/WindowsDisplay.java +++ b/src/java/org/lwjgl/opengl/WindowsDisplay.java @@ -247,7 +247,7 @@ final class WindowsDisplay implements DisplayImplementation { private static long getHwnd(Canvas parent) throws LWJGLException { AWTCanvasImplementation awt_impl = AWTGLCanvas.createImplementation(); - WindowsPeerInfo parent_peer_info = (WindowsPeerInfo)awt_impl.createPeerInfo(parent, null); + WindowsPeerInfo parent_peer_info = (WindowsPeerInfo)awt_impl.createPeerInfo(parent, null, null); ByteBuffer parent_peer_info_handle = parent_peer_info.lockAndGetHandle(); try { return parent_peer_info.getHwnd(); @@ -463,7 +463,7 @@ final class WindowsDisplay implements DisplayImplementation { return saved; } - public PeerInfo createPeerInfo(PixelFormat pixel_format) throws LWJGLException { + public PeerInfo createPeerInfo(PixelFormat pixel_format, ContextAttribs attribs) throws LWJGLException { peer_info = new WindowsDisplayPeerInfo(false); return peer_info; } @@ -657,7 +657,7 @@ final class WindowsDisplay implements DisplayImplementation { return ((WindowsPbufferPeerInfo)handle).isBufferLost(); } - public PeerInfo createPbuffer(int width, int height, PixelFormat pixel_format, + public PeerInfo createPbuffer(int width, int height, PixelFormat pixel_format, ContextAttribs attribs, IntBuffer pixelFormatCaps, IntBuffer pBufferAttribs) throws LWJGLException { return new WindowsPbufferPeerInfo(width, height, pixel_format, pixelFormatCaps, pBufferAttribs); diff --git a/src/native/macosx/context.h b/src/native/macosx/context.h index 4012c4ba..188a0b32 100644 --- a/src/native/macosx/context.h +++ b/src/native/macosx/context.h @@ -1,31 +1,31 @@ -/* +/* * Copyright (c) 2002-2008 LWJGL Project * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are + * modification, are permitted provided that the following conditions are * met: - * - * * Redistributions of source code must retain the above copyright + * + * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * * Neither the name of 'LWJGL' nor the names of - * its contributors may be used to endorse or promote products derived + * * Neither the name of 'LWJGL' nor the names of + * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ @@ -57,5 +57,5 @@ typedef struct { }; } MacOSXPeerInfo; -NSOpenGLPixelFormat *choosePixelFormat(JNIEnv *env, jobject pixel_format, bool use_display_bpp, bool support_window, bool support_pbuffer, bool double_buffered); +NSOpenGLPixelFormat *choosePixelFormat(JNIEnv *env, jobject pixel_format, bool gl32, bool use_display_bpp, bool support_window, bool support_pbuffer, bool double_buffered); #endif diff --git a/src/native/macosx/context.m b/src/native/macosx/context.m index f737c0a3..ce75d346 100644 --- a/src/native/macosx/context.m +++ b/src/native/macosx/context.m @@ -1,31 +1,31 @@ -/* +/* * Copyright (c) 2002-2008 LWJGL Project * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are + * modification, are permitted provided that the following conditions are * met: - * - * * Redistributions of source code must retain the above copyright + * + * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * * Neither the name of 'LWJGL' nor the names of - * its contributors may be used to endorse or promote products derived + * * Neither the name of 'LWJGL' nor the names of + * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ @@ -51,12 +51,12 @@ void *extgl_GetProcAddress(const char *name) { return address; } -static CFBundleRef loadFramework(JNIEnv *env) { +static CFBundleRef loadFramework(JNIEnv *env) { CFStringRef framework_path = CFSTR("/System/Library/Frameworks/OpenGL.framework"); if (framework_path == NULL) { printfDebugJava(env, "Failed to allocate string"); return NULL; - } + } CFURLRef url = CFURLCreateWithFileSystemPath(NULL, framework_path, kCFURLPOSIXPathStyle, TRUE); if (url == NULL) { printfDebugJava(env, "Failed to allocate URL"); @@ -87,14 +87,14 @@ void extgl_Close(void) } } -NSOpenGLPixelFormat *choosePixelFormat(JNIEnv *env, jobject pixel_format, bool use_display_bpp, bool support_window, bool support_pbuffer, bool double_buffered) { +NSOpenGLPixelFormat *choosePixelFormat(JNIEnv *env, jobject pixel_format, bool gl32, bool use_display_bpp, bool support_window, bool support_pbuffer, bool double_buffered) { int bpp; jclass cls_pixel_format = (*env)->GetObjectClass(env, pixel_format); if (use_display_bpp) bpp = CGDisplayBitsPerPixel(kCGDirectMainDisplay); else bpp = (int)(*env)->GetIntField(env, pixel_format, (*env)->GetFieldID(env, cls_pixel_format, "bpp", "I")); - + int alpha = (int)(*env)->GetIntField(env, pixel_format, (*env)->GetFieldID(env, cls_pixel_format, "alpha", "I")); int depth = (int)(*env)->GetIntField(env, pixel_format, (*env)->GetFieldID(env, cls_pixel_format, "depth", "I")); int stencil = (int)(*env)->GetIntField(env, pixel_format, (*env)->GetFieldID(env, cls_pixel_format, "stencil", "I")); @@ -125,6 +125,10 @@ NSOpenGLPixelFormat *choosePixelFormat(JNIEnv *env, jobject pixel_format, bool u putAttrib(&attribs, NSOpenGLPFASampleBuffers); putAttrib(&attribs, samples > 0 ? 1 : 0); putAttrib(&attribs, NSOpenGLPFASamples); putAttrib(&attribs, samples); putAttrib(&attribs, NSOpenGLPFAAuxBuffers); putAttrib(&attribs, num_aux_buffers); + if (gl32) { + putAttrib(&attribs, 99); // NSOpenGLPFAOpenGLProfile + putAttrib(&attribs, 0x3200); // NSOpenGLProfileVersion3_2Core + } if (support_window) putAttrib(&attribs, NSOpenGLPFAWindow); if (support_pbuffer) diff --git a/src/native/macosx/org_lwjgl_opengl_MacOSXContextImplementation.m b/src/native/macosx/org_lwjgl_opengl_MacOSXContextImplementation.m index b8be99a9..5de60559 100644 --- a/src/native/macosx/org_lwjgl_opengl_MacOSXContextImplementation.m +++ b/src/native/macosx/org_lwjgl_opengl_MacOSXContextImplementation.m @@ -1,31 +1,31 @@ -/* +/* * Copyright (c) 2002-2008 LWJGL Project * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are + * modification, are permitted provided that the following conditions are * met: - * - * * Redistributions of source code must retain the above copyright + * + * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * * Neither the name of 'LWJGL' nor the names of - * its contributors may be used to endorse or promote products derived + * * Neither the name of 'LWJGL' nor the names of + * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ @@ -49,7 +49,7 @@ typedef struct { } MacOSXContext; JNIEXPORT jobject JNICALL Java_org_lwjgl_opengl_MacOSXContextImplementation_nCreate - (JNIEnv *env, jclass clazz, jobject peer_info_handle, jobject attribs, jobject shared_context_handle) { + (JNIEnv *env, jclass clazz, jobject peer_info_handle, jobject shared_context_handle) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; MacOSXPeerInfo *peer_info; MacOSXContext *shared_context_info; @@ -75,7 +75,7 @@ JNIEXPORT jobject JNICALL Java_org_lwjgl_opengl_MacOSXContextImplementation_nCre context_info->context = context; context_info->peer_info = peer_info; [pool release]; - return context_handle; + return context_handle; } JNIEXPORT void JNICALL Java_org_lwjgl_opengl_MacOSXContextImplementation_nSwapBuffers diff --git a/src/native/macosx/org_lwjgl_opengl_MacOSXPeerInfo.m b/src/native/macosx/org_lwjgl_opengl_MacOSXPeerInfo.m index 507a42f0..df70d00d 100644 --- a/src/native/macosx/org_lwjgl_opengl_MacOSXPeerInfo.m +++ b/src/native/macosx/org_lwjgl_opengl_MacOSXPeerInfo.m @@ -1,31 +1,31 @@ -/* +/* * Copyright (c) 2002-2008 LWJGL Project * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are + * modification, are permitted provided that the following conditions are * met: - * - * * Redistributions of source code must retain the above copyright + * + * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * * Neither the name of 'LWJGL' nor the names of - * its contributors may be used to endorse or promote products derived + * * Neither the name of 'LWJGL' nor the names of + * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ @@ -52,10 +52,10 @@ JNIEXPORT jobject JNICALL Java_org_lwjgl_opengl_MacOSXPeerInfo_createHandle } JNIEXPORT void JNICALL Java_org_lwjgl_opengl_MacOSXPeerInfo_nChoosePixelFormat - (JNIEnv *env, jclass clazz, jobject peer_info_handle, jobject pixel_format, jboolean use_display_bpp, jboolean support_window, jboolean support_pbuffer, jboolean double_buffered) { + (JNIEnv *env, jclass clazz, jobject peer_info_handle, jobject pixel_format, jboolean gl32, jboolean use_display_bpp, jboolean support_window, jboolean support_pbuffer, jboolean double_buffered) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; MacOSXPeerInfo *peer_info = (MacOSXPeerInfo *)(*env)->GetDirectBufferAddress(env, peer_info_handle); - NSOpenGLPixelFormat *macosx_pixel_format = choosePixelFormat(env, pixel_format, use_display_bpp, support_window, support_pbuffer, double_buffered); + NSOpenGLPixelFormat *macosx_pixel_format = choosePixelFormat(env, pixel_format, gl32, use_display_bpp, support_window, support_pbuffer, double_buffered); if (pixel_format == nil) { throwException(env, "Could not find pixel format"); return;