Jogamp
Fix: Locking/Threading; Common IntIntHashMap and Buffers; Fix: glMap*Buffer*; GLX...
authorSven Gothel <sgothel@jausoft.com>
Thu, 10 Jun 2010 07:35:06 +0000 (09:35 +0200)
committerSven Gothel <sgothel@jausoft.com>
Thu, 10 Jun 2010 07:35:06 +0000 (09:35 +0200)
TODO: Compile and test on MacOSX ..

Fix:
=====

Multithreading/Locking:
    See jogl/doc/Implementation/MultiThreading.txt

    - Locking layer is not platform agnostic, ie GLContextImpl, GLDrawableImpl, ..
      and NEWT: Window/Display
    - No more use of JAWT global lock necessary, removed.
    - No need for X11 Display lock, on the contrary,
      this made the NV driver hang.
    - Use common window/surface lock
    - All NativeWindow surfaceLock's are recursive now

glMapBuffer: If size is 0, don't do cont with the native call.
glMapBufferRange: Fix capacity.
glNamedBufferDataEXT: Track the size.
glMapNamedBufferEXT: Manual impl. - use the tracked size

glXGetVisualFromFBConfig, glXChooseFBConfig, glXChooseVisual: Instead of
ignoring and implement a renamed version (*Copied), we just use ManualImplementation
for the proper copy-result code.

DesktopGLDynamicLookupHelper: Initialize _hasGLBinding* attributes
in the determing loadGLJNILibrary() method, which is called by super().
Otherwise static init will overwrite them after the super() call.

X11GLXDrawableFactory: Don't release anything at shutdown (removed sharedContext.destroy()),
since this caused a freeze/SEGV sometimes.

Fixed NEWT's reparentWindow() functionality incl NewtCanvasAWT usage.
    - Native: if not visible, don't focus, etc
    - NewtCanvasAWT: Use the container size to start with
    - Run the command on the EDT

Using GlueGen's new DynamicLibraryBundle utility:
  - X11, Windows and MacOSX OpenGL adapted to DynamicLibraryBundleInfo.
  - X11GLXDynamicLookupHelper -> X11GLXDynamicLibraryBundleInfo
    - Remove all path from lib names.
    - GL order:  libGL.so.1, libGL.so, GL
    - shallLinkGlobal: true -> to server some 'old' DRI systems
        -> http://dri.sourceforge.net/doc/DRIuserguide.html
    - shallLookupGlobal: false
    - Try both : glXGetProcAddressARB and glXGetProcAddress
    - Using bootstrap: GLX.glXGetProcAddress(long glxGetProcAddressHandle, String glFuncName)

Found the issue with LIBGL_DRIVERS_PATH, ie if not set
no valid GL instance can be found (ie ATI fglrx/DRI).
This may happen if using a differen user than the desktop user
for whom the env var is set within some /etc/X11/Xsession.d/ script.

Enhancements:
=============

GLBufferSizeTracker: Use IntIntHashMap and add DirectState size tracking.
GLBufferStateTracker: Use IntIntHashMap.
GLStateTracker: Use IntIntHashMap.

GLDynamicLookupHelper: More generic (global loading/lookup and GetProcAddress function name list),
                       remove redundant code.
   FIXME:
    MacOSXCGLDynamicLookupHelper:
        - Not tested
        - Not using NSImage lookup anymore as recommended by OSX API Doc,
          so dlsym is used always (to be tested)

    WindowsWGLDynamicLookupHelper:
        - Not tested

GLX/WGL/CgGL is all runtime-dynamic as now, ie loaded and looked-up at runtime,
no compile time dependencies to GL anymore, nor a need to specify CgGL.

Split up WGL in GDI and WGL, to allow proper dynamic runtime linkage of OpenGL32
while using static binding to GDI32

NEWT events generated by native code are enqueued and not send directly.
This should ease locking mechanisms .. if any are necessary.

NEWT: More platform specific code moved to *Impl method,
simplifying the generic code of the superclass and impl protocol.

Cleanup:
=========

Replace all InternalBufferUtil's with com.jogamp.common.nio.Buffers

Removed all InternalBufferUtil's from repository

Removed GLContextImpl notion of 'optimized' surface locking,
where the surface gets unlocked during makeCurrent/release.
This just makes no sense and would impact multithreading in a horrible way.

168 files changed:
doc/Implementation/MultiThreading.txt [new file with mode: 0644]
make/build-jogl.xml
make/config/jogl/cg-common-CustomJavaCode.java
make/config/jogl/cg-common.cfg
make/config/jogl/cgl-macosx.cfg
make/config/jogl/egl.cfg
make/config/jogl/gdi-CustomCCode.c [moved from make/config/jogl/wgl-CustomCCode.c with 100% similarity]
make/config/jogl/gdi-win32.cfg [new file with mode: 0644]
make/config/jogl/gl-common.cfg
make/config/jogl/gl-desktop.cfg
make/config/jogl/gl-es1.cfg
make/config/jogl/gl-es2.cfg
make/config/jogl/gl-gl2es12.cfg
make/config/jogl/gl-gl4bc.cfg
make/config/jogl/gl-impl-CustomCCode-gl4bc.c
make/config/jogl/gl-impl-CustomJavaCode-gl2es12.java
make/config/jogl/gl-impl-CustomJavaCode-gl4.java [deleted file]
make/config/jogl/gl-impl-CustomJavaCode-gl4bc.java
make/config/jogl/gl-impl-CustomJavaCode-gles1.java
make/config/jogl/gl-impl-CustomJavaCode-gles2.java
make/config/jogl/gl3-desktop.cfg
make/config/jogl/glu-CustomJavaCode-base.java
make/config/jogl/glu-CustomJavaCode-gl2.java
make/config/jogl/glu-CustomJavaCode-gl2es1.java
make/config/jogl/glx-CustomCCode.c
make/config/jogl/glx-CustomJavaCode.java
make/config/jogl/glx-x11.cfg
make/config/jogl/glxext.cfg
make/config/jogl/wgl-win32.cfg
make/config/jogl/wglext.cfg
make/config/nativewindow/jawt-CustomJavaCode.java
make/config/nativewindow/x11-CustomJavaCode.java
make/jogl.compiler.xml
make/jogl.properties
make/nativewindow.compiler.xml
make/newt.compiler.xml
make/scripts/java-run-all.sh
make/scripts/java-run-newt.sh
make/scripts/make.jogl.all.linux-x86.sh
make/scripts/make.jogl.all.linux-x86_64.sh
make/scripts/make.jogl.all.win32.bat
make/scripts/make.jogl.all.win64.bat
make/stub_includes/egl/window-system1.c [moved from make/stub_includes/egl/window-system.c with 100% similarity]
make/stub_includes/macosx/window-system1.c [moved from make/stub_includes/macosx/window-system.c with 100% similarity]
make/stub_includes/win32/window-system0.c [moved from make/stub_includes/win32/window-system.c with 100% similarity]
make/stub_includes/win32/window-system1.c [new file with mode: 0644]
make/stub_includes/win32/windows.h
make/stub_includes/win32/wingdi.h
make/stub_includes/win32/winwgl.h [new file with mode: 0644]
make/stub_includes/x11/window-system1.c [moved from make/stub_includes/x11/window-system.c with 100% similarity]
src/jogl/classes/com/jogamp/opengl/cg/CgDynamicLibraryBundleInfo.java [new file with mode: 0644]
src/jogl/classes/com/jogamp/opengl/impl/DesktopGLDynamicLibraryBundleInfo.java [new file with mode: 0755]
src/jogl/classes/com/jogamp/opengl/impl/DesktopGLDynamicLookupHelper.java
src/jogl/classes/com/jogamp/opengl/impl/GLBufferSizeTracker.java
src/jogl/classes/com/jogamp/opengl/impl/GLBufferStateTracker.java
src/jogl/classes/com/jogamp/opengl/impl/GLContextImpl.java
src/jogl/classes/com/jogamp/opengl/impl/GLDrawableFactoryImpl.java
src/jogl/classes/com/jogamp/opengl/impl/GLDrawableHelper.java
src/jogl/classes/com/jogamp/opengl/impl/GLDrawableImpl.java
src/jogl/classes/com/jogamp/opengl/impl/GLDynamicLibraryBundleInfo.java [new file with mode: 0755]
src/jogl/classes/com/jogamp/opengl/impl/GLDynamicLookupHelper.java
src/jogl/classes/com/jogamp/opengl/impl/GLJNILibLoader.java
src/jogl/classes/com/jogamp/opengl/impl/GLPbufferImpl.java
src/jogl/classes/com/jogamp/opengl/impl/GLStateTracker.java
src/jogl/classes/com/jogamp/opengl/impl/InternalBufferUtil.java.javame_cdc_fp [deleted file]
src/jogl/classes/com/jogamp/opengl/impl/InternalBufferUtil.java.javase [deleted file]
src/jogl/classes/com/jogamp/opengl/impl/ProjectFloat.java
src/jogl/classes/com/jogamp/opengl/impl/egl/EGLContext.java
src/jogl/classes/com/jogamp/opengl/impl/egl/EGLDrawable.java
src/jogl/classes/com/jogamp/opengl/impl/egl/EGLDrawableFactory.java
src/jogl/classes/com/jogamp/opengl/impl/egl/EGLDynamicLibraryBundleInfo.java [moved from src/jogl/classes/com/jogamp/opengl/impl/egl/EGLDynamicLookupHelper.java with 50% similarity]
src/jogl/classes/com/jogamp/opengl/impl/egl/EGLES1DynamicLibraryBundleInfo.java [moved from src/jogl/classes/com/jogamp/opengl/impl/egl/EGLES1DynamicLookupHelper.java with 71% similarity]
src/jogl/classes/com/jogamp/opengl/impl/egl/EGLES2DynamicLibraryBundleInfo.java [moved from src/jogl/classes/com/jogamp/opengl/impl/egl/EGLES2DynamicLookupHelper.java with 71% similarity]
src/jogl/classes/com/jogamp/opengl/impl/egl/EGLExternalContext.java
src/jogl/classes/com/jogamp/opengl/impl/egl/EGLOnscreenContext.java
src/jogl/classes/com/jogamp/opengl/impl/egl/EGLOnscreenDrawable.java
src/jogl/classes/com/jogamp/opengl/impl/gl2/ProjectDouble.java
src/jogl/classes/com/jogamp/opengl/impl/glu/mipmap/BuildMipmap.java
src/jogl/classes/com/jogamp/opengl/impl/glu/mipmap/Mipmap.java
src/jogl/classes/com/jogamp/opengl/impl/glu/mipmap/ScaleInternal.java
src/jogl/classes/com/jogamp/opengl/impl/macosx/cgl/MacOSXCGLContext.java
src/jogl/classes/com/jogamp/opengl/impl/macosx/cgl/MacOSXCGLDrawable.java
src/jogl/classes/com/jogamp/opengl/impl/macosx/cgl/MacOSXCGLDrawableFactory.java
src/jogl/classes/com/jogamp/opengl/impl/macosx/cgl/MacOSXCGLDynamicLibraryBundleInfo.java [moved from src/jogl/classes/com/jogamp/opengl/impl/macosx/cgl/MacOSXCGLDynamicLookupHelper.java with 57% similarity]
src/jogl/classes/com/jogamp/opengl/impl/macosx/cgl/MacOSXExternalCGLContext.java
src/jogl/classes/com/jogamp/opengl/impl/macosx/cgl/MacOSXOnscreenCGLContext.java
src/jogl/classes/com/jogamp/opengl/impl/macosx/cgl/MacOSXPbufferCGLContext.java
src/jogl/classes/com/jogamp/opengl/impl/macosx/cgl/MacOSXPbufferCGLDrawable.java
src/jogl/classes/com/jogamp/opengl/impl/macosx/cgl/awt/MacOSXJava2DCGLContext.java
src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsDummyWGLDrawable.java
src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsExternalWGLContext.java
src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsExternalWGLDrawable.java
src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsOffscreenWGLDrawable.java
src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsOnscreenWGLContext.java
src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsPbufferWGLContext.java
src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsPbufferWGLDrawable.java
src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLContext.java
src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLDrawable.java
src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLDrawableFactory.java
src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLDynamicLibraryBundleInfo.java [new file with mode: 0644]
src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLGraphicsConfiguration.java
src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLGraphicsConfigurationFactory.java
src/jogl/classes/com/jogamp/opengl/impl/x11/glx/GLXUtil.java
src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11DummyGLXDrawable.java
src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11ExternalGLXContext.java
src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11ExternalGLXDrawable.java
src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXContext.java
src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXDrawable.java
src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXDrawableFactory.java
src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXDynamicLibraryBundleInfo.java [moved from src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLDynamicLookupHelper.java with 55% similarity]
src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXDynamicLookupHelper.java [deleted file]
src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXGraphicsConfiguration.java
src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXGraphicsConfigurationFactory.java
src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11OffscreenGLXContext.java
src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11OffscreenGLXDrawable.java
src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11OnscreenGLXContext.java
src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11OnscreenGLXDrawable.java
src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11PbufferGLXContext.java
src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11PbufferGLXDrawable.java
src/jogl/classes/com/jogamp/opengl/impl/x11/glx/awt/X11AWTGLXGraphicsConfigurationFactory.java
src/jogl/classes/com/jogamp/openmax/OMXInstance.java
src/jogl/classes/javax/media/opengl/GLContext.java
src/jogl/classes/javax/media/opengl/GLDrawable.java
src/jogl/classes/javax/media/opengl/GLDrawableFactory.java
src/jogl/classes/javax/media/opengl/GLProfile.java
src/jogl/classes/javax/media/opengl/awt/GLCanvas.java
src/jogl/classes/javax/media/opengl/awt/GLJPanel.java
src/junit/com/jogamp/test/junit/jogl/acore/TestGLProfile01NEWT.java
src/junit/com/jogamp/test/junit/newt/TestGLWindows01NEWT.java
src/junit/com/jogamp/test/junit/newt/TestParenting01AWT.java
src/junit/com/jogamp/test/junit/newt/TestParenting01NEWT.java
src/junit/com/jogamp/test/junit/newt/TestParentingAWT.java [new file with mode: 0755]
src/nativewindow/classes/com/jogamp/nativewindow/impl/InternalBufferUtil.java [deleted file]
src/nativewindow/classes/com/jogamp/nativewindow/impl/LockingNativeWindowFactory.java [deleted file]
src/nativewindow/classes/com/jogamp/nativewindow/impl/NativeWindowFactoryImpl.java
src/nativewindow/classes/com/jogamp/nativewindow/impl/NullWindow.java
src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java
src/nativewindow/classes/com/jogamp/nativewindow/impl/jawt/JAWTUtil.java
src/nativewindow/classes/com/jogamp/nativewindow/impl/jawt/JAWTWindow.java
src/nativewindow/classes/com/jogamp/nativewindow/impl/jawt/x11/X11JAWTWindow.java
src/nativewindow/classes/com/jogamp/nativewindow/impl/x11/X11GraphicsConfigurationFactory.java
src/nativewindow/classes/com/jogamp/nativewindow/impl/x11/X11Util.java
src/nativewindow/classes/com/jogamp/nativewindow/impl/x11/awt/X11AWTNativeWindowFactory.java [deleted file]
src/nativewindow/classes/javax/media/nativewindow/AbstractGraphicsDevice.java
src/nativewindow/classes/javax/media/nativewindow/DefaultGraphicsDevice.java
src/nativewindow/classes/javax/media/nativewindow/NativeWindow.java
src/nativewindow/classes/javax/media/nativewindow/NativeWindowFactory.java
src/nativewindow/classes/javax/media/nativewindow/ToolkitLock.java [deleted file]
src/nativewindow/classes/javax/media/nativewindow/x11/X11GraphicsDevice.java
src/nativewindow/classes/javax/media/nativewindow/x11/X11GraphicsScreen.java
src/nativewindow/native/x11/Xmisc.c
src/newt/classes/com/jogamp/newt/Display.java
src/newt/classes/com/jogamp/newt/Window.java
src/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java
src/newt/classes/com/jogamp/newt/event/awt/AWTParentWindowAdapter.java
src/newt/classes/com/jogamp/newt/event/awt/AWTWindowAdapter.java
src/newt/classes/com/jogamp/newt/impl/awt/AWTWindow.java
src/newt/classes/com/jogamp/newt/impl/intel/gdl/Window.java
src/newt/classes/com/jogamp/newt/impl/macosx/MacWindow.java
src/newt/classes/com/jogamp/newt/impl/opengl/kd/KDWindow.java
src/newt/classes/com/jogamp/newt/impl/windows/WindowsWindow.java
src/newt/classes/com/jogamp/newt/impl/x11/X11Display.java
src/newt/classes/com/jogamp/newt/impl/x11/X11Window.java
src/newt/classes/com/jogamp/newt/opengl/GLWindow.java
src/newt/native/KDWindow.c
src/newt/native/NewtMacWindow.m
src/newt/native/WindowsWindow.c
src/newt/native/X11Window.c

diff --git a/doc/Implementation/MultiThreading.txt b/doc/Implementation/MultiThreading.txt
new file mode 100644 (file)
index 0000000..fb586e1
--- /dev/null
@@ -0,0 +1,94 @@
+
+Locking
+=========
+
+Interface AbstractGraphicsDevice: lock() / unlock()
+
+    - Used to exclusively lock the device
+    - Current implementations: 
+        - X11GraphicsDevice: XLockDisplay/XUnlockDisplay
+
+    - Shall only be used, where race conditions may happen with
+      device toolkit calls in regards to windowing resources,
+      ie create/destroy .. etc
+
+    - We call XInitThreads ASAP and a global X11 lock 
+      is not necessary.
+
+    - To ensure XInitThreads can be issued at first,
+      GLProfile.initSingleton() shall be called
+      in the static initializer block of the main class.
+
+      TODO: 
+      However, we have to investigate how to incooperate this
+      with Applet loading.
+      If such call ain't possible, a workaround could be to not
+      call XInitThreads() and utilize AWT locks.
+
+Interface NativeWindow: lockSurface() / unlockSurface()
+
+    - Used to exclusively lock the surface
+
+    - Implementations: 
+
+        - JAWTWindow:
+            - Recursive Lock
+            - JAWT SurfaceLock
+
+        - NEWT Window:
+            - Recursive Lock
+            - May have platform specific surface lock, currently: None
+
+
+GLContext/GLDrawable Locking:
+
+    - MakeCurrent: NativeWindow:lockSurface()
+    - Release: NativeWindow:unlockSurface()
+
+    - Create/Destroy/Realize/Swap: 
+        - NativeWindow:lockSurface()
+            - CreateImpl/DestroyImpl/Realize/Swap
+        - NativeWindow:unlockSurface()
+
+    - The Window impl. class shall lock the window recursive lock
+      for all modifying operations.
+      This should be the same lock as surfaceHandle!
+
+
+Summary:
+
+    Locking is implemented in the platform agnostic code layer.
+
+    Locks and Order:
+        1: - NativeWindow Surface/Window Lock
+            - Locked: 
+                - [makeCurrent .. release]
+                - create/destroy  
+
+    GLContextImpl:
+        - makeCurrent
+            - Surface i       - out only in error
+
+        - release
+            - Surface o - makeCurrentImpl
+
+        - create
+            - Surface i/o
+
+        - destroy
+            - Surface i/o
+
+        - copy
+            - Surface i/o
+
+        - setSwapIntervalImpl
+            - Surface i/o
+
+
+    GLDrawableImpl
+        - setRealizedImpl
+            - Surface i/o
+
+        - swapBuffersImpl
+            - [Surface i/o] - if not locked already
+
index 9203542..74b9da0 100644 (file)
    - Optional properties:
    -   -Djogl.cg=1 when combined with the build or javadoc targets will cause
    -               the experimental binding to NVidia's Cg language to be built.
-   -               Then you need to define the location of your CG libraries:
-   -               -Dwindows.cg.lib32=<PATH> for Windows x32 and
-   -               -Dwindows.cg.lib64=<PATH> for Windows x64 and
-   -               -Dx11.cg.lib32=<PATH> for X11/Unix x32
-   -               -Dx11.cg.lib64=<PATH> for X11/Unix x64
    -
    - Thanks to Rob Grzywinski and Artur Biesiadowski for the bulk of the
    - ANT build, including the GlueGen and StaticGLInfo tasks, the building of
 
     <target name="setup.javacdc">
         <copy file="../src/jogl/classes/com/jogamp/opengl/impl/SystemUtil.java.javame_cdc_fp" tofile="${src.generated.java-cdc}/com/jogamp/opengl/impl/SystemUtil.java" />
-        <copy file="../src/jogl/classes/com/jogamp/opengl/impl/InternalBufferUtil.java.javame_cdc_fp" tofile="${src.generated.java-cdc}/com/jogamp/opengl/impl/InternalBufferUtil.java" />
         <copy file="../src/jogl/classes/com/jogamp/opengl/util/texture/TextureIO.java.javame_cdc_fp" tofile="${src.generated.java-cdc}/com/jogamp/opengl/util/texture/TextureIO.java" />
         <copy file="../src/jogl/classes/com/jogamp/opengl/util/texture/spi/DDSImage.java.javame_cdc_fp" tofile="${src.generated.java-cdc}/com/jogamp/opengl/util/texture/spi/DDSImage.java" />
         <copy file="../src/jogl/classes/com/jogamp/opengl/util/texture/spi/TGAImage.java.javame_cdc_fp" tofile="${src.generated.java-cdc}/com/jogamp/opengl/util/texture/spi/TGAImage.java" />
 
     <target name="setup.javase">
         <copy file="../src/jogl/classes/com/jogamp/opengl/impl/SystemUtil.java.javase" tofile="${src.generated.java}/com/jogamp/opengl/impl/SystemUtil.java" />
-        <copy file="../src/jogl/classes/com/jogamp/opengl/impl/InternalBufferUtil.java.javase" tofile="${src.generated.java}/com/jogamp/opengl/impl/InternalBufferUtil.java" />
         <copy file="../src/jogl/classes/com/jogamp/opengl/util/texture/TextureIO.java.javase" tofile="${src.generated.java}/com/jogamp/opengl/util/texture/TextureIO.java" />
         <copy file="../src/jogl/classes/com/jogamp/opengl/util/texture/spi/DDSImage.java.javase" tofile="${src.generated.java}/com/jogamp/opengl/util/texture/spi/DDSImage.java" />
         <copy file="../src/jogl/classes/com/jogamp/opengl/util/texture/spi/TGAImage.java.javase" tofile="${src.generated.java}/com/jogamp/opengl/util/texture/spi/TGAImage.java" />
         <echo message="Generating EGL implementation class" />
         <antcall target="java.generate.copy2temp" inheritRefs="true" />
         <dirset id="stub.includes.fileset.platform" dir="." includes="${stub.includes}/${window.es.system}/** ${stub.includes}/common/**" />
-        <gluegen src="${stub.includes}/${window.es.system}/window-system.c"
+        <gluegen src="${stub.includes}/${window.es.system}/window-system1.c"
                  outputRootDir="${build.jogl}"
                  config="${window.es.cfg}"
                  includeRefid="stub.includes.fileset.platform"
         </gluegen>
     </target>
 
-    <target name="java.generate.window.system.os" if="window.os.cfg">
+    <target name="java.generate.window.system.os0" if="window.os0.cfg">
         <echo message="Generating window system glue impl: ${window.os.system}" />
         <antcall target="java.generate.copy2temp" inheritRefs="true" />
-        <gluegen src="${stub.includes}/${window.os.system}/window-system.c"
+        <gluegen src="${stub.includes}/${window.os.system}/window-system0.c"
                  outputRootDir="${build.jogl}"
-                 config="${window.os.cfg}"
+                 config="${window.os0.cfg}"
+                 includeRefid="stub.includes.fileset.platform"
+                 emitter="com.sun.gluegen.opengl.GLEmitter">
+            <classpath refid="gluegen.classpath" />
+        </gluegen>
+    </target>
+
+    <target name="java.generate.window.system.os1" if="window.os1.cfg">
+        <echo message="Generating window system glue impl: ${window.os.system}" />
+        <antcall target="java.generate.copy2temp" inheritRefs="true" />
+        <gluegen src="${stub.includes}/${window.os.system}/window-system1.c"
+                 outputRootDir="${build.jogl}"
+                 config="${window.os1.cfg}"
                  includeRefid="stub.includes.fileset.platform"
                  emitter="com.sun.gluegen.opengl.GLEmitter">
             <classpath refid="gluegen.classpath" />
     <target name="java.generate.gl.platforms" >
         <dirset id="stub.includes.fileset.platform" dir="." includes="${stub.includes}/${window.os.system}/** ${stub.includes}/${window.es.system}/** ${stub.includes}/common/** ${stub.includes}/opengl/**" />
 
-        <antcall target="java.generate.window.system.os" inheritRefs="true" />
+        <antcall target="java.generate.window.system.os0" inheritRefs="true" />
+        <antcall target="java.generate.window.system.os1" inheritRefs="true" />
         <antcall target="java.generate.platform.glext" inheritRefs="true" />
     </target>
 
 
         <antcall target="java.generate.gl.platforms" inheritRefs="true">
             <param name="window.os.system"                       value="x11"/>
-            <param name="window.os.cfg"                          value="${config.jogl}/glx-x11.cfg" />
+            <param name="window.os1.cfg"                         value="${config.jogl}/glx-x11.cfg" />
             <param name="glext.platform.cfg"                     value="${config.jogl}/glxext.cfg" />
             <param name="glext.platform.header"                  value="${stub.includes}/x11/glxext.c" />
         </antcall>
 
         <antcall target="java.generate.gl.platforms" inheritRefs="true">
             <param name="window.os.system"                       value="win32"/>
-            <param name="window.os.cfg"                          value="${config.jogl}/wgl-win32.cfg" />
+            <param name="window.os0.cfg"                         value="${config.jogl}/gdi-win32.cfg" />
+            <param name="window.os1.cfg"                         value="${config.jogl}/wgl-win32.cfg" />
             <param name="glext.platform.cfg"                     value="${config.jogl}/wglext.cfg" />
             <param name="glext.platform.header"                  value="${stub.includes}/win32/wglext.c" />
         </antcall>          
 
         <antcall target="java.generate.gl.platforms" inheritRefs="true">
           <param name="window.os.system"                     value="macosx"/>
-          <param name="window.os.cfg"                        value="${config.jogl}/cgl-macosx.cfg" />
+          <param name="window.os1.cfg"                       value="${config.jogl}/cgl-macosx.cfg" />
           <param name="glext.platform.cfg"                   value="${config.jogl}/cglext.cfg" />
           <param name="glext.platform.header"                value="${stub.includes}/macosx/cglext.c" />
         </antcall>
                  outputRootDir="${build.jogl}"
                  config="${config.jogl}/cg-common.cfg"
                  includeRefid="stub.includes.cg.fileset.all"
-                 emitter="com.sun.gluegen.JavaEmitter">
+                 emitter="com.sun.gluegen.procaddress.ProcAddressEmitter">
             <classpath refid="gluegen.classpath" />
         </gluegen>
     </target>
         <syslibset libs="Xxf86vm" />
       </linker>
 
-      <linker id="linker.cfg.linux.jogl.cg" extends="linker.cfg.linux.jogl.x11">
-        <syslibset dir="${x11.cg.lib32}" libs="Cg, CgGL"/>
-      </linker>
-
       <linker id="linker.cfg.linux.amd64.jogl.x11" extends="linker.cfg.linux.amd64">
         <syslibset libs="X11"/>
         <syslibset libs="Xxf86vm" />
           <include name="${rootrel.generated.c.jogl}/gl2/GLUgl2_JNI.c"/>
           <include name="${rootrel.generated.c.jogl}/X11/GLX*.c" if="isX11"/>
           <include name="${rootrel.generated.c.jogl}/MacOSX/CGL*.c" if="isOSX"/>
+          <include name="${rootrel.generated.c.jogl}/Windows/GDI*.c" if="isWindows"/>
           <include name="${rootrel.generated.c.jogl}/Windows/WGL*.c" if="isWindows"/>
         </patternset>
 
index d1e4f8b..cdaa6f2 100755 (executable)
@@ -1,7 +1,26 @@
+private static DynamicLookupHelper cgDynamicLookupHelper;
+private static CgProcAddressTable cgProcAddressTable;
+
 static {
-  com.jogamp.opengl.impl.GLJNILibLoader.loadCgImpl();
+    cgProcAddressTable = new CgProcAddressTable();
+    if(null==cgProcAddressTable) {
+      throw new RuntimeException("Couldn't instantiate CgProcAddressTable");
+    }
+    DynamicLibraryBundle cgDynamicLookupHelper = new DynamicLibraryBundle(new CgDynamicLibraryBundleInfo());
+    if(null==cgDynamicLookupHelper) {
+      throw new RuntimeException("Null CgDynamicLookupHelper");
+    }
+    if(!cgDynamicLookupHelper.isToolLibLoaded()) {
+      throw new RuntimeException("Couln't load native Cg or CgGL library");
+    }
+    if(!cgDynamicLookupHelper.isGlueLibLoaded(CgDynamicLibraryBundleInfo.getCgGlueLibIndex())) {
+      throw new RuntimeException("Couln't load native GLue/JNI library");
+    }
+    cgProcAddressTable.reset(cgDynamicLookupHelper);
 }
 
+public  static CgProcAddressTable getCgProcAddressTable() { return cgProcAddressTable; }
+
 /** A convenience method which reads all available data from the InputStream and then calls cgCreateProgram. */
 public static CGprogram cgCreateProgramFromStream(CGcontext ctx, int program_type, java.io.InputStream stream, int profile, java.lang.String entry, java.lang.String[] args) throws java.io.IOException {
   if (stream == null) {
index 927d233..ae29d3f 100644 (file)
@@ -7,6 +7,14 @@ JavaOutputDir gensrc/classes
 NativeOutputDir gensrc/native/jogl_cg
 HierarchicalNativeOutput false
 
+ForceProcAddressGen __ALL__
+LocalProcAddressCallingConvention __ALL__ APIENTRY
+
+EmitProcAddressTable true
+ProcAddressTableClassName CgProcAddressTable
+GetProcAddressTableExpr cgProcAddressTable
+ProcAddressNameExpr PFN $UPPERCASE({0}) PROC
+
 #
 # Map const char* return values to Java strings for these functions
 #
@@ -94,6 +102,9 @@ Ignore cgGetProgramOptions
 
 # And NativeLibLoader for help loading the native libraries
 Import com.jogamp.opengl.impl.*
+Import com.jogamp.common.os.DynamicLookupHelper;
+Import com.jogamp.common.os.DynamicLibraryBundle;
+Import com.jogamp.opengl.cg.CgDynamicLibraryBundleInfo;
 
 #
 # NIODirectOnly directives for routines requiring them for semantic reasons
index f2af29e..2b28d3c 100644 (file)
@@ -5,7 +5,7 @@ NativeOutputDir gensrc/native/jogl/MacOSX
 
 Package com.jogamp.opengl.impl.macosx.cgl
 JavaClass CGL
-Style allstatic
+Style AllStatic
 Include gl-common.cfg
 Include gl-common-extensions.cfg
 Include gl-desktop.cfg
index 94984a3..c194de2 100755 (executable)
@@ -5,7 +5,7 @@ NativeOutputDir gensrc/native/jogl/egl
 
 Package com.jogamp.opengl.impl.egl
 JavaClass EGL
-Style allstatic
+Style AllStatic
 # Shouldn't matter which one of these we pick up
 Include egl-common.cfg
 
diff --git a/make/config/jogl/gdi-win32.cfg b/make/config/jogl/gdi-win32.cfg
new file mode 100644 (file)
index 0000000..7d831c7
--- /dev/null
@@ -0,0 +1,26 @@
+# This .cfg file is used to generate the interface to the wgl routines
+# used internally by the WindowsGLContext implementation.
+JavaOutputDir gensrc/classes
+NativeOutputDir gensrc/native/jogl/Windows
+
+Package com.jogamp.opengl.impl.windows.wgl
+JavaClass GDI
+Style AllStatic
+Include gl-common.cfg
+Include gl-common-extensions.cfg
+Include gl-desktop.cfg
+
+GLHeader wingdi.h
+
+AllowNonGLExtensions true
+
+CustomCCode #define WIN32_LEAN_AND_MEAN
+CustomCCode #include <windows.h>
+CustomCCode #undef WIN32_LEAN_AND_MEAN
+
+CustomCCode #include <wingdi.h>
+CustomCCode #include <stddef.h>
+
+Include ../intptr.cfg
+
+IncludeAs CustomCCode gdi-CustomCCode.c
index 8d726c4..2c8e79e 100644 (file)
@@ -39,6 +39,7 @@ Ignore glTracePointerRangeMESA
 # Manually implement glMapBuffer as the size of the returned buffer
 # can only be computed by calling another routine
 ManuallyImplement glMapBuffer
+ForceProcAddressGen glMapBuffer
 
 # Ignore the ATI_map_object_buffer extension for now unless someone
 # claims they need it, as it will undoubtedly require a similar
@@ -347,6 +348,8 @@ NIODirectOnly glXFreeMemoryNV
 ReturnValueCapacity wglAllocateMemoryNV {0}
 ReturnValueCapacity glXAllocateMemoryNV {0}
 
+ReturnValueCapacity glMapBufferRange {2}
+
 # Pass arguments to ARB_vertex_program, ARB_fragment_program,
 # ARB_shader_objects, NV_vertex_program, NV_fragment_program, and
 # ARB_vertex_shader as Strings
index f35ed25..ce2fefe 100755 (executable)
@@ -51,19 +51,11 @@ Opaque long Visual *
 # traversed)
 Ignore Display
 Ignore Visual
-# Implement the first argument to glXGetProcAddress as String instead
-# of byte[]
 ArgumentIsString glXGetProcAddress 0
 ArgumentIsString glXGetProcAddressARB 0
 ReturnsString glXQueryExtensionsString
 ReturnsString glXQueryServerString
 ReturnsString glXGetClientString
-TemporaryCVariableDeclaration glXChooseFBConfig     int count;
-TemporaryCVariableAssignment  glXChooseFBConfig     count = _ptr3[0];
-ReturnValueCapacity           glXChooseFBConfig     count * sizeof(GLXFBConfig)
-TemporaryCVariableDeclaration glXChooseFBConfigSGIX int count;
-TemporaryCVariableAssignment  glXChooseFBConfigSGIX count = _ptr3[0];
-ReturnValueCapacity           glXChooseFBConfigSGIX count * sizeof(GLXFBConfig)
 TemporaryCVariableDeclaration glXGetFBConfigs       int count;
 TemporaryCVariableAssignment  glXGetFBConfigs       count = _nelements_ptr[0];
 ReturnValueCapacity           glXGetFBConfigs       count * sizeof(GLXFBConfig)
index da22671..63905df 100755 (executable)
@@ -97,4 +97,4 @@ IncludeAs CustomCCode gl-impl-CustomCCode-gles1.c
 Import javax.media.opengl.GLES1
 Import javax.media.opengl.GLES2
 Import javax.media.opengl.GL2
-Import com.jogamp.opengl.impl.InternalBufferUtil
+Import com.jogamp.common.nio.Buffers;
index fd11ffc..cdfd7fe 100755 (executable)
@@ -79,6 +79,6 @@ Import javax.media.opengl.GLES2
 Import javax.media.opengl.GL2
 Import javax.media.opengl.GLArrayData
 Import javax.media.opengl.GLUniformData
-Import com.jogamp.opengl.impl.InternalBufferUtil
+Import com.jogamp.common.nio.Buffers;
 Import java.io.PrintStream
 
index 3942b14..ec121d7 100644 (file)
@@ -22,11 +22,6 @@ Include gl-common.cfg
 Include gl-common-extensions.cfg
 Include gl-desktop.cfg
 
-# Because we're manually implementing glMapBuffer but only producing
-# the implementing class, GlueGen doesn't notice that it has to emit a
-# proc address table entry for it. Force it to here.
-ForceProcAddressGen glMapBuffer
-
 # Force all of the methods to be emitted using dynamic linking so we
 # don't need to link against any emulation library on the desktop or
 # depend on the presence of an import library for a particular device
@@ -86,5 +81,5 @@ IncludeAs CustomCCode gl-impl-CustomCCode-gl2es12.c
 
 Import javax.media.opengl.GLES1
 Import javax.media.opengl.GLES2
-Import com.jogamp.opengl.impl.InternalBufferUtil
+Import com.jogamp.common.nio.Buffers;
 Import java.io.PrintStream
index 3a3e020..ccd9723 100644 (file)
@@ -46,10 +46,11 @@ Include gl3-common.cfg
 Include gl4-common.cfg
 Include gl3-desktop.cfg
 
-# Because we're manually implementing glMapBuffer but only producing
-# the implementing class, GlueGen doesn't notice that it has to emit a
-# proc address table entry for it. Force it to here.
-ForceProcAddressGen glMapBuffer
+# Manually implement glMapNamedBufferEXT as the size of the returned buffer
+# can only be computed by calling another routine
+ManuallyImplement glMapNamedBufferEXT
+ForceProcAddressGen glMapNamedBufferEXT
+JavaEpilogue glNamedBufferDataEXT bufferSizeTracker.setDirectStateBufferSize({0}, this, {1});
 
 # Force all of the methods to be emitted using dynamic linking so we
 # don't need to link against any emulation library on the desktop or
@@ -106,5 +107,5 @@ Import javax.media.opengl.GL2
 Import javax.media.opengl.GL3
 Import javax.media.opengl.GL3bc
 Import javax.media.opengl.GL4
-Import com.jogamp.opengl.impl.InternalBufferUtil
+Import com.jogamp.common.nio.Buffers;
 Import java.io.PrintStream
index bcda20f..0bd8b68 100644 (file)
@@ -15,6 +15,21 @@ Java_com_jogamp_opengl_impl_gl4_GL4bcImpl_dispatch_1glMapBuffer(JNIEnv *env, job
 
 /*   Java->C glue code:
  *   Java package: com.jogamp.opengl.impl.gl4.GL4bcImpl
+ *    Java method: long dispatch_glMapNamedBufferEXT(int target, int access)
+ *     C function: void * glMapNamedBufferEXT(GLenum target, GLenum access);
+ */
+JNIEXPORT jlong JNICALL 
+Java_com_jogamp_opengl_impl_gl4_GL4bcImpl_dispatch_1glMapNamedBufferEXT(JNIEnv *env, jobject _unused, jint target, jint access, jlong glProcAddress) {
+  PFNGLMAPNAMEDBUFFEREXTPROC ptr_glMapNamedBufferEXT;
+  void * _res;
+  ptr_glMapNamedBufferEXT = (PFNGLMAPNAMEDBUFFEREXTPROC) (intptr_t) glProcAddress;
+  assert(ptr_glMapNamedBufferEXT != NULL);
+  _res = (* ptr_glMapNamedBufferEXT) ((GLenum) target, (GLenum) access);
+  return (jlong) (intptr_t) _res;
+}
+
+/*   Java->C glue code:
+ *   Java package: com.jogamp.opengl.impl.gl4.GL4bcImpl
  *    Java method: ByteBuffer newDirectByteBuffer(long addr, int capacity);
  *     C function: jobject newDirectByteBuffer(jlong addr, jint capacity);
  */
index 4bc39b0..cb0d013 100644 (file)
@@ -339,16 +339,19 @@ public java.nio.ByteBuffer glMapBuffer(int target, int access) {
   int sz = bufferSizeTracker.getBufferSize(bufferStateTracker,
                                            target,
                                            this);
+  if (0 == sz) {
+    return null;
+  }
   long addr;
   addr = dispatch_glMapBuffer(target, access, __addr_);
-  if (addr == 0 || sz == 0) {
+  if (0 == addr) {
     return null;
   }
   ARBVBOKey key = new ARBVBOKey(addr, sz);
   ByteBuffer _res = (ByteBuffer) arbVBOCache.get(key);
   if (_res == null) {
     _res = newDirectByteBuffer(addr, sz);
-    InternalBufferUtil.nativeOrder(_res);
+    Buffers.nativeOrder(_res);
     arbVBOCache.put(key, _res);
   }
   _res.position(0);
diff --git a/make/config/jogl/gl-impl-CustomJavaCode-gl4.java b/make/config/jogl/gl-impl-CustomJavaCode-gl4.java
deleted file mode 100644 (file)
index a2c70ee..0000000
+++ /dev/null
@@ -1,339 +0,0 @@
-// Tracks glBegin/glEnd calls to determine whether it is legal to
-// query Vertex Buffer Object state
-private boolean inBeginEndPair;
-
-/* FIXME: refactor dependence on Java 2D / JOGL bridge
-
-// Tracks creation and destruction of server-side OpenGL objects when
-// the Java2D/OpenGL pipeline is enabled and it is using frame buffer
-// objects (FBOs) to do its rendering
-private GLObjectTracker tracker;
-
-public void setObjectTracker(GLObjectTracker tracker) {
-  this.tracker = tracker;
-}
-
-*/
-
-public GL3Impl(GLProfile glp, GLContextImpl context) {
-  this._context = context; 
-  this.bufferSizeTracker  = context.getBufferSizeTracker();
-  this.bufferStateTracker = context.getBufferStateTracker();
-  this.glStateTracker     = context.getGLStateTracker();
-  this.glProfile = glp;
-}
-
-/**
- * Provides platform-independent access to the wglAllocateMemoryNV /
- * glXAllocateMemoryNV extension.
- */
-public java.nio.ByteBuffer glAllocateMemoryNV(int arg0, float arg1, float arg2, float arg3) {
-  return _context.glAllocateMemoryNV(arg0, arg1, arg2, arg3);
-}
-
-//
-// Helpers for ensuring the correct amount of texture data
-//
-
-/** Returns the number of bytes required to fill in the appropriate
-    texture. This is computed as closely as possible based on the
-    pixel pack or unpack parameters. The logic in this routine is
-    based on code in the SGI OpenGL sample implementation. */
-
-private int imageSizeInBytes(int format, int type, int w, int h, int d,
-                             boolean pack) {
-  int elements = 0;
-  int esize = 0;
-  
-  if (w < 0) return 0;
-  if (h < 0) return 0;
-  if (d < 0) return 0;
-  switch (format) {
-  case GL_STENCIL_INDEX:
-    elements = 1;
-    break;
-  case GL_RED:
-  case GL_GREEN:
-  case GL_BLUE:
-  case GL_ALPHA:
-  case GL_LUMINANCE:
-  case GL_DEPTH_COMPONENT:
-    elements = 1;
-    break;
-  case GL_LUMINANCE_ALPHA:
-    elements = 2;
-    break;
-  case GL_RGB:
-  case GL_BGR:
-    elements = 3;
-    break;
-  case GL_RGBA:
-  case GL_BGRA:
-    elements = 4;
-    break;
-  /* FIXME ?? 
-   case GL_HILO_NV:
-    elements = 2;
-    break; */
-  default:
-    return 0;
-  }
-  switch (type) {
-  case GL_BYTE:
-  case GL_UNSIGNED_BYTE:
-    esize = 1;
-    break;
-  case GL_UNSIGNED_BYTE_3_3_2:
-  case GL_UNSIGNED_BYTE_2_3_3_REV:
-    esize = 1;
-    elements = 1;
-    break;
-  case GL_SHORT:
-  case GL_UNSIGNED_SHORT:
-    esize = 2;
-    break;
-  case GL_UNSIGNED_SHORT_5_6_5:
-  case GL_UNSIGNED_SHORT_5_6_5_REV:
-  case GL_UNSIGNED_SHORT_4_4_4_4:
-  case GL_UNSIGNED_SHORT_4_4_4_4_REV:
-  case GL_UNSIGNED_SHORT_5_5_5_1:
-  case GL_UNSIGNED_SHORT_1_5_5_5_REV:
-    esize = 2;
-    elements = 1;
-    break;
-  case GL_INT:
-  case GL_UNSIGNED_INT:
-  case GL_FLOAT:
-    esize = 4;
-    break;
-  case GL_UNSIGNED_INT_8_8_8_8:
-  case GL_UNSIGNED_INT_8_8_8_8_REV:
-  case GL_UNSIGNED_INT_10_10_10_2:
-  case GL_UNSIGNED_INT_2_10_10_10_REV:
-    esize = 4;
-    elements = 1;
-    break;
-  default:
-    return 0;
-  }
-  return imageSizeInBytes(elements * esize, w, h, d, pack);
-}
-
-private GLBufferSizeTracker  bufferSizeTracker;
-private GLBufferStateTracker bufferStateTracker;
-private GLStateTracker       glStateTracker;
-
-private boolean bufferObjectExtensionsInitialized = false;
-private boolean haveARBPixelBufferObject;
-private boolean haveEXTPixelBufferObject;
-private boolean haveGL15;
-private boolean haveGL21;
-private boolean haveARBVertexBufferObject;
-
-private void initBufferObjectExtensionChecks() {
-  if (bufferObjectExtensionsInitialized)
-    return;
-  bufferObjectExtensionsInitialized = true;
-  haveARBPixelBufferObject  = isExtensionAvailable("GL_ARB_pixel_buffer_object");
-  haveEXTPixelBufferObject  = isExtensionAvailable("GL_EXT_pixel_buffer_object");
-  haveGL15                  = isExtensionAvailable("GL_VERSION_1_5");
-  haveGL21                  = isExtensionAvailable("GL_VERSION_2_1");
-  haveARBVertexBufferObject = isExtensionAvailable("GL_ARB_vertex_buffer_object");
-}
-
-private boolean checkBufferObject(boolean extension1,
-                                  boolean extension2,
-                                  boolean extension3,
-                                  boolean enabled,
-                                  int state,
-                                  String kind, boolean throwException) {
-  if (inBeginEndPair) {
-    throw new GLException("May not call this between glBegin and glEnd");
-  }
-  boolean avail = (extension1 || extension2 || extension3);
-  if (!avail) {
-    if (!enabled)
-      return true;
-    if(throwException) {
-        throw new GLException("Required extensions not available to call this function");
-    }
-    return false;
-  }
-  int buffer = bufferStateTracker.getBoundBufferObject(state, this);
-  if (enabled) {
-    if (buffer == 0) {
-      if(throwException) {
-          throw new GLException(kind + " must be enabled to call this method");
-      }
-      return false;
-    }
-  } else {
-    if (buffer != 0) {
-      if(throwException) {
-          throw new GLException(kind + " must be disabled to call this method");
-      }
-      return false;
-    }
-  }
-  return true;
-}  
-
-private boolean checkArrayVBODisabled(boolean throwException) { 
-  initBufferObjectExtensionChecks();
-  return checkBufferObject(haveGL15,
-                    haveARBVertexBufferObject,
-                    false,
-                    false,
-                    GL.GL_ARRAY_BUFFER,
-                    "array vertex_buffer_object", throwException);
-}
-
-private boolean checkArrayVBOEnabled(boolean throwException) { 
-  initBufferObjectExtensionChecks();
-  return checkBufferObject(haveGL15,
-                    haveARBVertexBufferObject,
-                    false,
-                    true,
-                    GL.GL_ARRAY_BUFFER,
-                    "array vertex_buffer_object", throwException);
-}
-
-private boolean checkElementVBODisabled(boolean throwException) { 
-  initBufferObjectExtensionChecks();
-  return checkBufferObject(haveGL15,
-                    haveARBVertexBufferObject,
-                    false,
-                    false,
-                    GL.GL_ELEMENT_ARRAY_BUFFER,
-                    "element vertex_buffer_object", throwException);
-}
-
-private boolean checkElementVBOEnabled(boolean throwException) { 
-  initBufferObjectExtensionChecks();
-  return checkBufferObject(haveGL15,
-                    haveARBVertexBufferObject,
-                    false,
-                    true,
-                    GL.GL_ELEMENT_ARRAY_BUFFER,
-                    "element vertex_buffer_object", throwException);
-}
-
-private boolean checkUnpackPBODisabled(boolean throwException) { 
-  initBufferObjectExtensionChecks();
-  return checkBufferObject(haveARBPixelBufferObject,
-                    haveEXTPixelBufferObject,
-                    haveGL21,
-                    false,
-                    GL2.GL_PIXEL_UNPACK_BUFFER,
-                    "unpack pixel_buffer_object", throwException);
-}
-
-private boolean checkUnpackPBOEnabled(boolean throwException) { 
-  initBufferObjectExtensionChecks();
-  return checkBufferObject(haveARBPixelBufferObject,
-                    haveEXTPixelBufferObject,
-                    haveGL21,
-                    true,
-                    GL2.GL_PIXEL_UNPACK_BUFFER,
-                    "unpack pixel_buffer_object", throwException);
-}
-
-private boolean checkPackPBODisabled(boolean throwException) { 
-  initBufferObjectExtensionChecks();
-  return checkBufferObject(haveARBPixelBufferObject,
-                    haveEXTPixelBufferObject,
-                    haveGL21,
-                    false,
-                    GL2.GL_PIXEL_PACK_BUFFER,
-                    "pack pixel_buffer_object", throwException);
-}
-
-private boolean checkPackPBOEnabled(boolean throwException) { 
-  initBufferObjectExtensionChecks();
-  return checkBufferObject(haveARBPixelBufferObject,
-                    haveEXTPixelBufferObject,
-                    haveGL21,
-                    true,
-                    GL2.GL_PIXEL_PACK_BUFFER,
-                    "pack pixel_buffer_object", throwException);
-}
-
-public boolean glIsPBOPackEnabled() {
-    return checkPackPBOEnabled(false);
-}
-
-public boolean glIsPBOUnpackEnabled() {
-    return checkUnpackPBOEnabled(false);
-}
-
-// Attempt to return the same ByteBuffer object from glMapBuffer if
-// the vertex buffer object's base address and size haven't changed
-private static class ARBVBOKey {
-  private long addr;
-  private int  capacity;
-
-  ARBVBOKey(long addr, int capacity) {
-    this.addr = addr;
-    this.capacity = capacity;
-  }
-
-  public int hashCode() {
-    return (int) addr;
-  }
-
-  public boolean equals(Object o) {
-    if ((o == null) || (!(o instanceof ARBVBOKey))) {
-      return false;
-    }
-
-    ARBVBOKey other = (ARBVBOKey) o;
-    return ((addr == other.addr) && (capacity == other.capacity));
-  }
-}
-
-private Map/*<ARBVBOKey, ByteBuffer>*/ arbVBOCache = new HashMap();
-
-/** Entry point to C language function: <br> <code> LPVOID glMapBuffer(GLenum target, GLenum access); </code>    */
-public java.nio.ByteBuffer glMapBuffer(int target, int access) {
-  final long __addr_ = ((GL3ProcAddressTable)_context.getGLProcAddressTable())._addressof_glMapBuffer;
-  if (__addr_ == 0) {
-    throw new GLException("Method \"glMapBuffer\" not available");
-  }
-  int sz = bufferSizeTracker.getBufferSize(bufferStateTracker,
-                                           target,
-                                           this);
-  long addr;
-  addr = dispatch_glMapBuffer(target, access, __addr_);
-  if (addr == 0 || sz == 0) {
-    return null;
-  }
-  ARBVBOKey key = new ARBVBOKey(addr, sz);
-  ByteBuffer _res = (ByteBuffer) arbVBOCache.get(key);
-  if (_res == null) {
-    _res = newDirectByteBuffer(addr, sz);
-    InternalBufferUtil.nativeOrder(_res);
-    arbVBOCache.put(key, _res);
-  }
-  _res.position(0);
-  return _res;
-}
-
-/** Encapsulates function pointer for OpenGL function <br>: <code> LPVOID glMapBuffer(GLenum target, GLenum access); </code>    */
-native private long dispatch_glMapBuffer(int target, int access, long glProcAddress);
-
-native private ByteBuffer newDirectByteBuffer(long addr, int capacity);
-
-  /** Dummy implementation for the ES 2.0 function: <br> <code> void {@native glShaderBinary}(GLint n, const GLuint *  shaders, GLenum binaryformat, const void *  binary, GLint length); </code>  <br> Always throws a GLException!  */
-  public void glShaderBinary(int n, java.nio.IntBuffer shaders, int binaryformat, java.nio.Buffer binary, int length) {
-    throw new GLException("Method \"glShaderBinary\" not available");
-  }
-
-  /** Dummy implementation for the ES 2.0 function: <br> <code> void {@native glShaderBinary}(GLint n, const GLuint *  shaders, GLenum binaryformat, const void *  binary, GLint length); </code>  <br> Always throws a GLException!  */
-  public void glShaderBinary(int n, int[] shaders, int shaders_offset, int binaryformat, java.nio.Buffer binary, int length) {
-    throw new GLException("Method \"glShaderBinary\" not available");
-  }
-
-  public void glReleaseShaderCompiler() {
-    // nothing to do 
-  }
-
index bceb12f..aa17673 100644 (file)
@@ -308,19 +308,20 @@ public java.nio.ByteBuffer glMapBuffer(int target, int access) {
   if (__addr_ == 0) {
     throw new GLException("Method \"glMapBuffer\" not available");
   }
-  int sz = bufferSizeTracker.getBufferSize(bufferStateTracker,
-                                           target,
-                                           this);
+  int sz = bufferSizeTracker.getBufferSize(bufferStateTracker, target, this);
+  if (0 == sz) {
+    return null;
+  }
   long addr;
   addr = dispatch_glMapBuffer(target, access, __addr_);
-  if (addr == 0 || sz == 0) {
+  if (0 == addr) {
     return null;
   }
   ARBVBOKey key = new ARBVBOKey(addr, sz);
   ByteBuffer _res = (ByteBuffer) arbVBOCache.get(key);
   if (_res == null) {
     _res = newDirectByteBuffer(addr, sz);
-    InternalBufferUtil.nativeOrder(_res);
+    Buffers.nativeOrder(_res);
     arbVBOCache.put(key, _res);
   }
   _res.position(0);
@@ -330,6 +331,29 @@ public java.nio.ByteBuffer glMapBuffer(int target, int access) {
 /** Encapsulates function pointer for OpenGL function <br>: <code> LPVOID glMapBuffer(GLenum target, GLenum access); </code>    */
 native private long dispatch_glMapBuffer(int target, int access, long glProcAddress);
 
+/** Entry point to C language function: <code> GLvoid *  {@native glMapNamedBufferEXT}(GLuint buffer, GLenum access); </code> <br>Part of <code>GL_EXT_direct_state_access</code>   */
+public java.nio.ByteBuffer glMapNamedBufferEXT(int buffer, int access)  {
+  final long __addr_ = ((GL4bcProcAddressTable)_context.getGLProcAddressTable())._addressof_glMapNamedBufferEXT;
+  if (__addr_ == 0) {
+    throw new GLException("Method \"glMapNamedBufferEXT\" not available");
+  }
+  int sz = bufferSizeTracker.getDirectStateBufferSize(buffer, this);
+  if (0 == sz) {
+    return null;
+  }
+  long addr;
+  addr = dispatch_glMapNamedBufferEXT(buffer, access, __addr_);
+  if (0 == addr) {
+    return null;
+  }
+  ByteBuffer _res = newDirectByteBuffer(addr, sz);
+  Buffers.nativeOrder(_res);
+  _res.position(0);
+  return _res;
+}
+
+private native long dispatch_glMapNamedBufferEXT(int buffer, int access, long procAddress);
+
 native private ByteBuffer newDirectByteBuffer(long addr, int capacity);
 
   /** Dummy implementation for the ES 2.0 function: <br> <code> void {@native glShaderBinary}(GLint n, const GLuint *  shaders, GLenum binaryformat, const void *  binary, GLint length); </code>  <br> Always throws a GLException!  */
index b4efac8..d29fe16 100755 (executable)
@@ -285,16 +285,19 @@ public java.nio.ByteBuffer glMapBuffer(int target, int access) {
   int sz = bufferSizeTracker.getBufferSize(bufferStateTracker,
                                            target,
                                            this);
+  if (0 == sz) {
+    return null;
+  }
   long addr;
   addr = dispatch_glMapBuffer(target, access, __addr_);
-  if (addr == 0 || sz == 0) {
+  if (0 == addr) {
     return null;
   }
   ARBVBOKey key = new ARBVBOKey(addr, sz);
   java.nio.ByteBuffer _res = (java.nio.ByteBuffer) arbVBOCache.get(key);
   if (_res == null) {
     _res = newDirectByteBuffer(addr, sz);
-    InternalBufferUtil.nativeOrder(_res);
+    Buffers.nativeOrder(_res);
     arbVBOCache.put(key, _res);
   }
   _res.position(0);
index bb8ddb7..e65c491 100755 (executable)
@@ -295,16 +295,19 @@ public java.nio.ByteBuffer glMapBuffer(int target, int access) {
   int sz = bufferSizeTracker.getBufferSize(bufferStateTracker,
                                            target,
                                            this);
+  if (0 == sz) {
+    return null;
+  }
   long addr;
   addr = dispatch_glMapBuffer(target, access, __addr_);
-  if (addr == 0 || sz == 0) {
+  if (0 == addr) {
     return null;
   }
   ARBVBOKey key = new ARBVBOKey(addr, sz);
   java.nio.ByteBuffer _res = (java.nio.ByteBuffer) arbVBOCache.get(key);
   if (_res == null) {
     _res = newDirectByteBuffer(addr, sz);
-    InternalBufferUtil.nativeOrder(_res);
+    Buffers.nativeOrder(_res);
     arbVBOCache.put(key, _res);
   }
   _res.position(0);
index ee74108..19eef42 100755 (executable)
@@ -47,19 +47,11 @@ Opaque long Visual *
 # traversed)
 Ignore Display
 Ignore Visual
-# Implement the first argument to glXGetProcAddress as String instead
-# of byte[]
 ArgumentIsString glXGetProcAddress 0
 ArgumentIsString glXGetProcAddressARB 0
 ReturnsString glXQueryExtensionsString
 ReturnsString glXQueryServerString
 ReturnsString glXGetClientString
-TemporaryCVariableDeclaration glXChooseFBConfig     int count;
-TemporaryCVariableAssignment  glXChooseFBConfig     count = _ptr3[0];
-ReturnValueCapacity           glXChooseFBConfig     count * sizeof(GLXFBConfig)
-TemporaryCVariableDeclaration glXChooseFBConfigSGIX int count;
-TemporaryCVariableAssignment  glXChooseFBConfigSGIX count = _ptr3[0];
-ReturnValueCapacity           glXChooseFBConfigSGIX count * sizeof(GLXFBConfig)
 TemporaryCVariableDeclaration glXGetFBConfigs       int count;
 TemporaryCVariableAssignment  glXGetFBConfigs       count = _nelements_ptr[0];
 ReturnValueCapacity           glXGetFBConfigs       count * sizeof(GLXFBConfig)
index 480f5d1..7aee33a 100755 (executable)
@@ -1382,21 +1382,21 @@ public void gluLookAt(double eyeX, double eyeY, double eyeZ, double centerX, dou
  * <P> Accepts the outgoing window coordinates as a single array.
  */
 public boolean gluProject(double objX, double objY, double objZ, double[] model, int model_offset, double[] proj, int proj_offset, int[] view, int view_offset, double[] winPos, int winPos_offset) {
-  return project.gluProject((float)objX, (float)objY, (float)objZ, InternalBufferUtil.getFloatArray(model), model_offset, InternalBufferUtil.getFloatArray(proj), proj_offset, view, view_offset, InternalBufferUtil.getFloatArray(winPos), winPos_offset);
+  return project.gluProject((float)objX, (float)objY, (float)objZ, Buffers.getFloatArray(model), model_offset, Buffers.getFloatArray(proj), proj_offset, view, view_offset, Buffers.getFloatArray(winPos), winPos_offset);
 }
 
 /** Interface to C language function: <br> <code> GLint gluUnProject(GLdouble winX, GLdouble winY, GLdouble winZ, const GLdouble *  model, const GLdouble *  proj, const GLint *  view, GLdouble *  objX, GLdouble *  objY, GLdouble *  objZ); </code>
  * <P> Accepts the outgoing object coordinates (a 3-vector) as a single array.
  */
 public boolean gluUnProject(double winX, double winY, double winZ, double[] model, int model_offset, double[] proj, int proj_offset, int[] view, int view_offset, double[] objPos, int objPos_offset) {
-  return project.gluUnProject((float)winX, (float)winY, (float)winZ, InternalBufferUtil.getFloatArray(model), model_offset, InternalBufferUtil.getFloatArray(proj), proj_offset, view, view_offset, InternalBufferUtil.getFloatArray(objPos), objPos_offset);
+  return project.gluUnProject((float)winX, (float)winY, (float)winZ, Buffers.getFloatArray(model), model_offset, Buffers.getFloatArray(proj), proj_offset, view, view_offset, Buffers.getFloatArray(objPos), objPos_offset);
 }
 
 /** Interface to C language function: <br> <code> GLint gluUnProject4(GLdouble winX, GLdouble winY, GLdouble winZ, GLdouble clipW, const GLdouble *  model, const GLdouble *  proj, const GLint *  view, GLdouble nearVal, GLdouble farVal, GLdouble *  objX, GLdouble *  objY, GLdouble *  objZ, GLdouble *  objW); </code>
  * <P> Accepts the outgoing object coordinates (a 4-vector) as a single array.
  */
 public boolean gluUnProject4(double winX, double winY, double winZ, double clipW, double[] model, int model_offset, double[] proj, int proj_offset, int[] view, int view_offset, double nearVal, double farVal, double[] objPos, int objPos_offset) {
-  return project.gluUnProject4((float)winX, (float)winY, (float)winZ, (float)clipW, InternalBufferUtil.getFloatArray(model), model_offset, InternalBufferUtil.getFloatArray(proj), proj_offset, view, view_offset, (float)nearVal, (float)farVal, InternalBufferUtil.getFloatArray(objPos), objPos_offset);
+  return project.gluUnProject4((float)winX, (float)winY, (float)winZ, (float)clipW, Buffers.getFloatArray(model), model_offset, Buffers.getFloatArray(proj), proj_offset, view, view_offset, (float)nearVal, (float)farVal, Buffers.getFloatArray(objPos), objPos_offset);
 }
 
 public void gluPickMatrix(double x, double y, double delX, double delY, int[] viewport, int viewport_offset) {
index 3367b2f..4dcb569 100644 (file)
@@ -218,13 +218,13 @@ private final ByteBuffer copyToByteBuffer(Buffer buf) {
     if (buf.position() == 0) {
       return (ByteBuffer) buf;
     }
-    return InternalBufferUtil.copyByteBuffer((ByteBuffer) buf);
+    return Buffers.copyByteBuffer((ByteBuffer) buf);
   } else if (buf instanceof ShortBuffer) {
-    return InternalBufferUtil.copyShortBufferAsByteBuffer((ShortBuffer) buf);
+    return Buffers.copyShortBufferAsByteBuffer((ShortBuffer) buf);
   } else if (buf instanceof IntBuffer) {
-    return InternalBufferUtil.copyIntBufferAsByteBuffer((IntBuffer) buf);
+    return Buffers.copyIntBufferAsByteBuffer((IntBuffer) buf);
   } else if (buf instanceof FloatBuffer) {
-    return InternalBufferUtil.copyFloatBufferAsByteBuffer((FloatBuffer) buf);
+    return Buffers.copyFloatBufferAsByteBuffer((FloatBuffer) buf);
   } else {
     throw new IllegalArgumentException("Unsupported buffer type (must be one of byte, short, int, or float)");
   }
@@ -239,11 +239,11 @@ private final int gluScaleImageJava( int format, int widthin, int heightin,
   if( dataout instanceof ByteBuffer ) {
     out = (ByteBuffer)dataout;
   } else if( dataout instanceof ShortBuffer ) {
-    out = InternalBufferUtil.newByteBuffer(dataout.remaining() * InternalBufferUtil.SIZEOF_SHORT);
+    out = Buffers.newDirectByteBuffer(dataout.remaining() * Buffers.SIZEOF_SHORT);
   } else if ( dataout instanceof IntBuffer ) {
-    out = InternalBufferUtil.newByteBuffer(dataout.remaining() * InternalBufferUtil.SIZEOF_INT);
+    out = Buffers.newDirectByteBuffer(dataout.remaining() * Buffers.SIZEOF_INT);
   } else if ( dataout instanceof FloatBuffer ) {
-    out = InternalBufferUtil.newByteBuffer(dataout.remaining() * InternalBufferUtil.SIZEOF_FLOAT);
+    out = Buffers.newDirectByteBuffer(dataout.remaining() * Buffers.SIZEOF_FLOAT);
   } else {
     throw new IllegalArgumentException("Unsupported destination buffer type (must be byte, short, int, or float)");
   }
index d3c8ab3..742f7c2 100755 (executable)
@@ -99,13 +99,13 @@ private final java.nio.ByteBuffer copyToByteBuffer(java.nio.Buffer buf) {
     if (buf.position() == 0) {
       return (java.nio.ByteBuffer) buf;
     }
-    return InternalBufferUtil.copyByteBuffer((java.nio.ByteBuffer) buf);
+    return Buffers.copyByteBuffer((java.nio.ByteBuffer) buf);
   } else if (buf instanceof java.nio.ShortBuffer) {
-    return InternalBufferUtil.copyShortBufferAsByteBuffer((java.nio.ShortBuffer) buf);
+    return Buffers.copyShortBufferAsByteBuffer((java.nio.ShortBuffer) buf);
   } else if (buf instanceof java.nio.IntBuffer) {
-    return InternalBufferUtil.copyIntBufferAsByteBuffer((java.nio.IntBuffer) buf);
+    return Buffers.copyIntBufferAsByteBuffer((java.nio.IntBuffer) buf);
   } else if (buf instanceof java.nio.FloatBuffer) {
-    return InternalBufferUtil.copyFloatBufferAsByteBuffer((java.nio.FloatBuffer) buf);
+    return Buffers.copyFloatBufferAsByteBuffer((java.nio.FloatBuffer) buf);
   } else {
     throw new IllegalArgumentException("Unsupported buffer type (must be one of byte, short, int, or float)");
   }
@@ -124,11 +124,11 @@ public final int gluScaleImage( int format, int widthin, int heightin,
   if( dataout instanceof java.nio.ByteBuffer ) {
     out = (java.nio.ByteBuffer)dataout;
   } else if( dataout instanceof java.nio.ShortBuffer ) {
-    out = InternalBufferUtil.newByteBuffer(dataout.remaining() * InternalBufferUtil.SIZEOF_SHORT);
+    out = Buffers.newDirectByteBuffer(dataout.remaining() * Buffers.SIZEOF_SHORT);
   } else if ( dataout instanceof java.nio.IntBuffer ) {
-    out = InternalBufferUtil.newByteBuffer(dataout.remaining() * InternalBufferUtil.SIZEOF_INT);
+    out = Buffers.newDirectByteBuffer(dataout.remaining() * Buffers.SIZEOF_INT);
   } else if ( dataout instanceof java.nio.FloatBuffer ) {
-    out = InternalBufferUtil.newByteBuffer(dataout.remaining() * InternalBufferUtil.SIZEOF_FLOAT);
+    out = Buffers.newDirectByteBuffer(dataout.remaining() * Buffers.SIZEOF_FLOAT);
   } else {
     throw new IllegalArgumentException("Unsupported destination buffer type (must be byte, short, int, or float)");
   }
index 1b30a7d..dec3f45 100755 (executable)
 /* We expect glXGetProcAddressARB to be defined */
 extern void (*glXGetProcAddressARB(const GLubyte *procname))();
 
-static const char * clazzNameInternalBufferUtil = "com/jogamp/opengl/impl/InternalBufferUtil";
-static const char * clazzNameInternalBufferUtilStaticCstrName = "copyByteBuffer";
-static const char * clazzNameInternalBufferUtilStaticCstrSignature = "(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;";
+static const char * clazzNameBuffers = "com/jogamp/common/nio/Buffers";
+static const char * clazzNameBuffersStaticCstrName = "copyByteBuffer";
+static const char * clazzNameBuffersStaticCstrSignature = "(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;";
 static const char * clazzNameByteBuffer = "java/nio/ByteBuffer";
-static jclass clazzInternalBufferUtil = NULL;
-static jmethodID cstrInternalBufferUtil = NULL;
+static jclass clazzBuffers = NULL;
+static jmethodID cstrBuffers = NULL;
 static jclass clazzByteBuffer = NULL;
 
 static void _initClazzAccess(JNIEnv *env) {
     jclass c;
 
-    if(NULL!=cstrInternalBufferUtil) return ;
+    if(NULL!=cstrBuffers) return ;
 
-    c = (*env)->FindClass(env, clazzNameInternalBufferUtil);
+    c = (*env)->FindClass(env, clazzNameBuffers);
     if(NULL==c) {
-        fprintf(stderr, "FatalError: Java_com_jogamp_opengl_impl_x11_glx_GLX: can't find %s\n", clazzNameInternalBufferUtil);
-        (*env)->FatalError(env, clazzNameInternalBufferUtil);
+        fprintf(stderr, "FatalError: Java_com_jogamp_opengl_impl_x11_glx_GLX: can't find %s\n", clazzNameBuffers);
+        (*env)->FatalError(env, clazzNameBuffers);
     }
-    clazzInternalBufferUtil = (jclass)(*env)->NewGlobalRef(env, c);
-    if(NULL==clazzInternalBufferUtil) {
-        fprintf(stderr, "FatalError: Java_com_jogamp_opengl_impl_x11_glx_GLX: can't use %s\n", clazzNameInternalBufferUtil);
-        (*env)->FatalError(env, clazzNameInternalBufferUtil);
+    clazzBuffers = (jclass)(*env)->NewGlobalRef(env, c);
+    if(NULL==clazzBuffers) {
+        fprintf(stderr, "FatalError: Java_com_jogamp_opengl_impl_x11_glx_GLX: can't use %s\n", clazzNameBuffers);
+        (*env)->FatalError(env, clazzNameBuffers);
     }
     c = (*env)->FindClass(env, clazzNameByteBuffer);
     if(NULL==c) {
@@ -49,13 +49,13 @@ static void _initClazzAccess(JNIEnv *env) {
         (*env)->FatalError(env, clazzNameByteBuffer);
     }
 
-    cstrInternalBufferUtil = (*env)->GetStaticMethodID(env, clazzInternalBufferUtil
-                            clazzNameInternalBufferUtilStaticCstrName, clazzNameInternalBufferUtilStaticCstrSignature);
-    if(NULL==cstrInternalBufferUtil) {
+    cstrBuffers = (*env)->GetStaticMethodID(env, clazzBuffers
+                            clazzNameBuffersStaticCstrName, clazzNameBuffersStaticCstrSignature);
+    if(NULL==cstrBuffers) {
         fprintf(stderr, "FatalError: Java_com_jogamp_opengl_impl_x11_glx_GLX:: can't create %s.%s %s\n",
-            clazzNameInternalBufferUtil,
-            clazzNameInternalBufferUtilStaticCstrName, clazzNameInternalBufferUtilStaticCstrSignature);
-        (*env)->FatalError(env, clazzNameInternalBufferUtilStaticCstrName);
+            clazzNameBuffers,
+            clazzNameBuffersStaticCstrName, clazzNameBuffersStaticCstrSignature);
+        (*env)->FatalError(env, clazzNameBuffersStaticCstrName);
     }
 }
 
@@ -65,18 +65,21 @@ static void _initClazzAccess(JNIEnv *env) {
  *     C function: XVisualInfo *  glXGetVisualFromFBConfig(Display *  dpy, GLXFBConfig config);
  */
 JNIEXPORT jobject JNICALL 
-Java_com_jogamp_opengl_impl_x11_glx_GLX_glXGetVisualFromFBConfigCopied0__JJ(JNIEnv *env, jclass _unused, jlong dpy, jlong config) {
+Java_com_jogamp_opengl_impl_x11_glx_GLX_dispatch_1glXGetVisualFromFBConfig(JNIEnv *env, jclass _unused, jlong dpy, jlong config, jlong procAddress) {
+  typedef XVisualInfo* (APIENTRY*_local_PFNGLXGETVISUALFROMFBCONFIG)(Display *  dpy, GLXFBConfig config);
+  _local_PFNGLXGETVISUALFROMFBCONFIG ptr_glXGetVisualFromFBConfig;
   XVisualInfo *  _res;
   jobject jbyteSource;
   jobject jbyteCopy;
-  _res = glXGetVisualFromFBConfig((Display *) (intptr_t) dpy, (GLXFBConfig) (intptr_t) config);
+  ptr_glXGetVisualFromFBConfig = (_local_PFNGLXGETVISUALFROMFBCONFIG) (intptr_t) procAddress;
+  assert(ptr_glXGetVisualFromFBConfig != NULL);
+  _res = (* ptr_glXGetVisualFromFBConfig) ((Display *) (intptr_t) dpy, (GLXFBConfig) (intptr_t) config);
   if (_res == NULL) return NULL;
 
   _initClazzAccess(env);
 
   jbyteSource = (*env)->NewDirectByteBuffer(env, _res, sizeof(XVisualInfo));
-  jbyteCopy   = (*env)->CallStaticObjectMethod(env,
-                                               clazzInternalBufferUtil, cstrInternalBufferUtil, jbyteSource);
+  jbyteCopy   = (*env)->CallStaticObjectMethod(env, clazzBuffers, cstrBuffers, jbyteSource);
 
   (*env)->DeleteLocalRef(env, jbyteSource);
   XFree(_res);
@@ -90,20 +93,24 @@ Java_com_jogamp_opengl_impl_x11_glx_GLX_glXGetVisualFromFBConfigCopied0__JJ(JNIE
  *     C function: GLXFBConfig *  glXChooseFBConfig(Display *  dpy, int screen, const int *  attribList, int *  nitems);
  */
 JNIEXPORT jobject JNICALL 
-Java_com_jogamp_opengl_impl_x11_glx_GLX_glXChooseFBConfigCopied1__JILjava_lang_Object_2ILjava_lang_Object_2I(JNIEnv *env, jclass _unused, jlong dpy, jint screen, jobject attribList, jint attribList_byte_offset, jobject nitems, jint nitems_byte_offset) {
+Java_com_jogamp_opengl_impl_x11_glx_GLX_dispatch_1glXChooseFBConfig(JNIEnv *env, jclass _unused, jlong dpy, jint screen, jobject attribList, jint attribList_byte_offset, jobject nitems, jint nitems_byte_offset, jlong procAddress) {
+  typedef GLXFBConfig* (APIENTRY*_local_PFNGLXCHOOSEFBCONFIG)(Display *  dpy, int screen, const int *  attribList, int *  nitems);
+  _local_PFNGLXCHOOSEFBCONFIG ptr_glXChooseFBConfig;
   int * _ptr2 = NULL;
   int * _ptr3 = NULL;
   GLXFBConfig *  _res;
   int count;
   jobject jbyteSource;
   jobject jbyteCopy;
+  ptr_glXChooseFBConfig = (_local_PFNGLXCHOOSEFBCONFIG) (intptr_t) procAddress;
+  assert(ptr_glXChooseFBConfig != NULL);
   if (attribList != NULL) {
     _ptr2 = (int *) (((char*) (*env)->GetPrimitiveArrayCritical(env, attribList, NULL)) + attribList_byte_offset);
   }
   if (nitems != NULL) {
     _ptr3 = (int *) (((char*) (*env)->GetPrimitiveArrayCritical(env, nitems, NULL)) + nitems_byte_offset);
   }
-  _res = glXChooseFBConfig((Display *) (intptr_t) dpy, (int) screen, (int *) _ptr2, (int *) _ptr3);
+  _res = (*ptr_glXChooseFBConfig)((Display *) (intptr_t) dpy, (int) screen, (int *) _ptr2, (int *) _ptr3);
   count = _ptr3[0];
   if (attribList != NULL) {
     (*env)->ReleasePrimitiveArrayCritical(env, attribList, _ptr2, 0);
@@ -116,8 +123,7 @@ Java_com_jogamp_opengl_impl_x11_glx_GLX_glXChooseFBConfigCopied1__JILjava_lang_O
   _initClazzAccess(env);
 
   jbyteSource = (*env)->NewDirectByteBuffer(env, _res, count * sizeof(GLXFBConfig));
-  jbyteCopy   = (*env)->CallStaticObjectMethod(env,
-                                               clazzInternalBufferUtil, cstrInternalBufferUtil, jbyteSource);
+  jbyteCopy   = (*env)->CallStaticObjectMethod(env, clazzBuffers, cstrBuffers, jbyteSource);
   (*env)->DeleteLocalRef(env, jbyteSource);
   XFree(_res);
 
@@ -130,15 +136,19 @@ Java_com_jogamp_opengl_impl_x11_glx_GLX_glXChooseFBConfigCopied1__JILjava_lang_O
  *     C function: XVisualInfo *  glXChooseVisual(Display *  dpy, int screen, int *  attribList);
  */
 JNIEXPORT jobject JNICALL 
-Java_com_jogamp_opengl_impl_x11_glx_GLX_glXChooseVisualCopied1__JILjava_lang_Object_2I(JNIEnv *env, jclass _unused, jlong dpy, jint screen, jobject attribList, jint attribList_byte_offset) {
+Java_com_jogamp_opengl_impl_x11_glx_GLX_dispatch_1glXChooseVisual(JNIEnv *env, jclass _unused, jlong dpy, jint screen, jobject attribList, jint attribList_byte_offset, jlong procAddress) {
+  typedef XVisualInfo* (APIENTRY*_local_PFNGLXCHOOSEVISUAL)(Display *  dpy, int screen, int *  attribList);
+  _local_PFNGLXCHOOSEVISUAL ptr_glXChooseVisual;
   int * _ptr2 = NULL;
   XVisualInfo *  _res;
   jobject jbyteSource;
   jobject jbyteCopy;
+  ptr_glXChooseVisual = (_local_PFNGLXCHOOSEVISUAL) (intptr_t) procAddress;
+  assert(ptr_glXChooseVisual != NULL);
   if (attribList != NULL) {
     _ptr2 = (int *) (((char*) (*env)->GetPrimitiveArrayCritical(env, attribList, NULL)) + attribList_byte_offset);
   }
-  _res = glXChooseVisual((Display *) (intptr_t) dpy, (int) screen, (int *) _ptr2);
+  _res = (*ptr_glXChooseVisual)((Display *) (intptr_t) dpy, (int) screen, (int *) _ptr2);
   if (attribList != NULL) {
     (*env)->ReleasePrimitiveArrayCritical(env, attribList, _ptr2, 0);
   }
@@ -147,8 +157,7 @@ Java_com_jogamp_opengl_impl_x11_glx_GLX_glXChooseVisualCopied1__JILjava_lang_Obj
   _initClazzAccess(env);
 
   jbyteSource = (*env)->NewDirectByteBuffer(env, _res, sizeof(XVisualInfo));
-  jbyteCopy   = (*env)->CallStaticObjectMethod(env,
-                                               clazzInternalBufferUtil, cstrInternalBufferUtil, jbyteSource);
+  jbyteCopy   = (*env)->CallStaticObjectMethod(env, clazzBuffers, cstrBuffers, jbyteSource);
 
   (*env)->DeleteLocalRef(env, jbyteSource);
   XFree(_res);
index fe81cd6..0c3693b 100644 (file)
@@ -1,46 +1,58 @@
 
   /** Interface to C language function: <br> - Alias for: <br> <code> XVisualInfo *  glXGetVisualFromFBConfigSGIX, glXGetVisualFromFBConfig(Display *  dpy, GLXFBConfig config); </code>    */
-  public static XVisualInfo glXGetVisualFromFBConfigCopied(long dpy, long config)
+  public static XVisualInfo glXGetVisualFromFBConfig(long dpy, long config)
   {
+    final long __addr_ = glxProcAddressTable._addressof_glXGetVisualFromFBConfig;
+    if (__addr_ == 0) {
+        throw new GLException("Method \"glXGetVisualFromFBConfig\" not available");
+    }
     java.nio.ByteBuffer _res;
-    _res = glXGetVisualFromFBConfigCopied0(dpy, config);
+    _res = dispatch_glXGetVisualFromFBConfig(dpy, config, __addr_);
     if (_res == null) return null;
     return XVisualInfo.create(_res);
   }
 
   /** Entry point to C language function: - Alias for: <br> <code> XVisualInfo *  glXGetVisualFromFBConfigSGIX, glXGetVisualFromFBConfig(Display *  dpy, GLXFBConfig config); </code>    */
-  private static native java.nio.ByteBuffer glXGetVisualFromFBConfigCopied0(long dpy, long config);
+  private static native java.nio.ByteBuffer dispatch_glXGetVisualFromFBConfig(long dpy, long config, long procAddr);
 
 
   /** Interface to C language function: <br> - Alias for: <br> <code> GLXFBConfig *  glXChooseFBConfigSGIX, glXChooseFBConfig(Display *  dpy, int screen, const int *  attribList, int *  nitems); </code>    */
-  public static com.jogamp.common.nio.PointerBuffer glXChooseFBConfigCopied(long dpy, int screen, int[] attribList, int attribList_offset, int[] nitems, int nitems_offset)
+  public static com.jogamp.common.nio.PointerBuffer glXChooseFBConfig(long dpy, int screen, int[] attribList, int attribList_offset, int[] nitems, int nitems_offset)
   {
+    final long __addr_ = glxProcAddressTable._addressof_glXChooseFBConfig;
+    if (__addr_ == 0) {
+        throw new GLException("Method \"glXGetVisualFromFBConfig\" not available");
+    }
     if(attribList != null && attribList.length <= attribList_offset)
       throw new GLException("array offset argument \"attribList_offset\" (" + attribList_offset + ") equals or exceeds array length (" + attribList.length + ")");
     if(nitems != null && nitems.length <= nitems_offset)
       throw new GLException("array offset argument \"nitems_offset\" (" + nitems_offset + ") equals or exceeds array length (" + nitems.length + ")");
     java.nio.ByteBuffer _res;
-    _res = glXChooseFBConfigCopied1(dpy, screen, attribList, Buffers.SIZEOF_INT * attribList_offset, nitems, Buffers.SIZEOF_INT * nitems_offset);
+    _res = dispatch_glXChooseFBConfig(dpy, screen, attribList, Buffers.SIZEOF_INT * attribList_offset, nitems, Buffers.SIZEOF_INT * nitems_offset, __addr_);
 
     if (_res == null) return null;
     return PointerBuffer.wrap(_res);
   }
 
   /** Entry point to C language function: - Alias for: <br> <code> GLXFBConfig *  glXChooseFBConfigSGIX, glXChooseFBConfig(Display *  dpy, int screen, const int *  attribList, int *  nitems); </code>    */
-  private static native java.nio.ByteBuffer glXChooseFBConfigCopied1(long dpy, int screen, Object attribList, int attribList_byte_offset, Object nitems, int nitems_byte_offset);
+  private static native java.nio.ByteBuffer dispatch_glXChooseFBConfig(long dpy, int screen, Object attribList, int attribList_byte_offset, Object nitems, int nitems_byte_offset, long procAddr);
 
   /** Interface to C language function: <br> - Alias for: <br> <code> XVisualInfo *  glXChooseVisual(Display *  dpy, int screen, int *  attribList); </code>    */
-  public static XVisualInfo glXChooseVisualCopied(long dpy, int screen, int[] attribList, int attribList_offset)
+  public static XVisualInfo glXChooseVisual(long dpy, int screen, int[] attribList, int attribList_offset)
   {
+    final long __addr_ = glxProcAddressTable._addressof_glXChooseVisual;
+    if (__addr_ == 0) {
+        throw new GLException("Method \"glXChooseVisual\" not available");
+    }
     if(attribList != null && attribList.length <= attribList_offset)
       throw new GLException("array offset argument \"attribList_offset\" (" + attribList_offset + ") equals or exceeds array length (" + attribList.length + ")");
     java.nio.ByteBuffer _res;
-    _res = glXChooseVisualCopied1(dpy, screen, attribList, Buffers.SIZEOF_INT * attribList_offset);
+    _res = dispatch_glXChooseVisual(dpy, screen, attribList, Buffers.SIZEOF_INT * attribList_offset, __addr_);
 
     if (_res == null) return null;
     return XVisualInfo.create(_res);
   }
 
   /** Entry point to C language function: - Alias for: <br> <code> XVisualInfo *  glXChooseVisual(Display *  dpy, int screen, int *  attribList); </code>    */
-  private static native java.nio.ByteBuffer glXChooseVisualCopied1(long dpy, int screen, Object attribList, int attribList_byte_offset);
+  private static native java.nio.ByteBuffer dispatch_glXChooseVisual(long dpy, int screen, Object attribList, int attribList_byte_offset, long procAddr);
 
index f451fa7..dee1d01 100644 (file)
@@ -5,7 +5,7 @@ NativeOutputDir gensrc/native/jogl/X11
 
 Package com.jogamp.opengl.impl.x11.glx
 JavaClass GLX
-Style allstatic
+Style AllStatic
 Include gl-common.cfg
 Include gl-common-extensions.cfg
 Include gl-desktop.cfg
@@ -13,16 +13,17 @@ Include gl-desktop.cfg
 GLHeader GL/glx.h
 GLHeader GL/glxext.h
 
+ForceProcAddressGen __ALL__
+LocalProcAddressCallingConvention __ALL__ APIENTRY
+
+AllowNonGLExtensions true
 EmitProcAddressTable true
 ProcAddressTableClassName GLXProcAddressTable
 GetProcAddressTableExpr glxProcAddressTable
-# This must be present for bootstrapping
-SkipProcAddressGen glXGetProcAddressARB
 
 Import com.jogamp.nativewindow.impl.x11.*
 Import com.jogamp.gluegen.runtime.opengl.GLProcAddressResolver
 
-
 CustomJavaCode GLX private static GLXProcAddressTable glxProcAddressTable = new GLXProcAddressTable(new GLProcAddressResolver());
 CustomJavaCode GLX public  static GLXProcAddressTable getGLXProcAddressTable() { return glxProcAddressTable; }
 
@@ -36,13 +37,16 @@ Opaque long GLXFBConfig
 Ignore glXCreateContextAttribsARB
 
 #
-# We have Custom code for the following
-Ignore glXGetVisualFromFBConfig
+# We have manual code for the following (copying the return values)
 Ignore glXGetVisualFromFBConfigSGIX
-Ignore glXChooseFBConfig
-Ignore glXChooseVisual
-
-# Ignore everything not in the GLX core (up through GLX 1.4) aside from glXGetProcAddress
+ManuallyImplement glXGetVisualFromFBConfig
+ManuallyImplement glXChooseFBConfig
+ManuallyImplement glXChooseVisual
+ForceProcAddressGen glXGetVisualFromFBConfig
+ForceProcAddressGen glXChooseFBConfig
+ForceProcAddressGen glXChooseVisual
+
+# Ignore everything not in the GLX core (up through GLX 1.4)
 # FIXME: this needs to be kept in sync with the stub headers more than usual
 Ignore glXFreeContextEXT
 Ignore glXGetContextIDEXT
@@ -86,3 +90,11 @@ Ignore GLXHyperpipeConfigSGIX
 Ignore GLXPipeRect
 Ignore GLXPipeRectLimits
 
+CustomJavaCode GLX  protected static long glXGetProcAddress(long glXGetProcAddressHandle, java.lang.String procname)
+CustomJavaCode GLX  {
+CustomJavaCode GLX    if (glXGetProcAddressHandle == 0) {
+CustomJavaCode GLX      throw new GLException("Passed null pointer for method \"glXGetProcAddress\"");
+CustomJavaCode GLX    }
+CustomJavaCode GLX    return dispatch_glXGetProcAddress1(procname, glXGetProcAddressHandle);
+CustomJavaCode GLX  }
+
index 1dfc8fc..aeed3af 100755 (executable)
@@ -95,7 +95,6 @@ Ignore glXGetCurrentReadDrawable
 Ignore glXQueryContext
 Ignore glXSelectEvent
 Ignore glXGetSelectedEvent
-Ignore glXGetProcAddress
 
 # Ignore a few extensions that bring in data types we don't want to
 # expose in the public API (and that are useless anyway without
index 69f8c75..97938a8 100644 (file)
@@ -5,16 +5,27 @@ NativeOutputDir gensrc/native/jogl/Windows
 
 Package com.jogamp.opengl.impl.windows.wgl
 JavaClass WGL
-Style allstatic
+Style AllStatic
 Include gl-common.cfg
 Include gl-common-extensions.cfg
 Include gl-desktop.cfg
 
-AllowNonGLExtensions true
-
 GLHeader wingdi.h
 GLHeader GL/wglext.h
 
+ForceProcAddressGen __ALL__
+LocalProcAddressCallingConvention __ALL__ APIENTRY
+
+AllowNonGLExtensions true
+EmitProcAddressTable true
+ProcAddressTableClassName WGLProcAddressTable
+GetProcAddressTableExpr wglProcAddressTable
+
+Import com.jogamp.gluegen.runtime.opengl.GLProcAddressResolver
+
+CustomJavaCode WGL private static WGLProcAddressTable wglProcAddressTable = new WGLProcAddressTable(new GLProcAddressResolver());
+CustomJavaCode WGL public  static WGLProcAddressTable getWGLProcAddressTable() { return wglProcAddressTable; }
+
 # Implement the first argument to wglGetProcAddress as String instead
 # of byte[]
 ArgumentIsString wglGetProcAddress 0
@@ -28,8 +39,6 @@ CustomCCode #include <stddef.h>
 
 Include ../intptr.cfg
 
-IncludeAs CustomCCode wgl-CustomCCode.c
-
 DropUniqVendorExtensions AMD
 # We need GL_APPLE_float_pixels for our pbuffer implementation
 # DropUniqVendorExtensions APPLE
@@ -45,3 +54,11 @@ DropUniqVendorExtensions SGIX
 DropUniqVendorExtensions SUN
 DropUniqVendorExtensions WIN
 
+CustomJavaCode WGL  protected static long wglGetProcAddress(long wglGetProcAddressHandle, java.lang.String procname)
+CustomJavaCode WGL  {
+CustomJavaCode WGL    if (wglGetProcAddressHandle == 0) {
+CustomJavaCode WGL      throw new GLException("Passed null pointer for method \"wglGetProcAddress\"");
+CustomJavaCode WGL    }
+CustomJavaCode WGL    return dispatch_wglGetProcAddress1(procname, wglGetProcAddressHandle);
+CustomJavaCode WGL  }
+
index 35c43cb..aca757b 100644 (file)
@@ -36,6 +36,9 @@ GLHeader GL/wglext.h
 IgnoreExtension WGL_OML_sync_control
 IgnoreExtension WGL_NV_gpu_affinity
 
+IgnoreExtension WGL_EXT_make_current_read
+RenameExtensionIntoCore WGL_ARB_make_current_read
+
 CustomJavaCode WGLExt      public boolean isFunctionAvailable(String glFunctionName);
 CustomJavaCode WGLExt      public boolean isExtensionAvailable(String glExtensionName);
 
index 87d0824..3223a74 100755 (executable)
@@ -5,7 +5,7 @@ public static JAWT getJAWT() {
   if (jawt == null) {
     synchronized (JAWT.class) {
       if (jawt == null) {
-        JAWTUtil.init();
+        JAWTUtil.initSingleton();
         // Workaround for 4845371.
         // Make sure the first reference to the JNI GetDirectBufferAddress is done
         // from a privileged context so the VM's internal class lookups will succeed.
index 5919ddc..41f7269 100644 (file)
@@ -3,12 +3,12 @@
   } 
 
   /** Interface to C language function: <br> <code> XVisualInfo *  XGetVisualInfo(Display * , long, XVisualInfo * , int * ); </code>    */
-  public static XVisualInfo[] XGetVisualInfoCopied(long arg0, long arg1, XVisualInfo arg2, int[] arg3, int arg3_offset)
+  public static XVisualInfo[] XGetVisualInfo(long arg0, long arg1, XVisualInfo arg2, int[] arg3, int arg3_offset)
   {
     if(arg3 != null && arg3.length <= arg3_offset)
       throw new RuntimeException("array offset argument \"arg3_offset\" (" + arg3_offset + ") equals or exceeds array length (" + arg3.length + ")");
     java.nio.ByteBuffer _res;
-    _res = XGetVisualInfoCopied1(arg0, arg1, ((arg2 == null) ? null : arg2.getBuffer()), arg3, Buffers.SIZEOF_INT * arg3_offset);
+    _res = XGetVisualInfo1(arg0, arg1, ((arg2 == null) ? null : arg2.getBuffer()), arg3, Buffers.SIZEOF_INT * arg3_offset);
 
     if (_res == null) return null;
     Buffers.nativeOrder(_res);
@@ -25,7 +25,7 @@
   }
 
   /** Entry point to C language function: <code> XVisualInfo *  XGetVisualInfo(Display * , long, XVisualInfo * , int * ); </code>    */
-  private static native java.nio.ByteBuffer XGetVisualInfoCopied1(long arg0, long arg1, java.nio.ByteBuffer arg2, Object arg3, int arg3_byte_offset);
+  private static native java.nio.ByteBuffer XGetVisualInfo1(long arg0, long arg1, java.nio.ByteBuffer arg2, Object arg3, int arg3_byte_offset);
 
   public static native long DefaultVisualID(long display, int screen);
 
index 1033a28..413920e 100644 (file)
@@ -8,7 +8,6 @@
 
       <linker id="linker.cfg.linux.jogl.gl2" extends="linker.cfg.linux.jogl.x11">
         <syslibset dir="/devtools/i686-unknown-linux-gnu/xfree86-4.3.0-linux-ix86-glibc23/lib" libs="GL"/>
-        <syslibset dir="${x11.cg.lib}" libs="Cg, CgGL" if="c.compiler.use-cglib"/>
       </linker>
 </target>
 </project>
index 1a123d7..7945cec 100644 (file)
@@ -9,14 +9,3 @@
 # home directory alongside this file and that copy also modified appropriately.
 # See that file for additional properties required by the build.
 #
-
-#
-# If you are building the Cg binding (by specifying -Djogl.cg=1 to the
-# Ant build) and have installed the Cg SDK in somewhere other than the
-# default location, modify the appropriate variable to point to the
-# absolute path of the lib directory
-#
-windows.cg.lib32=C:/Cg-2.2/bin
-windows.cg.lib64=C:/Cg-2.2/bin.x64
-x11.cg.lib32=/usr/lib32
-x11.cg.lib64=/usr/lib64
index b60f9c7..21fd52e 100644 (file)
@@ -8,7 +8,6 @@
 
       <linker id="linker.cfg.linux.nwi.gl2" extends="linker.cfg.linux.nwi.x11">
         <syslibset dir="/devtools/i686-unknown-linux-gnu/xfree86-4.3.0-linux-ix86-glibc23/lib" libs="GL"/>
-        <syslibset dir="${x11.cg.lib}" libs="Cg, CgGL" if="c.compiler.use-cglib"/>
       </linker>
 </target>
 </project>
index 973ef96..ab40515 100644 (file)
@@ -8,7 +8,6 @@
 
       <linker id="linker.cfg.linux.newt.gl2" extends="linker.cfg.linux.newt.x11">
         <syslibset dir="/devtools/i686-unknown-linux-gnu/xfree86-4.3.0-linux-ix86-glibc23/lib" libs="GL"/>
-        <syslibset dir="${x11.cg.lib}" libs="Cg, CgGL" if="c.compiler.use-cglib"/>
       </linker>
 </target>
 </project>
index 622ed1b..0188ae5 100755 (executable)
@@ -17,6 +17,11 @@ if [ "$1" = "-libdir" ] ; then
     shift
     LD_LIBRARY_PATH=$PRELIB:$LD_LIBRARY_PATH
     export LD_LIBRARY_PATH
+    # Mesa/Gallium  EGL driver
+    EGL_DRIVER=$PRELIB/egl_glx.so
+    export EGL_DRIVER
+    # unset DRI/ATI ..
+    unset LIBGL_DRIVERS_PATH
 fi
 
 if [ -z "$1" ] ; then
@@ -31,19 +36,27 @@ shift
 MOSX=0
 uname -a | grep -i Darwin && MOSX=1
 
-D_ARGS="-Dgluegen.debug.ProcAddressHelper=true -Dgluegen.debug.NativeLibrary=true -Djogl.debug=all"
-# D_ARGS="-Dgluegen.debug.ProcAddressHelper=true -Dgluegen.debug.NativeLibrary=true -Dnativewindow.debug=all -Djogl.debug=all -Dnewt.debug=all"
+# D_ARGS="-Djogamp.debug.ProcAddressHelper=true -Djogamp.debug.NativeLibrary=true -Djogl.debug=all"
+# D_ARGS="-Djogamp.debug.ProcAddressHelper=true -Djogamp.debug.NativeLibrary=true -Dnativewindow.debug=all -Djogl.debug=all -Dnewt.debug=all"
 # D_ARGS="-Dnativewindow.debug=all -Djogl.debug=all -Dnewt.debug=all -Djogl.debug.GLSLState"
 # D_ARGS="-Dnativewindow.debug.X11Util=true -Djogl.debug.GLDrawableFactory=true"
 # D_ARGS="-Dnativewindow.debug.X11Util=true"
 # D_ARGS="-Dnewt.debug=all -Dnativewindow.debug=all"
+# D_ARGS="-Djogl.debug=all -Dnewt.debug=all -Dnativewindow.debug=all"
 # D_ARGS="-Dnewt.debug=all"
 # D_ARGS="-Dnewt.debug.Window"
 # D_ARGS="-Dnewt.debug.Display"
+# D_ARGS="-Djogl.debug=all -Djogl.debug.DynamicLookup=true -Djogamp.debug.NativeLibrary=true"
 # D_ARGS="-Djogl.debug=all"
+# D_ARGS="-Djogamp.debug.JNILibLoader=true -Djogamp.debug.NativeLibrary=true -Djogamp.debug.NativeLibrary.Lookup=true -Djogl.debug.GLProfile=true"
 
 rm -f java-run.log
 
+# export LIBGL_DRIVERS_PATH=/usr/lib/fglrx/dri:/usr/lib32/fglrx/dri
+# export LIBGL_DEBUG=verbose
 echo LIBXCB_ALLOW_SLOPPY_LOCK: $LIBXCB_ALLOW_SLOPPY_LOCK 2>&1 | tee -a java-run.log
+echo LIBGL_DRIVERS_PATH: $LIBGL_DRIVERS_PATH 2>&1 | tee -a java-run.log
+echo LIBGL_DEBUG: $LIBGL_DEBUG 2>&1 | tee -a java-run.log
 echo java $X_ARGS $D_ARGS $* 2>&1 | tee -a java-run.log
 java $X_ARGS $D_ARGS $* 2>&1 | tee -a java-run.log
+
index 796e22d..9fbe4e5 100755 (executable)
@@ -38,7 +38,8 @@ fi
 # D_ARGS="-Dgluegen.debug.ProcAddressHelper=true -Dgluegen.debug.NativeLibrary=true -Dnativewindow.debug=all -Djogl.debug=all -Dnewt.debug=all"
 # D_ARGS="-Dnativewindow.debug=all -Djogl.debug=all -Dnewt.debug=all -Djogl.debug.GLSLState"
 # D_ARGS="-Dnativewindow.debug.X11Util=true -Djogl.debug.GLDrawableFactory=true"
-# D_ARGS="-Dnativewindow.debug.X11Util=true"
+# D_ARGS="-Dnativewindow.debug.X11Util=true -Dnewt.debug.Display=true"
 # D_ARGS="-Dnewt.debug=all"
+# D_ARGS="-Dnativewindow.debug=all -Djogl.debug=all -Dnewt.debug=all"
 
 java $X_ARGS -Djava.awt.headless=true $D_ARGS com.jogamp.newt.util.MainThread $* 2>&1 | tee java-run-newt.log
index 5033f5f..76b46a0 100644 (file)
@@ -28,7 +28,7 @@ if [ "$1" = "-libdir" ] ; then
 fi
 
 
-# -Djogl.cg=1 -Dx11.cg.lib=../../lib-linux-x86_64
+# -Djogl.cg=1
 #    -Dc.compiler.debug=true 
 #    -DuseOpenMAX=true \
 #    -Dbuild.noarchives=true
@@ -37,19 +37,29 @@ fi
 #    -DisLinux=true \
 #    -DisLinuxX86=true \
 #    -DisX11=true \
-#    -Djogl.cg=1 -Dx11.cg.lib=../../lib-linux-x86 \
+#    -Djogl.cg=1 \
 
 #LD_LIBRARY_PATH=/opt-linux-x86_64/mesa-7.8.1/lib64
 #export LD_LIBRARY_PATH
 
+LOGF=make.jogl.all.linux-x86.log
+rm -f $LOGF
+
+# export LIBGL_DRIVERS_PATH=/usr/lib/fglrx/dri:/usr/lib32/fglrx/dri
+# export LIBGL_DEBUG=verbose
+echo LIBXCB_ALLOW_SLOPPY_LOCK: $LIBXCB_ALLOW_SLOPPY_LOCK 2>&1 | tee -a $LOGF
+echo LIBGL_DRIVERS_PATH: $LIBGL_DRIVERS_PATH 2>&1 | tee -a $LOGF
+echo LIBGL_DEBUG: $LIBGL_DEBUG 2>&1 | tee -a $LOGF
+
 ant \
     $CUSTOMLIBDIR \
     -Dbuild.noarchives=true \
     -Dgluegen-cpptasks.file=`pwd`/../../gluegen/make/lib/gluegen-cpptasks-linux-32bit.xml \
     -Dbuild.noarchives=true \
-    -Djogl.cg=1 -Dx11.cg.lib=../../lib-linux-x86 \
+    -Djogl.cg=1 \
     -Drootrel.build=build-x86 \
     -Dos.arch=x86 \
     -DuseKD=true \
     -DuseOpenMAX=true \
-    $* 2>&1 | tee make.jogl.all.linux-x86.log
+    $* 2>&1 | tee -a $LOGF
+
index b17cd2f..2208486 100644 (file)
@@ -27,7 +27,7 @@ if [ "$1" = "-libdir" ] ; then
     shift
 fi
 
-# -Djogl.cg=1 -Dx11.cg.lib=../../lib-linux-x86_64
+# -Djogl.cg=1
 #    -Dc.compiler.debug=true \
 #    -Dbuild.noarchives=true \
 
@@ -41,11 +41,21 @@ fi
 #LD_LIBRARY_PATH=/opt-linux-x86_64/mesa-7.8.1/lib64
 #export LD_LIBRARY_PATH
 
+LOGF=make.jogl.all.linux-x86_64.log
+rm -f $LOGF
+
+# export LIBGL_DRIVERS_PATH=/usr/lib/fglrx/dri:/usr/lib32/fglrx/dri
+# export LIBGL_DEBUG=verbose
+echo LIBXCB_ALLOW_SLOPPY_LOCK: $LIBXCB_ALLOW_SLOPPY_LOCK 2>&1 | tee -a $LOGF
+echo LIBGL_DRIVERS_PATH: $LIBGL_DRIVERS_PATH 2>&1 | tee -a $LOGF
+echo LIBGL_DEBUG: $LIBGL_DEBUG 2>&1 | tee -a $LOGF
+
 ant  \
     $CUSTOMLIBDIR \
     -Dbuild.noarchives=true \
-    -Djogl.cg=1 -Dx11.cg.lib=../../lib-linux-x86_64 \
+    -Djogl.cg=1 \
     -Drootrel.build=build-x86_64 \
     -DuseKD=true \
     -DuseOpenMAX=true \
-    $* 2>&1 | tee make.jogl.all.linux-x86_64.log
+    $* 2>&1 | tee -a $LOGF
+
index cea1317..528e153 100644 (file)
@@ -11,7 +11,7 @@ set CLASSPATH=.;%THISDIR%\build-win32\classes
 REM    -Dc.compiler.debug=true \r
 REM    -DuseOpenMAX=true \r
 REM    -DuseKD=true\r
-REM    -Djogl.cg=1 -D-Dwindows.cg.lib=C:\Cg-2.2\r
+REM    -Djogl.cg=1\r
 REM    -Dbuild.noarchives=true\r
 \r
-ant -Dbuild.noarchives=true -Drootrel.build=build-win32 -Djogl.cg=1 -Dwindows.cg.lib=C:\Cg-2.2\bin %1 %2 %3 %4 %5 %6 %7 %8 %9 > make.jogl.all.win32.log 2>&1\r
+ant -Dbuild.noarchives=true -Drootrel.build=build-win32 -Djogl.cg=1 %1 %2 %3 %4 %5 %6 %7 %8 %9 > make.jogl.all.win32.log 2>&1\r
index 5ce53e4..b8d8cc6 100644 (file)
@@ -11,7 +11,7 @@ set CLASSPATH=.;%THISDIR%\build-win64\classes
 REM    -Dc.compiler.debug=true \r
 REM    -DuseOpenMAX=true \r
 REM    -DuseKD=true\r
-REM    -Djogl.cg=1 -D-Dwindows.cg.lib=C:\Cg-2.2\r
+REM    -Djogl.cg=1\r
 REM    -Dbuild.noarchives=true\r
 \r
-ant -Dbuild.noarchives=true -Drootrel.build=build-win64 -Djogl.cg=1 -Dwindows.cg.lib=C:\Cg-2.2\bin.x64 %1 %2 %3 %4 %5 %6 %7 %8 %9 > make.jogl.all.win64.log 2>&1\r
+ant -Dbuild.noarchives=true -Drootrel.build=build-win64 -Djogl.cg=1 %1 %2 %3 %4 %5 %6 %7 %8 %9 > make.jogl.all.win64.log 2>&1\r
diff --git a/make/stub_includes/win32/window-system1.c b/make/stub_includes/win32/window-system1.c
new file mode 100644 (file)
index 0000000..f74488c
--- /dev/null
@@ -0,0 +1,2 @@
+#include <windows.h>
+#include <winwgl.h>
index 647a573..20d424a 100644 (file)
@@ -34,14 +34,6 @@ typedef unsigned int        UINT;
 typedef unsigned short      USHORT;
 typedef unsigned short      WORD;
 
-typedef struct tagRECT
-    {
-    LONG left;
-    LONG top;
-    LONG right;
-    LONG bottom;
-    }  RECT;
-
 /* Necessary handle typedefs for parsing wglext.h */
 
 typedef HANDLE              HPBUFFERARB;
index a0a4194..4a034e8 100644 (file)
@@ -8,6 +8,15 @@
 
 #ifndef WGL_GDI_VERSION_1_X
 
+/**
+typedef struct tagRECT
+    {
+    LONG left;
+    LONG top;
+    LONG right;
+    LONG bottom;
+    }  RECT; */
+
 typedef struct tagRGBQUAD {
         BYTE    rgbBlue;
         BYTE    rgbGreen;
@@ -85,37 +94,6 @@ typedef struct tagPIXELFORMATDESCRIPTOR
 #define PFD_MAIN_PLANE       0
 #define PFD_OVERLAY_PLANE    1
 #define PFD_UNDERLAY_PLANE   (-1)
-#define WGL_SWAP_MAIN_PLANE 1
-#define WGL_SWAP_OVERLAY1 2
-#define WGL_SWAP_OVERLAY2 4
-#define WGL_SWAP_OVERLAY3 8
-#define WGL_SWAP_OVERLAY4 16
-#define WGL_SWAP_OVERLAY5 32
-#define WGL_SWAP_OVERLAY6 64
-#define WGL_SWAP_OVERLAY7 128
-#define WGL_SWAP_OVERLAY8 256
-#define WGL_SWAP_OVERLAY9 512
-#define WGL_SWAP_OVERLAY10 1024
-#define WGL_SWAP_OVERLAY11 2048
-#define WGL_SWAP_OVERLAY12 4096
-#define WGL_SWAP_OVERLAY13 8192
-#define WGL_SWAP_OVERLAY14 16384
-#define WGL_SWAP_OVERLAY15 32768
-#define WGL_SWAP_UNDERLAY1 65536
-#define WGL_SWAP_UNDERLAY2 0x20000
-#define WGL_SWAP_UNDERLAY3 0x40000
-#define WGL_SWAP_UNDERLAY4 0x80000
-#define WGL_SWAP_UNDERLAY5 0x100000
-#define WGL_SWAP_UNDERLAY6 0x200000
-#define WGL_SWAP_UNDERLAY7 0x400000
-#define WGL_SWAP_UNDERLAY8 0x800000
-#define WGL_SWAP_UNDERLAY9 0x1000000
-#define WGL_SWAP_UNDERLAY10 0x2000000
-#define WGL_SWAP_UNDERLAY11 0x4000000
-#define WGL_SWAP_UNDERLAY12 0x8000000
-#define WGL_SWAP_UNDERLAY13 0x10000000
-#define WGL_SWAP_UNDERLAY14 0x20000000
-#define WGL_SWAP_UNDERLAY15 0x40000000
 
 /* PIXELFORMATDESCRIPTOR flags */
 #define PFD_DOUBLEBUFFER            0x00000001
@@ -178,16 +156,7 @@ WINGDIAPI int   WINAPI ChoosePixelFormat(HDC, CONST PIXELFORMATDESCRIPTOR *);
 WINGDIAPI int   WINAPI DescribePixelFormat(HDC, int, UINT, LPPIXELFORMATDESCRIPTOR);
 WINGDIAPI int   WINAPI GetPixelFormat(HDC);
 WINGDIAPI BOOL  WINAPI SetPixelFormat(HDC, int, CONST PIXELFORMATDESCRIPTOR *);
-WINGDIAPI BOOL  WINAPI wglCopyContext(HGLRC, HGLRC, UINT);
-WINGDIAPI HGLRC WINAPI wglCreateContext(HDC);
-WINGDIAPI BOOL  WINAPI wglDeleteContext(HGLRC);
-WINGDIAPI HGLRC WINAPI wglGetCurrentContext(VOID);
-WINGDIAPI HDC   WINAPI wglGetCurrentDC(VOID);
-WINGDIAPI BOOL  WINAPI wglMakeCurrent(HDC, HGLRC);
-WINGDIAPI BOOL  WINAPI wglShareLists(HGLRC, HGLRC);
 WINGDIAPI BOOL  WINAPI SwapBuffers(HDC);
-WINGDIAPI PROC  WINAPI wglGetProcAddress(LPCSTR);
-WINGDIAPI BOOL  WINAPI wglSwapLayerBuffers(HDC,UINT);
 
 /* --- FIXME: need to handle these entry points! 
 WINGDIAPI HGLRC WINAPI wglCreateLayerContext(HDC, int);
@@ -221,3 +190,4 @@ WINGDIAPI BOOL        WINAPI GetDeviceGammaRamp(HDC,LPVOID);
 WINGDIAPI BOOL        WINAPI SetDeviceGammaRamp(HDC,LPVOID);
 
 #endif /*  WGL_GDI_VERSION_1_X */
+
diff --git a/make/stub_includes/win32/winwgl.h b/make/stub_includes/win32/winwgl.h
new file mode 100644 (file)
index 0000000..27b43f9
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Essential wgl and supporting routines and data structures extracted
+ * from WINGDI.H.
+ *
+ * Copyright (c) 1985-1997, Microsoft Corp. All rights reserved.
+ *
+ */
+
+#ifndef WGL_GDI_VERSION_1_X
+
+/* layer types */
+#define WGL_SWAP_MAIN_PLANE 1
+#define WGL_SWAP_OVERLAY1 2
+#define WGL_SWAP_OVERLAY2 4
+#define WGL_SWAP_OVERLAY3 8
+#define WGL_SWAP_OVERLAY4 16
+#define WGL_SWAP_OVERLAY5 32
+#define WGL_SWAP_OVERLAY6 64
+#define WGL_SWAP_OVERLAY7 128
+#define WGL_SWAP_OVERLAY8 256
+#define WGL_SWAP_OVERLAY9 512
+#define WGL_SWAP_OVERLAY10 1024
+#define WGL_SWAP_OVERLAY11 2048
+#define WGL_SWAP_OVERLAY12 4096
+#define WGL_SWAP_OVERLAY13 8192
+#define WGL_SWAP_OVERLAY14 16384
+#define WGL_SWAP_OVERLAY15 32768
+#define WGL_SWAP_UNDERLAY1 65536
+#define WGL_SWAP_UNDERLAY2 0x20000
+#define WGL_SWAP_UNDERLAY3 0x40000
+#define WGL_SWAP_UNDERLAY4 0x80000
+#define WGL_SWAP_UNDERLAY5 0x100000
+#define WGL_SWAP_UNDERLAY6 0x200000
+#define WGL_SWAP_UNDERLAY7 0x400000
+#define WGL_SWAP_UNDERLAY8 0x800000
+#define WGL_SWAP_UNDERLAY9 0x1000000
+#define WGL_SWAP_UNDERLAY10 0x2000000
+#define WGL_SWAP_UNDERLAY11 0x4000000
+#define WGL_SWAP_UNDERLAY12 0x8000000
+#define WGL_SWAP_UNDERLAY13 0x10000000
+#define WGL_SWAP_UNDERLAY14 0x20000000
+#define WGL_SWAP_UNDERLAY15 0x40000000
+
+#endif /*  WGL_GDI_VERSION_1_X */
+
+#ifndef WGL_GDI_VERSION_1_X
+#define WGL_GDI_VERSION_1_X
+
+// OpenGL-related routines
+WINGDIAPI BOOL  WINAPI wglCopyContext(HGLRC, HGLRC, UINT);
+WINGDIAPI HGLRC WINAPI wglCreateContext(HDC);
+WINGDIAPI BOOL  WINAPI wglDeleteContext(HGLRC);
+WINGDIAPI HGLRC WINAPI wglGetCurrentContext(VOID);
+WINGDIAPI HDC   WINAPI wglGetCurrentDC(VOID);
+WINGDIAPI BOOL  WINAPI wglMakeCurrent(HDC, HGLRC);
+WINGDIAPI BOOL  WINAPI wglShareLists(HGLRC, HGLRC);
+WINGDIAPI PROC  WINAPI wglGetProcAddress(LPCSTR);
+WINGDIAPI BOOL  WINAPI wglSwapLayerBuffers(HDC,UINT);
+
+/* --- FIXME: need to handle these entry points! 
+WINGDIAPI HGLRC WINAPI wglCreateLayerContext(HDC, int);
+WINGDIAPI BOOL  WINAPI wglUseFontBitmapsA(HDC, DWORD, DWORD, DWORD);
+WINGDIAPI BOOL  WINAPI wglUseFontBitmapsW(HDC, DWORD, DWORD, DWORD);
+#ifdef UNICODE
+#define wglUseFontBitmaps  wglUseFontBitmapsW
+#else
+#define wglUseFontBitmaps  wglUseFontBitmapsA
+#endif // !UNICODE
+*/
+
+#endif /*  WGL_GDI_VERSION_1_X */
+
diff --git a/src/jogl/classes/com/jogamp/opengl/cg/CgDynamicLibraryBundleInfo.java b/src/jogl/classes/com/jogamp/opengl/cg/CgDynamicLibraryBundleInfo.java
new file mode 100644 (file)
index 0000000..c28e52d
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2010, Sven Gothel
+ * 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 Sven Gothel 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 Sven Gothel 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 com.jogamp.opengl.cg;
+
+import com.jogamp.common.os.DynamicLookupHelper;
+import com.jogamp.common.os.DynamicLibraryBundleInfo;
+import com.jogamp.common.os.NativeLibrary;
+import com.jogamp.common.os.Platform;
+import java.util.*;
+import java.security.*;
+import javax.media.opengl.GLException;
+
+public class CgDynamicLibraryBundleInfo implements DynamicLibraryBundleInfo {
+    private static List/*<String>*/ glueLibNames;
+    static {
+        glueLibNames = new ArrayList();
+        // glueLibNames.addAll(getGlueLibNamesPreload());
+        glueLibNames.add("jogl_cg");
+    }
+
+    public static final int getCgGlueLibIndex() {
+        return glueLibNames.size()-1;
+    }
+
+    protected CgDynamicLibraryBundleInfo() {
+        super();
+    }
+
+    /** Make Cg symbols available to CgGL */
+    public boolean shallLinkGlobal() { return true; }
+
+    /** default **/
+    public boolean shallLookupGlobal() { return false; }
+
+    /** Tool has none **/
+    public final List getToolGetProcAddressFuncNameList() {
+        return null;
+    }
+
+    /** Tool has none **/
+    public final long toolDynamicLookupFunction(long toolGetProcAddressHandle, String funcName) {
+        return 0;
+    }
+
+    public List/*<List<String>>*/ getToolLibNames() {
+        List/*<List>*/ libNamesList = new ArrayList();
+
+        libNamesList.add("Cg");
+        libNamesList.add("CgGL");
+
+        return libNamesList;
+    }
+
+    public final List/*<String>*/ getGlueLibNames() {
+        return glueLibNames;
+    }
+}
+
+
diff --git a/src/jogl/classes/com/jogamp/opengl/impl/DesktopGLDynamicLibraryBundleInfo.java b/src/jogl/classes/com/jogamp/opengl/impl/DesktopGLDynamicLibraryBundleInfo.java
new file mode 100755 (executable)
index 0000000..57a69af
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2010, Sven Gothel
+ * 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 Sven Gothel 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 Sven Gothel 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 com.jogamp.opengl.impl;
+
+import com.jogamp.common.os.DynamicLibraryBundleInfo;
+import java.util.List;
+import java.util.ArrayList;
+
+public abstract class DesktopGLDynamicLibraryBundleInfo extends GLDynamicLibraryBundleInfo {
+    private static int posGlueLibGL2ES12;
+    private static int posGlueLibGLDESKTOP;
+    private static List/*<String>*/ glueLibNames;
+    static {
+        glueLibNames = new ArrayList();
+
+        glueLibNames.addAll(getGlueLibNamesPreload());
+
+        posGlueLibGL2ES12 = glueLibNames.size();
+        glueLibNames.add("jogl_gl2es12");
+
+        posGlueLibGLDESKTOP = glueLibNames.size();
+        glueLibNames.add("jogl_desktop");
+    }
+
+    public static final int getGlueLibPosGL2ES12() { 
+        return posGlueLibGL2ES12; 
+    }
+
+    public static final int getGlueLibPosGLDESKTOP() { 
+        return posGlueLibGLDESKTOP; 
+    }
+
+    public DesktopGLDynamicLibraryBundleInfo() {
+        super();
+    }
+
+    public final List/*<String>*/ getGlueLibNames() {
+        return glueLibNames;
+    }
+}
+
index f9858df..4aeea9d 100755 (executable)
 
 package com.jogamp.opengl.impl;
 
-/**
- * Abstract implementation of the DynamicLookupHelper for GL,
- * which decouples it's dependencies to EGLDrawableFactory.
- *
- * Currently two implementations exist, one for ES1 and one for ES2.
- */
-public abstract class DesktopGLDynamicLookupHelper extends GLDynamicLookupHelper {
-    private boolean hasGLBinding = false;
-    private boolean hasGLES12Binding = false;
+import com.jogamp.common.os.DynamicLibraryBundle;
+import com.jogamp.common.os.DynamicLibraryBundleInfo;
+import com.jogamp.common.os.DynamicLookupHelper;
+import com.jogamp.common.os.NativeLibrary;
+import java.util.*;
+import java.security.*;
+import javax.media.opengl.GLException;
 
-    public boolean hasGLBinding() { return hasGLBinding; }
-    public boolean hasGLES12Binding() { return hasGLES12Binding; }
+public class DesktopGLDynamicLookupHelper extends GLDynamicLookupHelper {
 
-    protected void loadGLJNILibrary() {
-        Throwable t=null;
+    public DesktopGLDynamicLookupHelper(DesktopGLDynamicLibraryBundleInfo info) {
+        super(info);
+    }
 
-        try {
-            GLJNILibLoader.loadGLDesktop();
-            hasGLBinding = true;
-        } catch (UnsatisfiedLinkError ule) {
-            t=ule;
-        } catch (SecurityException se) {
-            t=se;
-        } catch (NullPointerException npe) {
-            t=npe;
-        } catch (RuntimeException re) {
-            t=re;
-        }
-        if(DEBUG && null!=t) {
-            System.err.println("DesktopGLDynamicLookupHelper: Desktop GL Binding Library not available");
-            t.printStackTrace();
-        }
+    public DesktopGLDynamicLibraryBundleInfo getDesktopGLBundleInfo() { return (DesktopGLDynamicLibraryBundleInfo) getBundleInfo(); }
 
-        try {
-            GLJNILibLoader.loadGLDesktopES12();
-            hasGLES12Binding = true;
-        } catch (UnsatisfiedLinkError ule) {
-            t=ule;
-        } catch (SecurityException se) {
-            t=se;
-        } catch (NullPointerException npe) {
-            t=npe;
-        } catch (RuntimeException re) {
-            t=re;
-        }
-        if(DEBUG && null!=t) {
-            System.err.println("DesktopGLDynamicLookupHelper: Desktop GLES12 Binding Library not available");
-            t.printStackTrace();
+    public boolean hasGLBinding() {
+        return isToolLibLoaded() && isGlueLibLoaded(DesktopGLDynamicLibraryBundleInfo.getGlueLibPosGLDESKTOP());
+    }
+
+    public boolean hasGLES12Binding() {
+        return isToolLibLoaded() && isGlueLibLoaded(DesktopGLDynamicLibraryBundleInfo.getGlueLibPosGL2ES12());
+    }
+
+    public synchronized boolean loadGLULibrary() {
+        /** hacky code .. where all platform GLU libs are tried ..*/
+        if(null==gluLib) {
+            List/*<String>*/ gluLibNames = new ArrayList();
+            gluLibNames.add("/System/Library/Frameworks/OpenGL.framework/Libraries/libGLU.dylib"); // osx
+            gluLibNames.add("libGLU.so"); // unix
+            gluLibNames.add("GLU32"); // windows
+            gluLibNames.add("GLU"); // generic
+            gluLib = loadFirstAvailable(gluLibNames, null, true);
+            if(null != gluLib) {
+                nativeLibraries.add(gluLib);
+            }
         }
+        return null != gluLib ;
     }
+    NativeLibrary gluLib = null;
 }
 
index 48affa5..b423750 100755 (executable)
@@ -39,8 +39,8 @@
 
 package com.jogamp.opengl.impl;
 
-import java.util.*;
 import javax.media.opengl.*;
+import com.jogamp.common.util.IntIntHashMap;
 
 /**
  * Tracks as closely as possible the sizes of allocated OpenGL buffer
@@ -93,18 +93,17 @@ public class GLBufferSizeTracker {
   // objects, which is probably sub-optimal. The expected usage
   // pattern of buffer objects indicates that the fact that this map
   // never shrinks is probably not that bad.
-  private Map/*<Integer,Integer>*/ bufferSizeMap =
-    Collections.synchronizedMap(new HashMap/*<Integer,Integer>*/());
+  private IntIntHashMap bufferSizeMap;
 
   private static final boolean DEBUG = Debug.debug("GLBufferSizeTracker");
 
   public GLBufferSizeTracker() {
+      bufferSizeMap = new IntIntHashMap();
+      bufferSizeMap.setKeyNotFoundValue(-1);
   }
 
   public void setBufferSize(GLBufferStateTracker bufferStateTracker,
-                            int target,
-                            GL caller,
-                            int size) {
+                            int target, GL caller, int size) {
     // Need to do some similar queries to getBufferSize below
     int buffer = bufferStateTracker.getBoundBufferObject(target, caller);
     boolean valid = bufferStateTracker.isBoundBufferObjectKnown(target);
@@ -118,7 +117,7 @@ public class GLBufferSizeTracker {
         throw new GLException("Error: no OpenGL buffer object appears to be bound to target 0x" +
                               Integer.toHexString(target));
       }
-      bufferSizeMap.put(new Integer(buffer), new Integer(size));
+      setDirectStateBufferSize(buffer, caller, size);
     }
     // We don't know the current buffer state. Note that the buffer
     // state tracker will have made the appropriate OpenGL query if it
@@ -126,6 +125,10 @@ public class GLBufferSizeTracker {
     // left to do except drop this piece of information on the floor.
   }
 
+  public void setDirectStateBufferSize(int buffer, GL caller, int size) {
+      bufferSizeMap.put(buffer, size);
+  }
+
   public int getBufferSize(GLBufferStateTracker bufferStateTracker,
                            int target,
                            GL caller) {
@@ -134,7 +137,7 @@ public class GLBufferSizeTracker {
     int buffer = bufferStateTracker.getBoundBufferObject(target, caller);
     boolean valid = bufferStateTracker.isBoundBufferObjectKnown(target);
     if (valid) {
-      if (buffer == 0) {
+      if (0 == buffer) {
         // FIXME: this really should not happen if we know what's
         // going on. Very likely there is an OpenGL error in the
         // application if we get here. Could silently return 0, but it
@@ -143,38 +146,56 @@ public class GLBufferSizeTracker {
         throw new GLException("Error: no OpenGL buffer object appears to be bound to target 0x" +
                               Integer.toHexString(target));
       }
+      return getBufferSizeImpl(target, buffer, caller);
+    }
+    // We don't know what's going on in this case; query the GL for an answer
+    int[] tmp = new int[1];
+    caller.glGetBufferParameteriv(target, GL.GL_BUFFER_SIZE, tmp, 0);
+    if (DEBUG) {
+      System.err.println("GLBufferSizeTracker.getBufferSize(): no cached buffer information");
+    }
+    return tmp[0];
+  }
+
+  public int getDirectStateBufferSize(int buffer, GL caller) {
+      return getBufferSizeImpl(0, buffer, caller);
+  }
+
+  private int getBufferSizeImpl(int target, int buffer, GL caller) {
       // See whether we know the size of this buffer object; at this
       // point we almost certainly should if the application is
       // written correctly
-      Integer key = new Integer(buffer);
-      Integer sz = (Integer) bufferSizeMap.get(key);
-      if (sz == null) {
+      int sz = bufferSizeMap.get(buffer);
+      if (0 > sz) {
         // For robustness, try to query this value from the GL as we used to
         int[] tmp = new int[1];
-        caller.glGetBufferParameteriv(target, GL.GL_BUFFER_SIZE, tmp, 0);
+        if(0==target) {
+            // DirectState ..
+            if(caller.isFunctionAvailable("glGetNamedBufferParameterivEXT")) {
+                caller.getGL2().glGetNamedBufferParameterivEXT(buffer, GL.GL_BUFFER_SIZE, tmp, 0);
+            } else {
+                throw new GLException("Error: getDirectStateBufferSize called with unknown state and GL function 'glGetNamedBufferParameterivEXT' n/a to query size");
+            }
+        } else {
+            caller.glGetBufferParameteriv(target, GL.GL_BUFFER_SIZE, tmp, 0);
+        }
         if (tmp[0] == 0) {
           // Assume something is wrong rather than silently going along
-          throw new GLException("Error: buffer size returned by glGetBufferParameteriv was zero; probably application error");
+          throw new GLException("Error: buffer size returned by "+
+                                ((0==target)?"glGetNamedBufferParameterivEXT":"glGetBufferParameteriv")+
+                                " was zero; probably application error");
         }
         // Assume we just don't know what's happening
-        sz = new Integer(tmp[0]);
-        bufferSizeMap.put(key, sz);
+        sz = tmp[0];
+        bufferSizeMap.put(buffer, sz);
         if (DEBUG) {
           System.err.println("GLBufferSizeTracker.getBufferSize(): made slow query to cache size " +
-                             tmp[0] +
+                             sz +
                              " for buffer " +
                              buffer);
         }
       }
-      return sz.intValue();
-    }
-    // We don't know what's going on in this case; query the GL for an answer
-    int[] tmp = new int[1];
-    caller.glGetBufferParameteriv(target, GL.GL_BUFFER_SIZE, tmp, 0);
-    if (DEBUG) {
-      System.err.println("GLBufferSizeTracker.getBufferSize(): no cached buffer information");
-    }
-    return tmp[0];
+      return sz;
   }
 
   // This should be called on any major event where we might start
index df8d673..05b2a2f 100755 (executable)
@@ -39,8 +39,8 @@
 
 package com.jogamp.opengl.impl;
 
-import java.util.*;
 import javax.media.opengl.*;
+import com.jogamp.common.util.IntIntHashMap;
 
 /**
  * Tracks as closely as possible which OpenGL buffer object is bound
@@ -77,29 +77,28 @@ import javax.media.opengl.*;
 public class GLBufferStateTracker {
   private static final boolean DEBUG = Debug.debug("GLBufferStateTracker");
 
-  private static final Integer arrayBufferEnum        = new Integer(GL.GL_ARRAY_BUFFER);
-  private static final Integer elementArrayBufferEnum = new Integer(GL.GL_ELEMENT_ARRAY_BUFFER);
-  private static final Integer pixelPackBufferEnum    = new Integer(GL2.GL_PIXEL_PACK_BUFFER);
-  private static final Integer pixelUnpackBufferEnum  = new Integer(GL2.GL_PIXEL_UNPACK_BUFFER);
-  private static final Integer zero                   = new Integer(0);
-
   // Maps binding targets to buffer objects. A null value indicates
   // that the binding is unknown. A zero value indicates that it is
-  // known that no buffer is bound to the target.
-  private Map/*<Integer,Integer>*/ bindingMap = new HashMap/*<Integer,Integer>*/();
+  // known that no buffer is bound to the target, according to the 
+  // OpenGL specifications. 
+  // http://www.opengl.org/sdk/docs/man/xhtml/glBindBuffer.xml
+  private IntIntHashMap bindingMap;
 
   private int[] bufTmp = new int[1];
 
   public GLBufferStateTracker() {
+    bindingMap = new IntIntHashMap();
+    bindingMap.setKeyNotFoundValue(-1);
+
     // Start with known unbound targets for known keys
-    bindingMap.put(arrayBufferEnum,        zero);
-    bindingMap.put(elementArrayBufferEnum, zero);
-    bindingMap.put(pixelPackBufferEnum,    zero);
-    bindingMap.put(pixelUnpackBufferEnum,  zero);
+    bindingMap.put(GL.GL_ARRAY_BUFFER,         0);
+    bindingMap.put(GL.GL_ELEMENT_ARRAY_BUFFER, 0);
+    bindingMap.put(GL2.GL_PIXEL_PACK_BUFFER,   0);
+    bindingMap.put(GL2.GL_PIXEL_UNPACK_BUFFER, 0);
   }
 
   public void setBoundBufferObject(int target, int buffer) {
-    bindingMap.put(box(target), box(buffer));
+    bindingMap.put(target, buffer);
   }
 
   /** Note: returns an unspecified value if the binding for the
@@ -107,8 +106,8 @@ public class GLBufferStateTracker {
       You must use isBoundBufferObjectKnown() to see whether the
       return value is valid. */
   public int getBoundBufferObject(int target, GL caller) {
-    Integer value = (Integer) bindingMap.get(box(target));
-    if (value == null) {
+    int value = bindingMap.get(target);
+    if (0 > value) {
       // User probably either called glPushClientAttrib /
       // glPopClientAttrib or is querying an unknown target. See
       // whether we know how to fetch this state.
@@ -129,19 +128,19 @@ public class GLBufferStateTracker {
                              " for query target 0x" + Integer.toHexString(queryTarget));
         }
         setBoundBufferObject(target, bufTmp[0]);
-        // Try once more
-        return getBoundBufferObject(target, caller);
+        return bufTmp[0];
       }
       return 0;
     }
-    return value.intValue();
+    return value;
   }
 
   /** Indicates whether the binding state for the specified target is
-      currently known. Should be called after getBoundBufferObject()
+      currently known, ie it could be bound or not but it must be tracked.<br>
+      Should be called after getBoundBufferObject()
       because that method may change the answer for a given target. */
   public boolean isBoundBufferObjectKnown(int target) {
-    return (bindingMap.get(box(target)) != null);
+    return 0 < bindingMap.get(target) ;
   }
 
   /** Clears out the known/unknown state of the various buffer object
@@ -154,16 +153,4 @@ public class GLBufferStateTracker {
   public void clearBufferObjectState() {
     bindingMap.clear();
   }
-
-  // FIXME: could largely remove this and use Integer.valueOf() in JDK 5
-  private static Integer box(int key) {
-    switch (key) {
-      case 0:                          return zero;
-      case GL.GL_ARRAY_BUFFER:         return arrayBufferEnum;
-      case GL.GL_ELEMENT_ARRAY_BUFFER: return elementArrayBufferEnum;
-      case GL2.GL_PIXEL_PACK_BUFFER:   return pixelPackBufferEnum;
-      case GL2.GL_PIXEL_UNPACK_BUFFER: return pixelUnpackBufferEnum;
-      default:                         return new Integer(key);
-    }
-  }
 }
index 0742587..dc98b55 100644 (file)
@@ -53,16 +53,6 @@ public abstract class GLContextImpl extends GLContext {
   protected GLContextLock lock = new GLContextLock();
   protected static final boolean DEBUG = Debug.debug("GLContext");
   protected static final boolean VERBOSE = Debug.verbose();
-  // NOTE: default sense of GLContext optimization disabled in JSR-231
-  // 1.0 beta 5 due to problems on X11 platforms (both Linux and
-  // Solaris) when moving and resizing windows. Apparently GLX tokens
-  // get sent to the X server under the hood (and out from under the
-  // cover of the AWT lock) in these situations. Users requiring
-  // multi-screen X11 applications can manually enable this flag. It
-  // basically had no tangible effect on the Windows or Mac OS X
-  // platforms anyway in particular with the disabling of the
-  // GLWorkerThread which we found to be necessary in 1.0 beta 4.
-  protected boolean optimizationEnabled = Debug.isPropertyDefined("jogl.GLContext.optimize", true);
 
   // Cache of the functions that are available to be called at the current
   // moment in time
@@ -151,21 +141,24 @@ public abstract class GLContextImpl extends GLContext {
 
   public abstract Object getPlatformGLExtensions();
 
+  // Note: the surface is locked within [makeCurrent .. swap .. release]
   public void release() throws GLException {
     if (!lock.isHeld()) {
       throw new GLException("Context not current on current thread");
     }
     setCurrent(null);
     try {
-      releaseImpl();
+        releaseImpl();
     } finally {
+      if (drawable.isSurfaceLocked()) {
+          drawable.unlockSurface();
+      }
       lock.unlock();
     }
   }
-
   protected abstract void releaseImpl() throws GLException;
 
-  public void destroy() {
+  public final void destroy() {
     if (lock.isHeld()) {
         // release current context 
         release();
@@ -209,14 +202,47 @@ public abstract class GLContextImpl extends GLContext {
           glStateTracker.clearStates(false);
       }
   
-      destroyImpl();
+      if (contextHandle != 0) {
+          int lockRes = drawable.lockSurface();
+          if (NativeWindow.LOCK_SURFACE_NOT_READY == lockRes) {
+                // this would be odd ..
+                throw new GLException("Surface not ready to lock: "+drawable);
+          }
+          try {
+              destroyImpl();
+              contextHandle = 0;
+              GLContextShareSet.contextDestroyed(this);
+          } finally {
+              drawable.unlockSurface();
+          }
+      }
     } finally {
       lock.unlock();
     }
   }
-
   protected abstract void destroyImpl() throws GLException;
 
+  public final void copy(GLContext source, int mask) throws GLException {
+    if (source.getHandle() == 0) {
+      throw new GLException("Source OpenGL context has not been created");
+    }
+    if (getHandle() == 0) {
+      throw new GLException("Destination OpenGL context has not been created");
+    }
+
+    int lockRes = drawable.lockSurface();
+    if (NativeWindow.LOCK_SURFACE_NOT_READY == lockRes) {
+        // this would be odd ..
+        throw new GLException("Surface not ready to lock");
+    }
+    try {
+        copyImpl(source, mask);
+    } finally {
+      drawable.unlockSurface();
+    }
+  }
+  protected abstract void copyImpl(GLContext source, int mask) throws GLException;
+
   //----------------------------------------------------------------------
   //
 
@@ -285,7 +311,7 @@ public abstract class GLContextImpl extends GLContext {
     lock.lock();
     int res = 0;
     try {
-      res = makeCurrentImpl();
+      res = makeCurrentLocking();
 
       /* FIXME: refactor dependence on Java 2D / JOGL bridge
       if ((tracker != null) &&
@@ -320,15 +346,50 @@ public abstract class GLContextImpl extends GLContext {
     return res;
   }
 
-  /**
-   * @see #makeCurrent
-   */
-  protected abstract int makeCurrentImpl() throws GLException;
-
-  /**
-   * @see #makeCurrent
-   */
-  protected abstract void create() throws GLException ;
+  // Note: the surface is locked within [makeCurrent .. swap .. release]
+  protected final int makeCurrentLocking() throws GLException {
+    boolean exceptionOccurred = false;
+    int lockRes = drawable.lockSurface();
+    try {
+      if (NativeWindow.LOCK_SURFACE_NOT_READY == lockRes) {
+        return CONTEXT_NOT_CURRENT;
+      }
+      try {
+          if (NativeWindow.LOCK_SURFACE_CHANGED == lockRes) {
+            drawable.updateHandle();
+          }
+          if (0 == drawable.getHandle()) {
+              throw new GLException("drawable has invalid handle: "+drawable);
+          }
+          boolean newCreated = false;
+          if (!isCreated()) {
+            newCreated = createImpl(); // may throws exception if fails!
+            if (DEBUG) {
+                if(newCreated) {
+                    System.err.println(getThreadName() + ": !!! Create GL context OK: " + toHexString(contextHandle) + " for " + getClass().getName());
+                } else {
+                    System.err.println(getThreadName() + ": !!! Create GL context FAILED for " + getClass().getName());
+                }
+            }
+            if(!newCreated) {
+                return CONTEXT_NOT_CURRENT;
+            }
+            GLContextShareSet.contextCreated(this);
+          }
+          makeCurrentImpl(newCreated);
+          return newCreated ? CONTEXT_CURRENT_NEW : CONTEXT_CURRENT ;
+      } catch (RuntimeException e) {
+        exceptionOccurred = true;
+        throw e;
+      }
+    } finally {
+      if (exceptionOccurred) {
+        drawable.unlockSurface();
+      }
+    }
+  }
+  protected abstract void makeCurrentImpl(boolean newCreatedContext) throws GLException;
+  protected abstract boolean createImpl() throws GLException ;
 
   /** 
    * Platform dependent but harmonized implementation of the <code>ARB_create_context</code>
@@ -388,8 +449,8 @@ public abstract class GLContextImpl extends GLContext {
    * @see #createContextARBImpl
    * @see #destroyContextARBImpl
    */
-  protected long createContextARB(long share, boolean direct,
-                                  int major[], int minor[], int ctp[]) 
+  protected final long createContextARB(long share, boolean direct,
+                                        int major[], int minor[], int ctp[]) 
   {
     AbstractGraphicsConfiguration config = drawable.getNativeWindow().getGraphicsConfiguration().getNativeGraphicsConfiguration();
     GLCapabilities glCaps = (GLCapabilities) config.getChosenCapabilities();
@@ -441,7 +502,7 @@ public abstract class GLContextImpl extends GLContext {
     return _ctx;
   }
 
-  private void createContextARBMapVersionsAvailable(int reqMajor, boolean compat)
+  private final void createContextARBMapVersionsAvailable(int reqMajor, boolean compat)
   {
     long _context;
     int reqProfile = compat ? CTX_PROFILE_COMPAT : CTX_PROFILE_CORE ;
@@ -509,10 +570,10 @@ public abstract class GLContextImpl extends GLContext {
     }
   }
 
-  private long createContextARBVersions(long share, boolean direct, int ctxOptionFlags, 
-                                        int majorMax, int minorMax, 
-                                        int majorMin, int minorMin, 
-                                        int major[], int minor[]) {
+  private final long createContextARBVersions(long share, boolean direct, int ctxOptionFlags, 
+                                              int majorMax, int minorMax, 
+                                              int majorMin, int minorMin, 
+                                              int major[], int minor[]) {
     major[0]=majorMax;
     minor[0]=minorMax;
     long _context=0;
@@ -540,7 +601,7 @@ public abstract class GLContextImpl extends GLContext {
    * If major==0 && minor == 0 : Use GL_VERSION
    * Otherwise .. don't touch ..
    */
-  protected void setContextVersion(int major, int minor, int ctp) {
+  protected final void setContextVersion(int major, int minor, int ctp) {
       if (0==ctp) {
         throw new GLException("Invalid GL Version "+major+"."+minor+", ctp "+toHexString(ctp));
       }
@@ -619,7 +680,7 @@ public abstract class GLContextImpl extends GLContext {
 
   public abstract ByteBuffer glAllocateMemoryNV(int arg0, float arg1, float arg2, float arg3);
 
-  public void setSwapInterval(final int interval) {
+  public final void setSwapInterval(final int interval) {
     GLContext current = getCurrent();
     if (current != this) {
         throw new GLException("This context is not current. Current context: "+current+
@@ -627,17 +688,12 @@ public abstract class GLContextImpl extends GLContext {
     }
     setSwapIntervalImpl(interval);
   }
-
+  protected void setSwapIntervalImpl(final int interval) { /** nop per default .. **/  }
   protected int currentSwapInterval = -1; // default: not set yet ..
-
   public int getSwapInterval() {
     return currentSwapInterval;
   }
 
-  protected void setSwapIntervalImpl(final int interval) {
-    // nop per default ..
-  }
-
   /** Maps the given "platform-independent" function name to a real function
       name. Currently this is only used to map "glAllocateMemoryNV" and
       associated routines to wglAllocateMemoryNV / glXAllocateMemoryNV. */
@@ -838,10 +894,6 @@ public abstract class GLContextImpl extends GLContext {
   // current on the OpenGL worker thread
   //
 
-  public boolean isOptimizable() {
-    return optimizationEnabled;
-  }
-
   public boolean hasWaiters() {
     return lock.hasWaiters();
   }
index 6cbed48..b13cb44 100644 (file)
@@ -56,7 +56,7 @@ public abstract class GLDrawableFactoryImpl extends GLDrawableFactory {
   protected static final boolean DEBUG = Debug.debug("GLDrawableFactory");
 
   /** 
-   * Returns the DynamicLookupHelper
+   * Returns the GLDynamicLookupHelper
    * @param profile if EGL/ES, profile <code>1</code> refers to ES1 and <code>2</code> to ES2,
    *        otherwise the profile is ignored.
    */
@@ -226,18 +226,6 @@ public abstract class GLDrawableFactoryImpl extends GLDrawableFactory {
     return (GLDrawableFactoryImpl) getFactory(glp);
   }
 
-  //----------------------------------------------------------------------
-  // Support for locking and unlocking the toolkit -- needed only on X11 platforms
-  //
-
-  public void lockToolkit() {
-    NativeWindowFactory.getDefaultFactory().getToolkitLock().lock();
-  }
-
-  public void unlockToolkit() {
-    NativeWindowFactory.getDefaultFactory().getToolkitLock().unlock();
-  }
-
   //---------------------------------------------------------------------------
   // Support for Java2D/JOGL bridge on Mac OS X; the external
   // GLDrawable mechanism in the public API is sufficient to
index fca0a7d..8cc12ca 100644 (file)
@@ -157,7 +157,7 @@ public class GLDrawableHelper {
               System.err.println("GLDrawableHelper " + this + ".invokeGL(): Running runnable");
             }
             runnable.run();
-            if (autoSwapBufferMode) {
+            if (autoSwapBufferMode && null != initAction) {
               if (drawable != null) {
                 drawable.swapBuffers();
               }
index b846b37..1270a45 100644 (file)
@@ -69,11 +69,23 @@ public abstract class GLDrawableImpl implements GLDrawable {
     throw new GLException("Should not call this (should only be called for offscreen GLDrawables)");
   }
 
-  public void swapBuffers() throws GLException {
+  public final void swapBuffers() throws GLException {
     GLCapabilities caps = (GLCapabilities)component.getGraphicsConfiguration().getNativeGraphicsConfiguration().getChosenCapabilities();
     if ( caps.getDoubleBuffered() ) {
         if(!component.surfaceSwap()) {
-            swapBuffersImpl();
+            int lockRes = lockSurface(); // it's recursive, so it's ok within [makeCurrent .. release]
+            if (NativeWindow.LOCK_SURFACE_NOT_READY == lockRes) {
+                return;
+            }
+            try {
+                AbstractGraphicsDevice aDevice = getNativeWindow().getGraphicsConfiguration().getScreen().getDevice();
+                if (NativeWindow.LOCK_SURFACE_CHANGED == lockRes) {
+                    updateHandle();
+                }
+                swapBuffersImpl();
+            } finally {
+                unlockSurface();
+            }
         }
     } else {
         GLContext ctx = GLContext.getCurrent();
@@ -83,7 +95,6 @@ public abstract class GLDrawableImpl implements GLDrawable {
     }
     component.surfaceUpdated(this, component, System.currentTimeMillis());
   }
-
   protected abstract void swapBuffersImpl();
 
   public static String toHexString(long hex) {
@@ -106,23 +117,45 @@ public abstract class GLDrawableImpl implements GLDrawable {
     return component;
   }
 
+  protected void destroyHandle() {}
+  protected void updateHandle() {}
+
+  public long getHandle() {
+    return component.getSurfaceHandle();
+  }
+
   public GLDrawableFactory getFactory() {
     return factory;
   }
 
-  public void setRealized(boolean realized) {
+  public final void setRealized(boolean realized) {
     if ( this.realized != realized ) {
         if(DEBUG) {
             System.err.println("setRealized: "+getClass().getName()+" "+this.realized+" -> "+realized);
         }
         this.realized = realized;
-        setRealizedImpl();
+        if(realized && NativeWindow.LOCK_SURFACE_NOT_READY == lockSurface()) {
+          throw new GLException("X11GLXDrawable.setRealized(true): lockSurface - surface not ready");
+        }
+        try {
+            AbstractGraphicsDevice aDevice = getNativeWindow().getGraphicsConfiguration().getScreen().getDevice();
+            if(!realized) {
+                destroyHandle();
+            }
+            setRealizedImpl();
+            if(realized) {
+                updateHandle();
+            }
+        } finally {
+            if(realized) {
+                unlockSurface();
+            }
+        }
     } else if(DEBUG) {
         System.err.println("setRealized: "+getClass().getName()+" "+this.realized+" == "+realized);
     }
   }
   protected abstract void setRealizedImpl();
-
   public boolean isRealized() {
     return realized;
   }
@@ -137,9 +170,6 @@ public abstract class GLDrawableImpl implements GLDrawable {
   }
 
   public int lockSurface() throws GLException {
-    if (!realized) {
-      return NativeWindow.LOCK_SURFACE_NOT_READY;
-    }
     return component.lockSurface();
   }
 
@@ -154,6 +184,7 @@ public abstract class GLDrawableImpl implements GLDrawable {
   public String toString() {
     return getClass().getName()+"[Realized "+isRealized()+
                 ",\n\tFactory   "+getFactory()+
+                ",\n\thandle    "+toHexString(getHandle())+
                 ",\n\tWindow    "+getNativeWindow()+"]";
   }
 
diff --git a/src/jogl/classes/com/jogamp/opengl/impl/GLDynamicLibraryBundleInfo.java b/src/jogl/classes/com/jogamp/opengl/impl/GLDynamicLibraryBundleInfo.java
new file mode 100755 (executable)
index 0000000..dd196c4
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2010, Sven Gothel
+ * 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 Sven Gothel 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 Sven Gothel 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 com.jogamp.opengl.impl;
+
+import com.jogamp.common.os.DynamicLibraryBundleInfo;
+import com.jogamp.common.os.DynamicLookupHelper;
+import com.jogamp.common.os.NativeLibrary;
+import java.util.*;
+import java.security.*;
+import javax.media.opengl.GLException;
+
+public abstract class GLDynamicLibraryBundleInfo implements DynamicLibraryBundleInfo {
+    static List/*<String>*/ glueLibNamesPreload;
+    static {
+        glueLibNamesPreload = new ArrayList();
+        glueLibNamesPreload.add("nativewindow_x11");
+    }
+
+    protected GLDynamicLibraryBundleInfo() {
+    }
+
+    /** default **/
+    public boolean shallLinkGlobal() { return false; }
+
+    /** default **/
+    public boolean shallLookupGlobal() { return false; }
+
+    public static List/*<String>*/ getGlueLibNamesPreload() {
+        return glueLibNamesPreload;
+    }
+}
+
index ce06499..89dbb4a 100755 (executable)
 
 package com.jogamp.opengl.impl;
 
+import com.jogamp.common.os.DynamicLibraryBundle;
+import com.jogamp.common.os.DynamicLibraryBundleInfo;
 import com.jogamp.common.os.DynamicLookupHelper;
 import com.jogamp.common.os.NativeLibrary;
 import java.util.*;
 import java.security.*;
 import javax.media.opengl.GLException;
 
-/**
- * Abstract implementation of the DynamicLookupHelper for GL,
- * which decouples it's dependencies to EGLDrawableFactory.
- *
- * Currently two implementations exist, one for ES1 and one for ES2.
- */
-public abstract class GLDynamicLookupHelper implements DynamicLookupHelper {
-    protected static final boolean DEBUG = com.jogamp.opengl.impl.Debug.debug("GL");
-    protected static final boolean DEBUG_LOOKUP;
-
-    static {
-        AccessControlContext localACC=AccessController.getContext();
-        DEBUG_LOOKUP = com.jogamp.opengl.impl.Debug.isPropertyDefined("jogl.debug.DynamicLookup", true, localACC);
-    }
-
-    protected List/*<NativeLibrary>*/ glLibraries;
-    private long glxGetProcAddressHandle;
-    private String glxGetProcAddressFuncName;
-
-    protected GLDynamicLookupHelper() {
-        glLibraries = new ArrayList();
-        loadGLLibrary();
-        glxGetProcAddressFuncName = getGLXGetProcAddressFuncName();
-        glxGetProcAddressHandle = getGLXGetProcAddressHandle();
-    }
-
-    /** Must return at least one OpenGL library name, eg GL, OpenGL32, .. */
-    protected abstract List/*<String>*/ getGLLibNames();
+public class GLDynamicLookupHelper extends DynamicLibraryBundle {
 
-    /** May return OpenGL Platform library name(s), eg EGL, GLX, .. */
-    protected abstract List/*<String>*/ getGLXLibNames();
-
-    protected boolean shallGLLibLoadedGlobal() { return false; }
-
-    protected boolean shallGLXLibLoadedGlobal() { return false; }
-
-    /** Shall return the OpenGL Platform function name to lookup function pointer, eg eglGetProcAddress */
-    protected abstract String getGLXGetProcAddressFuncName() ; 
-
-    protected abstract long dynamicLookupFunctionOnGLX(long glxGetProcAddressHandle, String glFuncName);
-
-    /** Shall load the JNI binding */
-    protected abstract void loadGLJNILibrary();
-
-    /** May load the native GLU library, default: None **/
-    public void loadGLULibrary() { }
-
-    protected long getGLXGetProcAddressHandle() {
-        long aptr = dynamicLookupFunctionOnLibs(glxGetProcAddressFuncName);
-        if(0==aptr) {
-            GLException e = new GLException("Couldn't find "+glxGetProcAddressFuncName+" function entry");
-            if(DEBUG) {
-                e.printStackTrace();
-            }
-            throw e;
-        }
-        return aptr;
+    public GLDynamicLookupHelper(GLDynamicLibraryBundleInfo info) {
+        super(info);
     }
 
-    protected NativeLibrary loadFirstAvailable(List/*<String>*/ libNames, ClassLoader loader, boolean global) {
-        for (Iterator iter = libNames.iterator(); iter.hasNext(); ) {
-            NativeLibrary lib = NativeLibrary.open((String) iter.next(), loader, global);
-            if (lib != null) {
-                return lib;
-            }
-        }
-        return null;
-    }
+    public GLDynamicLibraryBundleInfo getGLBundleInfo() { return (GLDynamicLibraryBundleInfo) getBundleInfo(); }
 
-    private boolean loadGLXLibrary(ClassLoader loader, List/*<String>*/ osLibNames) {
-        if(null!=osLibNames && osLibNames.size()>0) {
-            NativeLibrary lib = loadFirstAvailable(osLibNames, loader, shallGLXLibLoadedGlobal());
-            if ( null != lib ) {
-                glLibraries.add(lib);
-            }
-            return null!=lib;
-        }
-        return true; // none is ok
-    }
-
-    private void loadGLLibrary() {
-        List/*<String>*/ glLibNames = getGLLibNames();
-        List/*<String>*/ osLibNames = getGLXLibNames();
-
-        ClassLoader loader = getClass().getClassLoader();
-        NativeLibrary lib = null;
-
-        // GL libraries ..
-        lib = loadFirstAvailable(glLibNames, loader, shallGLLibLoadedGlobal());
-        if ( null == lib ) {
-            throw new GLException("Unable to dynamically load OpenGL library: "+getClass().getName());
-        }
-        glLibraries.add(lib);
-
-        // GL Platform libraries ..
-        if ( !loadGLXLibrary(loader, osLibNames) ) {
-            throw new GLException("Unable to dynamically load GL Platform library: " + getClass().getName());
-        }
-
-        loadGLJNILibrary();
-    }
-
-    private long dynamicLookupFunctionOnLibs(String glFuncName) {
-        String funcName=glFuncName;
-        long addr = dynamicLookupFunctionOnLibsImpl(funcName);
-        if(DEBUG_LOOKUP) {
-            if(0!=addr) {
-                System.err.println("Lookup-Native: "+glFuncName+" / "+funcName+" 0x"+Long.toHexString(addr));
-            } else {
-                System.err.println("Lookup-Native: "+glFuncName+" / "+funcName+" ** FAILED ** ");
-            }
-        }
-        return addr;
-    }
-
-    private long dynamicLookupFunctionOnLibsImpl(String glFuncName) {
-        // Look up this function name in all known libraries
-        for (Iterator iter = glLibraries.iterator(); iter.hasNext(); ) {
-            NativeLibrary lib = (NativeLibrary) iter.next();
-            long addr = lib.dynamicLookupFunction(glFuncName);
-            if (addr != 0) {
-                return addr;
-            }
-        }
-        return 0;
-    }
-
-    public long dynamicLookupFunction(String glFuncName) {
-        if(null==glFuncName) {
-            return 0;
-        }
-
-        if(glFuncName.equals(glxGetProcAddressFuncName)) {
-            return glxGetProcAddressHandle;
-        }
-
-        long addr = dynamicLookupFunctionOnGLX(glxGetProcAddressHandle, glFuncName);
-        if(DEBUG_LOOKUP) {
-            if(0!=addr) {
-                System.err.println("Lookup: <"+glFuncName+"> 0x"+Long.toHexString(addr));
-            }
-        }
-        if(0==addr) {
-            addr = dynamicLookupFunctionOnLibs(glFuncName);
-        }
-        return addr;
-    }
+    /** NOP per default */
+    public boolean loadGLULibrary() { return false; }
 }
 
index c3958ee..1daf335 100644 (file)
@@ -58,52 +58,6 @@ public class GLJNILibLoader extends JNILibLoaderBase {
     });
   }
 
-  public static void loadGLDesktop() {
-    AccessController.doPrivileged(new PrivilegedAction() {
-      public Object run() {
-        loadLibrary("jogl_desktop", nativeOSPreload, true);
-        return null;
-      }
-    });
-  }
-
-  public static void loadGLDesktopES12() {
-    AccessController.doPrivileged(new PrivilegedAction() {
-      public Object run() {
-        loadLibrary("jogl_gl2es12", nativeOSPreload, true);
-        return null;
-      }
-    });
-  }
-
-  public static void loadES2() {
-    AccessController.doPrivileged(new PrivilegedAction() {
-      public Object run() {
-        loadLibrary("jogl_es2", nativeOSPreload, true);
-        return null;
-      }
-    });
-  }
-
-  public static void loadES1() {
-    AccessController.doPrivileged(new PrivilegedAction() {
-      public Object run() {
-        loadLibrary("jogl_es1", nativeOSPreload, true);
-        return null;
-      }
-    });
-  }
-
-  public static void loadCgImpl() {
-    AccessController.doPrivileged(new PrivilegedAction() {
-      public Object run() {
-        String[] preload = { "nativewindow", "cg", "cgGL" };
-        loadLibrary("jogl_cg", preload, true);
-        return null;
-      }
-    });
-  }
-
   private static final String[] nativeOSPreload = { "nativewindow_x11" };
 }
 
index 1da1966..eb5e09d 100644 (file)
@@ -48,6 +48,7 @@ import java.beans.PropertyChangeListener;
 
 import javax.media.nativewindow.*;
 import javax.media.opengl.*;
+import com.jogamp.nativewindow.impl.RecursiveToolkitLock;
 
 /** Platform-independent class exposing pbuffer functionality to
     applications. This class is not exposed in the public API as it
@@ -99,6 +100,10 @@ public class GLPbufferImpl implements GLPbuffer {
       return pbufferDrawable.getNativeWindow();
   }
 
+  public long getHandle() {
+    return pbufferDrawable.getHandle();
+  }
+
   public GLDrawableFactory getFactory() {
       return pbufferDrawable.getFactory();
   }
@@ -194,19 +199,23 @@ public class GLPbufferImpl implements GLPbuffer {
     return pbufferDrawable.getGLProfile();
   }
 
-  private boolean surfaceLocked = false;
+  private RecursiveToolkitLock recurLock = new RecursiveToolkitLock();
 
   public int lockSurface() throws GLException {
-    surfaceLocked=true;
+    recurLock.lock();
     return NativeWindow.LOCK_SUCCESS;
   }
 
   public void unlockSurface() {
-    surfaceLocked=false;
+    recurLock.unlock();
   }
 
   public boolean isSurfaceLocked() {
-    return surfaceLocked;
+    return recurLock.isLocked();
+  }
+
+  public Exception getLockedStack() {
+    return recurLock.getLockedStack();
   }
 
   //----------------------------------------------------------------------
index 744e7b9..9d896b7 100755 (executable)
 
 package com.jogamp.opengl.impl;
 
-import java.util.*;
+import java.util.List;
+import java.util.ArrayList;
 import javax.media.opengl.*;
+import com.jogamp.common.util.IntIntHashMap;
 
 /**
  * Tracks as closely as possible OpenGL states.
@@ -54,24 +56,27 @@ public class GLStateTracker {
 
   private volatile boolean enabled = true;
 
-  private Map/*<Integer,Integer>*/ pixelStateMap = new HashMap/*<Integer,Integer>*/();
+  private IntIntHashMap pixelStateMap;
 
   static class SavedState {
     SavedState() {
         this.pixelStateMap = null;
     }
-    void putPixelStateMap(Map pixelStateMap) {
-        this.pixelStateMap = new HashMap();
+    void putPixelStateMap(IntIntHashMap pixelStateMap) {
+        this.pixelStateMap = new IntIntHashMap();
+        this.pixelStateMap.setKeyNotFoundValue(-1);
         this.pixelStateMap.putAll(pixelStateMap);
     }
-    Map getPixelStateMap() { return pixelStateMap; }
+    IntIntHashMap getPixelStateMap() { return pixelStateMap; }
 
-    private Map pixelStateMap;
+    private IntIntHashMap pixelStateMap;
     // private Map otherStateMap;
   }
   private List/*<SavedState>*/ stack = new ArrayList();
 
   public GLStateTracker() {
+    pixelStateMap = new IntIntHashMap();
+    pixelStateMap.setKeyNotFoundValue(-1);
     resetStates();
   }
 
@@ -88,34 +93,26 @@ public class GLStateTracker {
     return enabled;
   }
 
+  /** @return true if found in our map, otherwise false, 
+   *  which forces the caller to query GL. */
   public boolean getInt(int pname, int[] params, int params_offset) {
     if(enabled) {
-        Integer key = boxKey(pname);
-        if(null!=key) {
-            Integer value = (Integer) pixelStateMap.get(key);
-            if(null!=value) {
-                params[params_offset] = value.intValue();
-            } else {
-                GLException re = new GLException("Key (0x"+Integer.toHexString(key.intValue())+") is not mapped");
-                throw re;
-            }
+        int value = pixelStateMap.get(pname);
+        if(0 <= value) {
+            params[params_offset] = value;
             return true;
         }
     }
     return false;
   }
 
+  /** @return true if found in our map, otherwise false, 
+   *  which forces the caller to query GL. */
   public boolean getInt(int pname, java.nio.IntBuffer params, int dummy) {
     if(enabled) {
-        Integer key = boxKey(pname);
-        if(null!=key) {
-            Integer value = (Integer) pixelStateMap.get(key);
-            if(null!=value) {
-                params.put(params.position(), value.intValue());
-            } else {
-                GLException re = new GLException("Key (0x"+Integer.toHexString(key.intValue())+") is not mapped");
-                throw re;
-            }
+        int value = pixelStateMap.get(pname);
+        if(0 <= value) {
+            params.put(params.position(), value);
             return true;
         }
     }
@@ -124,10 +121,7 @@ public class GLStateTracker {
 
   public void setInt(int pname, int param) {
     if(enabled) {
-        Integer key = boxKey(pname);
-        if(null!=key) {
-            pixelStateMap.put(key, boxInt(param));
-        }
+        pixelStateMap.put(pname, param);
     }
   }
 
@@ -151,7 +145,8 @@ public class GLStateTracker {
             throw new GLException("null stack element (remaining stack size "+stack.size()+")");
         }
 
-        Map/*<Integer,Integer>*/ pixelStateMapNew = new HashMap/*<Integer,Integer>*/();
+        IntIntHashMap pixelStateMapNew = new IntIntHashMap();
+        pixelStateMapNew.setKeyNotFoundValue(-1);
         if ( null != state.getPixelStateMap() ) {
             pixelStateMapNew.putAll(state.getPixelStateMap());
         }
@@ -159,80 +154,26 @@ public class GLStateTracker {
     }
   }
 
-  private static final Integer GL_PACK_SWAP_BYTES   = new Integer(GL2GL3.GL_PACK_SWAP_BYTES);
-  private static final Integer GL_PACK_LSB_FIRST    = new Integer(GL2GL3.GL_PACK_LSB_FIRST);
-  private static final Integer GL_PACK_ROW_LENGTH   = new Integer(GL2GL3.GL_PACK_ROW_LENGTH);
-  private static final Integer GL_PACK_SKIP_ROWS    = new Integer(GL2GL3.GL_PACK_SKIP_ROWS);
-  private static final Integer GL_PACK_SKIP_PIXELS  = new Integer(GL2GL3.GL_PACK_SKIP_PIXELS);
-  private static final Integer GL_PACK_ALIGNMENT    = new Integer(GL.GL_PACK_ALIGNMENT);
-  private static final Integer GL_PACK_IMAGE_HEIGHT = new Integer(GL2GL3.GL_PACK_IMAGE_HEIGHT);
-  private static final Integer GL_PACK_SKIP_IMAGES  = new Integer(GL2GL3.GL_PACK_SKIP_IMAGES);
-
-  private static final Integer GL_UNPACK_SWAP_BYTES   = new Integer(GL2GL3.GL_UNPACK_SWAP_BYTES);
-  private static final Integer GL_UNPACK_LSB_FIRST    = new Integer(GL2GL3.GL_UNPACK_LSB_FIRST);
-  private static final Integer GL_UNPACK_ROW_LENGTH   = new Integer(GL2GL3.GL_UNPACK_ROW_LENGTH);
-  private static final Integer GL_UNPACK_SKIP_ROWS    = new Integer(GL2GL3.GL_UNPACK_SKIP_ROWS);
-  private static final Integer GL_UNPACK_SKIP_PIXELS  = new Integer(GL2GL3.GL_UNPACK_SKIP_PIXELS);
-  private static final Integer GL_UNPACK_ALIGNMENT    = new Integer(GL.GL_UNPACK_ALIGNMENT);
-  private static final Integer GL_UNPACK_IMAGE_HEIGHT = new Integer(GL2GL3.GL_UNPACK_IMAGE_HEIGHT);
-  private static final Integer GL_UNPACK_SKIP_IMAGES  = new Integer(GL2GL3.GL_UNPACK_SKIP_IMAGES);
-
-  private static final Integer zero                   = new Integer(0);
-  private static final Integer one                    = new Integer(1);
-
-  private static Integer boxKey(int key) {
-    switch (key) {
-      case 0:                          return zero;
-      case GL2GL3.GL_PACK_SWAP_BYTES:     return GL_PACK_SWAP_BYTES;
-      case GL2GL3.GL_PACK_LSB_FIRST:      return GL_PACK_LSB_FIRST;
-      case GL2GL3.GL_PACK_ROW_LENGTH:     return GL_PACK_ROW_LENGTH;
-      case GL2GL3.GL_PACK_SKIP_ROWS:      return GL_PACK_SKIP_ROWS;
-      case GL2GL3.GL_PACK_SKIP_PIXELS:    return GL_PACK_SKIP_PIXELS;
-      case GL.GL_PACK_ALIGNMENT:          return GL_PACK_ALIGNMENT;
-      case GL2GL3.GL_PACK_IMAGE_HEIGHT:   return GL_PACK_IMAGE_HEIGHT;
-      case GL2GL3.GL_PACK_SKIP_IMAGES:    return GL_PACK_SKIP_IMAGES;
-
-      case GL2GL3.GL_UNPACK_SWAP_BYTES:   return GL_UNPACK_SWAP_BYTES;
-      case GL2GL3.GL_UNPACK_LSB_FIRST:    return GL_UNPACK_LSB_FIRST;
-      case GL2GL3.GL_UNPACK_ROW_LENGTH:   return GL_UNPACK_ROW_LENGTH;
-      case GL2GL3.GL_UNPACK_SKIP_ROWS:    return GL_UNPACK_SKIP_ROWS;
-      case GL2GL3.GL_UNPACK_SKIP_PIXELS:  return GL_UNPACK_SKIP_PIXELS;
-      case GL.GL_UNPACK_ALIGNMENT:        return GL_UNPACK_ALIGNMENT;
-      case GL2GL3.GL_UNPACK_IMAGE_HEIGHT: return GL_UNPACK_IMAGE_HEIGHT;
-      case GL2GL3.GL_UNPACK_SKIP_IMAGES:  return GL_UNPACK_SKIP_IMAGES;
-
-      default: return null;
-    }
-  }
-
   public void resetStates() {
     pixelStateMap.clear();
 
-    pixelStateMap.put(GL_PACK_SWAP_BYTES,   zero /* GL_FALSE */);
-    pixelStateMap.put(GL_PACK_LSB_FIRST,    zero /* GL_FALSE */);
-    pixelStateMap.put(GL_PACK_ROW_LENGTH,   zero);
-    pixelStateMap.put(GL_PACK_SKIP_ROWS,    zero);
-    pixelStateMap.put(GL_PACK_SKIP_PIXELS,  zero);
-    pixelStateMap.put(GL_PACK_ALIGNMENT,    new Integer(4));
-    pixelStateMap.put(GL_PACK_IMAGE_HEIGHT, zero);
-    pixelStateMap.put(GL_PACK_SKIP_IMAGES,  zero);
-
-    pixelStateMap.put(GL_UNPACK_SWAP_BYTES,   zero /* GL_FALSE */);
-    pixelStateMap.put(GL_UNPACK_LSB_FIRST,    zero /* GL_FALSE */);
-    pixelStateMap.put(GL_UNPACK_ROW_LENGTH,   zero);
-    pixelStateMap.put(GL_UNPACK_SKIP_ROWS,    zero);
-    pixelStateMap.put(GL_UNPACK_SKIP_PIXELS,  zero);
-    pixelStateMap.put(GL_UNPACK_ALIGNMENT,    new Integer(4));
-    pixelStateMap.put(GL_UNPACK_IMAGE_HEIGHT, zero);
-    pixelStateMap.put(GL_UNPACK_SKIP_IMAGES,  zero);
-  }
-
-  private static Integer boxInt(int value) {
-    switch (value) {
-      case 0:           return zero;
-      case 1:           return one;
-
-      default: return new Integer(value);
-    }
+    pixelStateMap.put(GL.GL_PACK_ALIGNMENT,          4);
+    pixelStateMap.put(GL2GL3.GL_PACK_SWAP_BYTES,     0 /* GL_FALSE */);
+    pixelStateMap.put(GL2GL3.GL_PACK_LSB_FIRST,      0 /* GL_FALSE */);
+    pixelStateMap.put(GL2GL3.GL_PACK_ROW_LENGTH,     0);
+    pixelStateMap.put(GL2GL3.GL_PACK_SKIP_ROWS,      0);
+    pixelStateMap.put(GL2GL3.GL_PACK_SKIP_PIXELS,    0);
+    pixelStateMap.put(GL2GL3.GL_PACK_IMAGE_HEIGHT,   0);
+    pixelStateMap.put(GL2GL3.GL_PACK_SKIP_IMAGES,    0);
+
+    pixelStateMap.put(GL.GL_UNPACK_ALIGNMENT,        4);
+    pixelStateMap.put(GL2GL3.GL_UNPACK_SWAP_BYTES,   0 /* GL_FALSE */);
+    pixelStateMap.put(GL2GL3.GL_UNPACK_LSB_FIRST,    0 /* GL_FALSE */);
+    pixelStateMap.put(GL2GL3.GL_UNPACK_ROW_LENGTH,   0);
+    pixelStateMap.put(GL2GL3.GL_UNPACK_SKIP_ROWS,    0);
+    pixelStateMap.put(GL2GL3.GL_UNPACK_SKIP_PIXELS,  0);
+    pixelStateMap.put(GL2GL3.GL_UNPACK_IMAGE_HEIGHT, 0);
+    pixelStateMap.put(GL2GL3.GL_UNPACK_SKIP_IMAGES,  0);
   }
 }
+
diff --git a/src/jogl/classes/com/jogamp/opengl/impl/InternalBufferUtil.java.javame_cdc_fp b/src/jogl/classes/com/jogamp/opengl/impl/InternalBufferUtil.java.javame_cdc_fp
deleted file mode 100644 (file)
index 4a0eaa2..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Copyright (c) 2009 Sun Microsystems, Inc. All Rights Reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * 
- * - Redistribution of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * 
- * - Redistribution 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 Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * 
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- * 
- */
-
-package com.jogamp.opengl.impl;
-
-import java.lang.reflect.*;
-import java.nio.*;
-
-/** Internal copy of selected routines from BufferUtil to avoid
-    outward dependencies on com.jogamp.opengl.util package. */
-public class InternalBufferUtil {
-    public static final int SIZEOF_BYTE = 1;
-    public static final int SIZEOF_SHORT = 2;
-    public static final int SIZEOF_INT = 4;
-    public static final int SIZEOF_FLOAT = 4;
-
-    //----------------------------------------------------------------------
-    // Allocation routines
-    //
-
-    /** Allocates a new direct ByteBuffer with the specified number of
-        elements. The returned buffer will have its byte order set to
-        the host platform's native byte order. */
-    public static ByteBuffer newByteBuffer(int numElements) {
-        ByteBuffer bb = ByteBuffer.allocateDirect(numElements);
-        nativeOrder(bb);
-        return bb;
-    }
-    
-    /** Allocates a new direct IntBuffer with the specified number of
-        elements. The returned buffer will have its byte order set to
-        the host platform's native byte order. */
-    public static IntBuffer newIntBuffer(int numElements) {
-        ByteBuffer bb = newByteBuffer(numElements * SIZEOF_INT);
-        return bb.asIntBuffer();
-    }
-    
-    /** Allocates a new direct ShortBuffer with the specified number of
-        elements. The returned buffer will have its byte order set to
-        the host platform's native byte order. */
-    public static ShortBuffer newShortBuffer(int numElements) {
-        ByteBuffer bb = newByteBuffer(numElements * SIZEOF_SHORT);
-        return bb.asShortBuffer();
-    }
-    
-    /** Allocates a new direct FloatBuffer with the specified number of
-        elements. The returned buffer will have its byte order set to
-        the host platform's native byte order. */
-    public static FloatBuffer newFloatBuffer(int numElements) {
-        ByteBuffer bb = newByteBuffer(numElements * SIZEOF_FLOAT);
-        return bb.asFloatBuffer();
-    }
-    
-    //----------------------------------------------------------------------
-    // Copy routines (type-to-type)
-    //
-
-    /** Copies the <i>remaining</i> elements (as defined by
-        <code>limit() - position()</code>) in the passed FloatBuffer
-        into a newly-allocated direct ByteBuffer. The returned buffer
-        will have its byte order set to the host platform's native byte
-        order. The position of the newly-allocated buffer will be zero,
-        and the position of the passed buffer is unchanged (though its
-        mark is changed). */
-    public static ByteBuffer copyFloatBufferAsByteBuffer(FloatBuffer orig) {
-        ByteBuffer dest = newByteBuffer(orig.remaining() * SIZEOF_FLOAT);
-        dest.asFloatBuffer().put(orig);
-        dest.rewind();
-        return dest;
-    }
-  
-    /** Copies the <i>remaining</i> elements (as defined by
-        <code>limit() - position()</code>) in the passed IntBuffer into
-        a newly-allocated direct ByteBuffer. The returned buffer will
-        have its byte order set to the host platform's native byte
-        order. The position of the newly-allocated buffer will be zero,
-        and the position of the passed buffer is unchanged (though its
-        mark is changed). */
-    public static ByteBuffer copyIntBufferAsByteBuffer(IntBuffer orig) {
-        ByteBuffer dest = newByteBuffer(orig.remaining() * SIZEOF_INT);
-        dest.asIntBuffer().put(orig);
-        dest.rewind();
-        return dest;
-    }
-  
-    /** Copies the <i>remaining</i> elements (as defined by
-        <code>limit() - position()</code>) in the passed ShortBuffer
-        into a newly-allocated direct ByteBuffer. The returned buffer
-        will have its byte order set to the host platform's native byte
-        order. The position of the newly-allocated buffer will be zero,
-        and the position of the passed buffer is unchanged (though its
-        mark is changed). */
-    public static ByteBuffer copyShortBufferAsByteBuffer(ShortBuffer orig) {
-        ByteBuffer dest = newByteBuffer(orig.remaining() * SIZEOF_SHORT);
-        dest.asShortBuffer().put(orig);
-        dest.rewind();
-        return dest;
-    }
-
-    /** Copies the <i>remaining</i> elements (as defined by
-        <code>limit() - position()</code>) in the passed ByteBuffer into
-        a newly-allocated direct ByteBuffer. The returned buffer will
-        have its byte order set to the host platform's native byte
-        order. The position of the newly-allocated buffer will be zero,
-        and the position of the passed buffer is unchanged (though its
-        mark is changed). */
-    public static ByteBuffer copyByteBuffer(ByteBuffer orig) {
-        ByteBuffer dest = newByteBuffer(orig.remaining());
-        dest.put(orig);
-        dest.rewind();
-        return dest;
-    }
-
-    //----------------------------------------------------------------------
-    // Conversion routines 
-    //
-
-    public static float[] getFloatArray(double[] source) {
-        int i=source.length;
-        float[] dest = new float[i--];
-        while(i>=0) { dest[i]=(float)source[i]; i--; }
-        return dest;
-    }
-
-    public static ByteBuffer nativeOrder(ByteBuffer buf) {
-        if (!isCDCFP) {
-            try {
-                if (byteOrderClass == null) {
-                    byteOrderClass = Class.forName("java.nio.ByteOrder");
-                    orderMethod = ByteBuffer.class.getMethod("order", new Class[] { byteOrderClass });
-                    Method nativeOrderMethod = byteOrderClass.getMethod("nativeOrder", null);
-                    nativeOrderObject = nativeOrderMethod.invoke(null, null);
-                }
-            } catch (Throwable t) {
-                // Must be running on CDC / FP
-                isCDCFP = true;
-            }
-
-            if (!isCDCFP) {
-                try {
-                    orderMethod.invoke(buf, new Object[] { nativeOrderObject });
-                } catch (Throwable t) {
-                }
-            }
-        }
-        return buf;
-    }
-
-    //----------------------------------------------------------------------
-    // Internals only below this point
-    //
-
-    // NOTE that this work must be done reflectively at the present time
-    // because this code must compile and run correctly on both CDC/FP and J2SE
-    private static boolean isCDCFP;
-    private static Class byteOrderClass;
-    private static Object nativeOrderObject;
-    private static Method orderMethod;
-}
diff --git a/src/jogl/classes/com/jogamp/opengl/impl/InternalBufferUtil.java.javase b/src/jogl/classes/com/jogamp/opengl/impl/InternalBufferUtil.java.javase
deleted file mode 100644 (file)
index 655fa95..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright (c) 2009 Sun Microsystems, Inc. All Rights Reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * 
- * - Redistribution of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * 
- * - Redistribution 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 Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * 
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- * 
- */
-
-package com.jogamp.opengl.impl;
-
-import java.lang.reflect.*;
-import java.nio.*;
-
-/** Internal copy of selected routines from BufferUtil to avoid
-    outward dependencies on com.jogamp.opengl.util package. */
-public class InternalBufferUtil {
-    public static final int SIZEOF_BYTE = 1;
-    public static final int SIZEOF_SHORT = 2;
-    public static final int SIZEOF_INT = 4;
-    public static final int SIZEOF_FLOAT = 4;
-    public static final int SIZEOF_LONG = 8;
-    public static final int SIZEOF_DOUBLE = 8;
-
-    //----------------------------------------------------------------------
-    // Allocation routines
-    //
-
-    /** Allocates a new direct ByteBuffer with the specified number of
-        elements. The returned buffer will have its byte order set to
-        the host platform's native byte order. */
-    public static ByteBuffer newByteBuffer(int numElements) {
-        ByteBuffer bb = ByteBuffer.allocateDirect(numElements);
-        nativeOrder(bb);
-        return bb;
-    }
-    
-    /** Allocates a new direct DoubleBuffer with the specified number of
-        elements. The returned buffer will have its byte order set to
-        the host platform's native byte order. */
-    public static DoubleBuffer newDoubleBuffer(int numElements) {
-        ByteBuffer bb = newByteBuffer(numElements * SIZEOF_DOUBLE);
-        return bb.asDoubleBuffer();
-    }
-
-    /** Allocates a new direct IntBuffer with the specified number of
-        elements. The returned buffer will have its byte order set to
-        the host platform's native byte order. */
-    public static IntBuffer newIntBuffer(int numElements) {
-        ByteBuffer bb = newByteBuffer(numElements * SIZEOF_INT);
-        return bb.asIntBuffer();
-    }
-    
-    /** Allocates a new direct ShortBuffer with the specified number of
-        elements. The returned buffer will have its byte order set to
-        the host platform's native byte order. */
-    public static ShortBuffer newShortBuffer(int numElements) {
-        ByteBuffer bb = newByteBuffer(numElements * SIZEOF_SHORT);
-        return bb.asShortBuffer();
-    }
-    
-    /** Allocates a new direct FloatBuffer with the specified number of
-        elements. The returned buffer will have its byte order set to
-        the host platform's native byte order. */
-    public static FloatBuffer newFloatBuffer(int numElements) {
-        ByteBuffer bb = newByteBuffer(numElements * SIZEOF_FLOAT);
-        return bb.asFloatBuffer();
-    }
-    
-    //----------------------------------------------------------------------
-    // Copy routines (type-to-ByteBuffer)
-    //
-
-    /** Copies the <i>remaining</i> elements (as defined by
-        <code>limit() - position()</code>) in the passed FloatBuffer
-        into a newly-allocated direct ByteBuffer. The returned buffer
-        will have its byte order set to the host platform's native byte
-        order. The position of the newly-allocated buffer will be zero,
-        and the position of the passed buffer is unchanged (though its
-        mark is changed). */
-    public static ByteBuffer copyFloatBufferAsByteBuffer(FloatBuffer orig) {
-        ByteBuffer dest = newByteBuffer(orig.remaining() * SIZEOF_FLOAT);
-        dest.asFloatBuffer().put(orig);
-        dest.rewind();
-        return dest;
-    }
-  
-    /** Copies the <i>remaining</i> elements (as defined by
-        <code>limit() - position()</code>) in the passed IntBuffer into
-        a newly-allocated direct ByteBuffer. The returned buffer will
-        have its byte order set to the host platform's native byte
-        order. The position of the newly-allocated buffer will be zero,
-        and the position of the passed buffer is unchanged (though its
-        mark is changed). */
-    public static ByteBuffer copyIntBufferAsByteBuffer(IntBuffer orig) {
-        ByteBuffer dest = newByteBuffer(orig.remaining() * SIZEOF_INT);
-        dest.asIntBuffer().put(orig);
-        dest.rewind();
-        return dest;
-    }
-  
-    /** Copies the <i>remaining</i> elements (as defined by
-        <code>limit() - position()</code>) in the passed ShortBuffer
-        into a newly-allocated direct ByteBuffer. The returned buffer
-        will have its byte order set to the host platform's native byte
-        order. The position of the newly-allocated buffer will be zero,
-        and the position of the passed buffer is unchanged (though its
-        mark is changed). */
-    public static ByteBuffer copyShortBufferAsByteBuffer(ShortBuffer orig) {
-        ByteBuffer dest = newByteBuffer(orig.remaining() * SIZEOF_SHORT);
-        dest.asShortBuffer().put(orig);
-        dest.rewind();
-        return dest;
-    }
-
-    /** Copies the <i>remaining</i> elements (as defined by
-        <code>limit() - position()</code>) in the passed ByteBuffer into
-        a newly-allocated direct ByteBuffer. The returned buffer will
-        have its byte order set to the host platform's native byte
-        order. The position of the newly-allocated buffer will be zero,
-        and the position of the passed buffer is unchanged (though its
-        mark is changed). */
-    public static ByteBuffer copyByteBuffer(ByteBuffer orig) {
-        ByteBuffer dest = newByteBuffer(orig.remaining());
-        dest.put(orig);
-        dest.rewind();
-        return dest;
-    }
-
-    //----------------------------------------------------------------------
-    // Conversion routines 
-    //
-
-    public static float[] getFloatArray(double[] source) {
-        int i=source.length;
-        float[] dest = new float[i--];
-        while(i>=0) { dest[i]=(float)source[i]; i--; }
-        return dest;
-    }
-
-    public static ByteBuffer nativeOrder(ByteBuffer buf) {
-        if (!isCDCFP) {
-            try {
-                if (byteOrderClass == null) {
-                    byteOrderClass = Class.forName("java.nio.ByteOrder");
-                    orderMethod = ByteBuffer.class.getMethod("order", new Class[] { byteOrderClass });
-                    Method nativeOrderMethod = byteOrderClass.getMethod("nativeOrder", null);
-                    nativeOrderObject = nativeOrderMethod.invoke(null, null);
-                }
-            } catch (Throwable t) {
-                // Must be running on CDC / FP
-                isCDCFP = true;
-            }
-
-            if (!isCDCFP) {
-                try {
-                    orderMethod.invoke(buf, new Object[] { nativeOrderObject });
-                } catch (Throwable t) {
-                }
-            }
-        }
-        return buf;
-    }
-
-    //----------------------------------------------------------------------
-    // Internals only below this point
-    //
-
-    // NOTE that this work must be done reflectively at the present time
-    // because this code must compile and run correctly on both CDC/FP and J2SE
-    private static boolean isCDCFP;
-    private static Class byteOrderClass;
-    private static Object nativeOrderObject;
-    private static Method orderMethod;
-}
index dbd84c9..ab277e7 100755 (executable)
@@ -118,6 +118,7 @@ import java.nio.*;
 
 import javax.media.opengl.*;
 import javax.media.opengl.fixedfunc.GLMatrixFunc;
+import com.jogamp.common.nio.Buffers;
 
 /**
  * ProjectFloat.java
@@ -180,7 +181,7 @@ public class ProjectFloat {
     // Slice up one big buffer because some NIO implementations
     // allocate a huge amount of memory to back even the smallest of
     // buffers.
-    locbuf = InternalBufferUtil.newFloatBuffer(2*16+2*4+3*3);
+    locbuf = Buffers.newDirectFloatBuffer(2*16+2*4+3*3);
     int pos = 0;
     int sz = 16;
     matrixBuf = slice(locbuf, pos, sz);
index 56ae649..5671b03 100755 (executable)
@@ -84,66 +84,35 @@ public abstract class EGLContext extends GLContextImpl {
 
     protected Map/*<String, String>*/ getExtensionNameMap() { return null; }
 
-    protected int makeCurrentImpl() throws GLException {
+    protected void makeCurrentImpl(boolean newCreated) throws GLException {
         if(EGL.EGL_NO_DISPLAY==((EGLDrawable)drawable).getDisplay() ) {
             throw new GLException("drawable not properly initialized, NO DISPLAY: "+drawable);
         }
-        if (0 == drawable.getNativeWindow().getSurfaceHandle()) {
-            throw new GLException("drawable has invalid surface handle: "+drawable);
-        }
-        boolean newCreated = false;
-        if (!isCreated()) {
-            create(); // throws exception if fails!
-            newCreated = true;
-            if (DEBUG) {
-                System.err.println(getThreadName() + ": !!! Created GL context " + toHexString(contextHandle) + " for " + getClass().getName());
-            }
-        }
         if (EGL.eglGetCurrentContext() != contextHandle) {
             if (!EGL.eglMakeCurrent(((EGLDrawable)drawable).getDisplay(),
-                                    ((EGLDrawable)drawable).getSurface(),
-                                    ((EGLDrawable)drawableRead).getSurface(),
+                                    drawable.getHandle(),
+                                    drawableRead.getHandle(),
                                     contextHandle)) {
                 throw new GLException("Error making context 0x" +
                                       Long.toHexString(contextHandle) + " current: error code " + EGL.eglGetError());
             }
         }
-
-        if(newCreated) {
-            setGLFunctionAvailability(false, -1, -1, CTX_PROFILE_ES|CTX_OPTION_ANY);
-            return CONTEXT_CURRENT_NEW;
-        }
-        return CONTEXT_CURRENT;
     }
 
     protected void releaseImpl() throws GLException {
-      getDrawableImpl().getFactoryImpl().lockToolkit();
-      try {
-          if (!EGL.eglMakeCurrent(((EGLDrawable)drawable).getDisplay(),
-                                  EGL.EGL_NO_SURFACE,
-                                  EGL.EGL_NO_SURFACE,
-                                  EGL.EGL_NO_CONTEXT)) {
-                throw new GLException("Error freeing OpenGL context 0x" +
-                                      Long.toHexString(contextHandle) + ": error code " + EGL.eglGetError());
-          }
-      } finally {
-          getDrawableImpl().getFactoryImpl().unlockToolkit();
+      if (!EGL.eglMakeCurrent(((EGLDrawable)drawable).getDisplay(),
+                              EGL.EGL_NO_SURFACE,
+                              EGL.EGL_NO_SURFACE,
+                              EGL.EGL_NO_CONTEXT)) {
+            throw new GLException("Error freeing OpenGL context 0x" +
+                                  Long.toHexString(contextHandle) + ": error code " + EGL.eglGetError());
       }
     }
 
     protected void destroyImpl() throws GLException {
-      getDrawableImpl().getFactoryImpl().lockToolkit();
-      try {
-          if (contextHandle != 0) {
-              if (!EGL.eglDestroyContext(((EGLDrawable)drawable).getDisplay(), contextHandle)) {
-                  throw new GLException("Error destroying OpenGL context 0x" +
-                                        Long.toHexString(contextHandle) + ": error code " + EGL.eglGetError());
-              }
-              contextHandle = 0;
-              GLContextShareSet.contextDestroyed(this);
-          }
-      } finally {
-          getDrawableImpl().getFactoryImpl().unlockToolkit();
+      if (!EGL.eglDestroyContext(((EGLDrawable)drawable).getDisplay(), contextHandle)) {
+          throw new GLException("Error destroying OpenGL context 0x" +
+                                Long.toHexString(contextHandle) + ": error code " + EGL.eglGetError());
       }
     }
 
@@ -155,7 +124,7 @@ public abstract class EGLContext extends GLContextImpl {
         // FIXME
     }
 
-    protected void create() throws GLException {
+    protected boolean createImpl() throws GLException {
         long eglDisplay = ((EGLDrawable)drawable).getDisplay();
         EGLGraphicsConfiguration config = ((EGLDrawable)drawable).getGraphicsConfiguration();
         GLProfile glProfile = drawable.getGLProfile();
@@ -208,19 +177,20 @@ public abstract class EGLContext extends GLContextImpl {
         if (DEBUG) {
             System.err.println(getThreadName() + ": !!! Created OpenGL context 0x" +
                                Long.toHexString(contextHandle) + 
-                               ",\n\twrite surface 0x" + Long.toHexString(((EGLDrawable)drawable).getSurface()) +
-                               ",\n\tread  surface 0x" + Long.toHexString(((EGLDrawable)drawableRead).getSurface())+
+                               ",\n\twrite surface 0x" + Long.toHexString(drawable.getHandle()) +
+                               ",\n\tread  surface 0x" + Long.toHexString(drawableRead.getHandle())+
                                ",\n\t"+this+
                                ",\n\tsharing with 0x" + Long.toHexString(shareWith));
         }
         if (!EGL.eglMakeCurrent(((EGLDrawable)drawable).getDisplay(),
-                                ((EGLDrawable)drawable).getSurface(),
-                                ((EGLDrawable)drawableRead).getSurface(),
+                                drawable.getHandle(),
+                                drawableRead.getHandle(),
                                 contextHandle)) {
             throw new GLException("Error making context 0x" +
                                   Long.toHexString(contextHandle) + " current: error code " + EGL.eglGetError());
         }
         setGLFunctionAvailability(true, glProfile.usesNativeGLES2()?2:1, 0, CTX_PROFILE_ES|CTX_OPTION_ANY);
+        return true;
     }
 
     protected void updateGLProcAddressTable(int major, int minor, int ctp) {
@@ -246,18 +216,12 @@ public abstract class EGLContext extends GLContextImpl {
           eglQueryStringInitialized = true;
         }
         if (eglQueryStringAvailable) {
-          GLDrawableFactoryImpl factory = getDrawableImpl().getFactoryImpl();
-          factory.lockToolkit();
-          try {
             String ret = EGL.eglQueryString(((EGLDrawable)drawable).getDisplay(), 
                                             EGL.EGL_EXTENSIONS);
             if (DEBUG) {
               System.err.println("!!! EGL extensions: " + ret);
             }
             return ret;
-          } finally {
-            factory.unlockToolkit();
-          }
         } else {
           return "";
         }
@@ -277,7 +241,7 @@ public abstract class EGLContext extends GLContextImpl {
     // Currently unimplemented stuff
     //
 
-    public void copy(GLContext source, int mask) throws GLException {
+    protected void copyImpl(GLContext source, int mask) throws GLException {
         throw new GLException("Not yet implemented");
     }
 
index a36973d..7eeb191 100755 (executable)
@@ -60,7 +60,7 @@ public abstract class EGLDrawable extends GLDrawableImpl {
         return eglDisplay;
     }
 
-    public long getSurface() {
+    public long getHandle() {
         return eglSurface;
     }
 
@@ -98,85 +98,83 @@ public abstract class EGLDrawable extends GLDrawableImpl {
 
     protected void setRealizedImpl() {
         if (realized) {
-            if ( NativeWindow.LOCK_SURFACE_NOT_READY == lockSurface() ) {
-                throw new GLException("Couldn't lock surface");
-            }
-            // lockSurface() also resolved the window/surface handles
-            try {
-                AbstractGraphicsConfiguration aConfig = component.getGraphicsConfiguration().getNativeGraphicsConfiguration();
-                AbstractGraphicsDevice aDevice = aConfig.getScreen().getDevice();
-                if(aDevice instanceof EGLGraphicsDevice) {
-                    // just fetch the data .. trust but verify ..
-                    eglDisplay = aDevice.getHandle();
-                    if (eglDisplay == EGL.EGL_NO_DISPLAY) {
-                        throw new GLException("Invalid EGL display in EGLGraphicsDevice from "+aDevice);
+            AbstractGraphicsConfiguration aConfig = component.getGraphicsConfiguration().getNativeGraphicsConfiguration();
+            AbstractGraphicsDevice aDevice = aConfig.getScreen().getDevice();
+            if(aDevice instanceof EGLGraphicsDevice) {
+                if(DEBUG) {
+                    System.err.println("EGLDrawable.setRealized: using existing EGL config: "+this);
+                }
+                // just fetch the data .. trust but verify ..
+                eglDisplay = aDevice.getHandle();
+                if (eglDisplay == EGL.EGL_NO_DISPLAY) {
+                    throw new GLException("Invalid EGL display in EGLGraphicsDevice from "+aDevice);
+                }
+                if(aConfig instanceof EGLGraphicsConfiguration) {
+                    eglConfig = (EGLGraphicsConfiguration) aConfig; // done ..
+                    if (null == eglConfig) {
+                        throw new GLException("Null EGLGraphicsConfiguration from "+aConfig);
                     }
-                    if(aConfig instanceof EGLGraphicsConfiguration) {
-                        eglConfig = (EGLGraphicsConfiguration) aConfig; // done ..
-                        if (null == eglConfig) {
-                            throw new GLException("Null EGLGraphicsConfiguration from "+aConfig);
-                        }
 
-                        int[] tmp = new int[1];
-                        if ( 0 != component.getSurfaceHandle() &&
-                             EGL.eglQuerySurface(eglDisplay, component.getSurfaceHandle(), EGL.EGL_CONFIG_ID, tmp, 0) ) {
-                            // component holds static EGLSurface
-                            eglSurface = component.getSurfaceHandle();
-                            if(DEBUG) {
-                                System.err.println("setSurface re-using component's EGLSurface: handle 0x"+Long.toHexString(eglSurface));
-                            }
-                        } else {
-                            // EGLSurface is ours ..
-                            ownEGLSurface=true;
-                            
-                            eglConfig.updateGraphicsConfiguration();
-
-                            recreateSurface();
+                    int[] tmp = new int[1];
+                    if ( 0 != component.getSurfaceHandle() &&
+                         EGL.eglQuerySurface(eglDisplay, component.getSurfaceHandle(), EGL.EGL_CONFIG_ID, tmp, 0) ) {
+                        // component holds static EGLSurface
+                        eglSurface = component.getSurfaceHandle();
+                        if(DEBUG) {
+                            System.err.println("setSurface re-using component's EGLSurface: handle 0x"+Long.toHexString(eglSurface));
                         }
                     } else {
-                        throw new GLException("EGLGraphicsDevice hold by non EGLGraphicsConfiguration: "+aConfig);
+                        // EGLSurface is ours ..
+                        ownEGLSurface=true;
+                        
+                        eglConfig.updateGraphicsConfiguration();
+
+                        recreateSurface();
                     }
                 } else {
-                    // create a new EGL config ..
-                    ownEGLDisplay=true;
-                    // EGLSurface is ours ..
-                    ownEGLSurface=true;
-
-                    long nDisplay=0;
-                    if( NativeWindowFactory.TYPE_WINDOWS.equals(NativeWindowFactory.getNativeWindowType(false)) ) {
-                        nDisplay = component.getSurfaceHandle(); // don't even ask ..
-                    } else {
-                        nDisplay = aDevice.getHandle(); // 0 == EGL.EGL_DEFAULT_DISPLAY
+                    throw new GLException("EGLGraphicsDevice hold by non EGLGraphicsConfiguration: "+aConfig);
+                }
+            } else {
+                if(DEBUG) {
+                    System.err.println("EGLDrawable.setRealized: creating new EGL config: "+this);
+                }
+                // create a new EGL config ..
+                ownEGLDisplay=true;
+                // EGLSurface is ours ..
+                ownEGLSurface=true;
+
+                long nDisplay=0;
+                if( NativeWindowFactory.TYPE_WINDOWS.equals(NativeWindowFactory.getNativeWindowType(false)) ) {
+                    nDisplay = component.getSurfaceHandle(); // don't even ask ..
+                } else {
+                    nDisplay = aDevice.getHandle(); // 0 == EGL.EGL_DEFAULT_DISPLAY
+                }
+                eglDisplay = EGL.eglGetDisplay(nDisplay);
+                if (eglDisplay == EGL.EGL_NO_DISPLAY) {
+                    if(DEBUG) {
+                        System.err.println("eglDisplay("+Long.toHexString(nDisplay)+" <surfaceHandle>): failed, using EGL_DEFAULT_DISPLAY");
                     }
+                    nDisplay = EGL.EGL_DEFAULT_DISPLAY;
                     eglDisplay = EGL.eglGetDisplay(nDisplay);
-                    if (eglDisplay == EGL.EGL_NO_DISPLAY) {
-                        if(DEBUG) {
-                            System.err.println("eglDisplay("+Long.toHexString(nDisplay)+" <surfaceHandle>): failed, using EGL_DEFAULT_DISPLAY");
-                        }
-                        nDisplay = EGL.EGL_DEFAULT_DISPLAY;
-                        eglDisplay = EGL.eglGetDisplay(nDisplay);
-                    }
-                    if (eglDisplay == EGL.EGL_NO_DISPLAY) {
-                        throw new GLException("Failed to created EGL display: nhandle 0x"+Long.toHexString(nDisplay)+", "+aDevice+", error 0x"+Integer.toHexString(EGL.eglGetError()));
-                    } else if(DEBUG) {
-                        System.err.println("eglDisplay("+Long.toHexString(nDisplay)+"): 0x"+Long.toHexString(eglDisplay));
-                    }
-                    if (!EGL.eglInitialize(eglDisplay, null, null)) {
-                        throw new GLException("eglInitialize failed"+", error 0x"+Integer.toHexString(EGL.eglGetError()));
-                    }
-                    EGLGraphicsDevice e = new EGLGraphicsDevice(eglDisplay);
-                    DefaultGraphicsScreen s = new DefaultGraphicsScreen(e, aConfig.getScreen().getIndex());
-                    GLCapabilities caps = (GLCapabilities) aConfig.getChosenCapabilities(); // yes, use the already choosen Capabilities (x11,win32,..)
-                    eglConfig = (EGLGraphicsConfiguration) GraphicsConfigurationFactory.getFactory(e).chooseGraphicsConfiguration(caps, null, s);
-                    if (null == eglConfig) {
-                        throw new GLException("Couldn't create EGLGraphicsConfiguration from "+s);
-                    } else if(DEBUG) {
-                        System.err.println("Chosen eglConfig: "+eglConfig);
-                    }
-                    recreateSurface();
                 }
-            } finally {
-              unlockSurface();
+                if (eglDisplay == EGL.EGL_NO_DISPLAY) {
+                    throw new GLException("Failed to created EGL display: nhandle 0x"+Long.toHexString(nDisplay)+", "+aDevice+", error 0x"+Integer.toHexString(EGL.eglGetError()));
+                } else if(DEBUG) {
+                    System.err.println("eglDisplay("+Long.toHexString(nDisplay)+"): 0x"+Long.toHexString(eglDisplay));
+                }
+                if (!EGL.eglInitialize(eglDisplay, null, null)) {
+                    throw new GLException("eglInitialize failed"+", error 0x"+Integer.toHexString(EGL.eglGetError()));
+                }
+                EGLGraphicsDevice e = new EGLGraphicsDevice(eglDisplay);
+                DefaultGraphicsScreen s = new DefaultGraphicsScreen(e, aConfig.getScreen().getIndex());
+                GLCapabilities caps = (GLCapabilities) aConfig.getChosenCapabilities(); // yes, use the already choosen Capabilities (x11,win32,..)
+                eglConfig = (EGLGraphicsConfiguration) GraphicsConfigurationFactory.getFactory(e).chooseGraphicsConfiguration(caps, null, s);
+                if (null == eglConfig) {
+                    throw new GLException("Couldn't create EGLGraphicsConfiguration from "+s);
+                } else if(DEBUG) {
+                    System.err.println("Chosen eglConfig: "+eglConfig);
+                }
+                recreateSurface();
             }
         } else if (ownEGLSurface && eglSurface != EGL.EGL_NO_SURFACE) {
             // Destroy the window surface
@@ -209,7 +207,13 @@ public abstract class EGLDrawable extends GLDrawableImpl {
     }
 
     public GLDynamicLookupHelper getGLDynamicLookupHelper() {
-        return EGLDynamicLookupHelper.getEGLDynamicLookupHelper(getGLProfile());
+        if (getGLProfile().usesNativeGLES2()) {
+            return getFactoryImpl().getGLDynamicLookupHelper(2);
+        } else if (getGLProfile().usesNativeGLES1()) {
+            return getFactoryImpl().getGLDynamicLookupHelper(1);
+        } else {
+            throw new GLException("Unsupported: "+getGLProfile());
+        }
     }
 
     public String toString() {
index f74c785..935281c 100755 (executable)
@@ -44,6 +44,9 @@ import com.jogamp.nativewindow.impl.NullWindow;
 
 public class EGLDrawableFactory extends GLDrawableFactoryImpl {
   
+    private static final GLDynamicLookupHelper eglES1DynamicLookupHelper;
+    private static final GLDynamicLookupHelper eglES2DynamicLookupHelper;
+
     static {
         // Register our GraphicsConfigurationFactory implementations
         // The act of constructing them causes them to be registered
@@ -55,6 +58,36 @@ public class EGLDrawableFactory extends GLDrawableFactoryImpl {
                 ReflectionUtil.createInstance("com.jogamp.opengl.impl.x11.glx.X11GLXGraphicsConfigurationFactory");
             } catch (JogampRuntimeException jre) { /* n/a .. */ }
         }
+
+        // FIXME: Probably need to move EGL from a static model 
+        // to a dynamic one, where there can be 2 instances 
+        // for each ES profile with their own ProcAddressTable.
+
+        GLDynamicLookupHelper tmp=null;
+        try {
+            tmp = new GLDynamicLookupHelper(new EGLES1DynamicLibraryBundleInfo());
+        } catch (GLException gle) {
+            if(DEBUG) {
+                gle.printStackTrace();
+            }
+        }
+        eglES1DynamicLookupHelper = tmp;
+        if(null!=eglES1DynamicLookupHelper && eglES1DynamicLookupHelper.isLibComplete()) {
+            EGL.resetProcAddressTable(eglES1DynamicLookupHelper);
+        }
+
+        tmp=null;
+        try {
+            tmp = new GLDynamicLookupHelper(new EGLES2DynamicLibraryBundleInfo());
+        } catch (GLException gle) {
+            if(DEBUG) {
+                gle.printStackTrace();
+            }
+        }
+        eglES2DynamicLookupHelper = tmp;
+        if(null!=eglES2DynamicLookupHelper && eglES2DynamicLookupHelper.isLibComplete()) {
+            EGL.resetProcAddressTable(eglES2DynamicLookupHelper);
+        }
     }
 
     public EGLDrawableFactory() {
@@ -62,7 +95,19 @@ public class EGLDrawableFactory extends GLDrawableFactoryImpl {
     }
 
     public GLDynamicLookupHelper getGLDynamicLookupHelper(int esProfile) {
-        return EGLDynamicLookupHelper.getEGLDynamicLookupHelper(esProfile);
+        if (2==esProfile) {
+            if(null==eglES2DynamicLookupHelper) {
+                throw new GLException("GLDynamicLookupHelper for ES2 not available");
+            }
+            return eglES2DynamicLookupHelper;
+        } else if (1==esProfile) {
+            if(null==eglES1DynamicLookupHelper) {
+                throw new GLException("GLDynamicLookupHelper for ES1 not available");
+            }
+            return eglES1DynamicLookupHelper;
+        } else {
+            throw new GLException("Unsupported: ES"+esProfile);
+        }
     }
 
     protected void shutdown() {}
@@ -41,84 +41,32 @@ import java.security.*;
  *
  * Currently two implementations exist, one for ES1 and one for ES2.
  */
-public abstract class EGLDynamicLookupHelper extends GLDynamicLookupHelper {
-    private static final EGLDynamicLookupHelper eglES1DynamicLookupHelper;
-    private static final EGLDynamicLookupHelper eglES2DynamicLookupHelper;
+public abstract class EGLDynamicLibraryBundleInfo extends GLDynamicLibraryBundleInfo {
 
-    static {
-        EGLDynamicLookupHelper tmp=null;
-        try {
-            tmp = new EGLES1DynamicLookupHelper();
-        } catch (GLException gle) {
-            if(DEBUG) {
-                gle.printStackTrace();
-            }
-        }
-        eglES1DynamicLookupHelper = tmp;
-
-        tmp=null;
-        try {
-            tmp = new EGLES2DynamicLookupHelper();
-        } catch (GLException gle) {
-            if(DEBUG) {
-                gle.printStackTrace();
-            }
-        }
-        eglES2DynamicLookupHelper = tmp;
+    protected EGLDynamicLibraryBundleInfo() {
+        super();
     }
 
-    public static EGLDynamicLookupHelper getEGLDynamicLookupHelper(GLProfile glp) {
-        if (glp.usesNativeGLES2()) {
-            return getEGLDynamicLookupHelper(2);
-        } else if (glp.usesNativeGLES1()) {
-            return getEGLDynamicLookupHelper(1);
-        } else {
-            throw new GLException("Unsupported: "+glp);
-        }
-    }
+    /** Might be a desktop GL library, and might need to allow symbol access to subsequent libs */
+    public boolean shallLinkGlobal() { return true; }
 
-    public static EGLDynamicLookupHelper getEGLDynamicLookupHelper(int esProfile) {
-        if (2==esProfile) {
-            if(null==eglES2DynamicLookupHelper) {
-                throw new GLException("EGLDynamicLookupHelper for ES2 not available");
-            }
-            return eglES2DynamicLookupHelper;
-        } else if (1==esProfile) {
-            if(null==eglES1DynamicLookupHelper) {
-                throw new GLException("EGLDynamicLookupHelper for ES1 not available");
-            }
-            return eglES1DynamicLookupHelper;
-        } else {
-            throw new GLException("Unsupported: ES"+esProfile);
-        }
+    public final List getToolGetProcAddressFuncNameList() {
+        List res = new ArrayList();
+        res.add("eglGetProcAddress");
+        return res;
     }
 
-    protected EGLDynamicLookupHelper() {
-        super();
-        EGL.resetProcAddressTable(this);
+    public final long toolDynamicLookupFunction(long toolGetProcAddressHandle, String funcName) {
+        return EGL.eglGetProcAddress(toolGetProcAddressHandle, funcName);
     }
 
-    protected boolean hasESBinding = false;
-    public boolean hasESBinding() { return hasESBinding; }
-
-    protected final List/*<String>*/ getGLXLibNames() {
+    protected List/*<String>*/ getEGLLibNamesList() {
         List/*<String>*/ eglLibNames = new ArrayList();
-
         // EGL
         eglLibNames.add("EGL");
         // for windows distributions using the 'unlike' lib prefix, 
         // where our tool does not add it.
         eglLibNames.add("libEGL");
-
         return eglLibNames;
     }
-
-    protected final String getGLXGetProcAddressFuncName() {
-        return "eglGetProcAddress" ;
-    }
-
-    protected final long dynamicLookupFunctionOnGLX(long glxGetProcAddressHandle, String glFuncName) {
-        return EGL.eglGetProcAddress(glxGetProcAddressHandle, glFuncName);
-    }
 }
-
@@ -30,38 +30,22 @@ package com.jogamp.opengl.impl.egl;
 import java.util.*;
 import com.jogamp.opengl.impl.*;
 
-/**
- * Implementation of the EGLDynamicLookupHelper for ES1.
- */
-public class EGLES1DynamicLookupHelper extends EGLDynamicLookupHelper {
-  
-    protected EGLES1DynamicLookupHelper() {
-        super();
+public class EGLES1DynamicLibraryBundleInfo extends EGLDynamicLibraryBundleInfo {
+    static List/*<String>*/ glueLibNames;
+    static {
+        glueLibNames = new ArrayList();
+        glueLibNames.addAll(GLDynamicLibraryBundleInfo.getGlueLibNamesPreload());
+        glueLibNames.add("jogl_es1");
     }
 
-    protected void loadGLJNILibrary() {
-        Throwable t=null;
-        try {
-            GLJNILibLoader.loadES1();
-            hasESBinding = true;
-        } catch (UnsatisfiedLinkError ule) {
-            t=ule;
-        } catch (SecurityException se) {
-            t=se;
-        } catch (NullPointerException npe) {
-            t=npe;
-        } catch (RuntimeException re) {
-            t=re;
-        }
-        if(DEBUG && null!=t) {
-            System.err.println("EGLES1DynamicLookupHelper: ES1 Binding Library not available");
-            t.printStackTrace();
-        }
+    protected EGLES1DynamicLibraryBundleInfo() {
+        super();
     }
 
-    protected List/*<String>*/ getGLLibNames() {
-        List/*<String>*/ glesLibNames = new ArrayList();
+    public List getToolLibNames() {
+        List/*<List>*/ libNames = new ArrayList();
 
+        List/*<String>*/ glesLibNames = new ArrayList();
         glesLibNames.add("GLES_CM");
         glesLibNames.add("GLES_CL");
         glesLibNames.add("GLESv1_CM");
@@ -70,8 +54,19 @@ public class EGLES1DynamicLookupHelper extends EGLDynamicLookupHelper {
         glesLibNames.add("libGLES_CM");
         glesLibNames.add("libGLES_CL");
         glesLibNames.add("libGLESv1_CM");
+        // last but not least, we may even use the desktop GL library,
+        // which would be eg Mesa + Gallium EGL ..
+        glesLibNames.add("libGL.so.1");
+        glesLibNames.add("libGL.so");
+        glesLibNames.add("GL");
+
+        libNames.add(glesLibNames);
+        libNames.add(getEGLLibNamesList());
+        return libNames;
+    }
 
-        return glesLibNames;
+    public List/*<String>*/ getGlueLibNames() {
+        return glueLibNames;
     }
 }
 
@@ -30,38 +30,22 @@ package com.jogamp.opengl.impl.egl;
 import java.util.*;
 import com.jogamp.opengl.impl.*;
 
-/**
- * Implementation of the EGLDynamicLookupHelper for ES2.
- */
-public class EGLES2DynamicLookupHelper extends EGLDynamicLookupHelper {
+public class EGLES2DynamicLibraryBundleInfo extends EGLDynamicLibraryBundleInfo {
+    static List/*<String>*/ glueLibNames;
+    static {
+        glueLibNames = new ArrayList();
+        glueLibNames.addAll(GLDynamicLibraryBundleInfo.getGlueLibNamesPreload());
+        glueLibNames.add("jogl_es2");
+    }
   
-    protected EGLES2DynamicLookupHelper() {
+    protected EGLES2DynamicLibraryBundleInfo() {
         super();
     }
 
-    protected void loadGLJNILibrary() {
-        Throwable t=null;
-        try {
-            GLJNILibLoader.loadES2();
-            hasESBinding = true;
-        } catch (UnsatisfiedLinkError ule) {
-            t=ule;
-        } catch (SecurityException se) {
-            t=se;
-        } catch (NullPointerException npe) {
-            t=npe;
-        } catch (RuntimeException re) {
-            t=re;
-        }
-        if(DEBUG && null!=t) {
-            System.err.println("EGLES2DynamicLookupHelper: ES2 Binding Library not available");
-            t.printStackTrace();
-        }
-    }
+    public List getToolLibNames() {
+        List/*<List>*/ libNames = new ArrayList();
 
-    protected List/*<String>*/ getGLLibNames() {
         List/*<String>*/ glesLibNames = new ArrayList();
-
         glesLibNames.add("GLES20");
         glesLibNames.add("GLESv2");
         glesLibNames.add("GLESv2_CM");
@@ -70,8 +54,19 @@ public class EGLES2DynamicLookupHelper extends EGLDynamicLookupHelper {
         glesLibNames.add("libGLES20"); 
         glesLibNames.add("libGLESv2");
         glesLibNames.add("libGLESv2_CM");
+        // last but not least, we may even use the desktop GL library,
+        // which would be eg Mesa + Gallium EGL ..
+        glesLibNames.add("libGL.so.1");
+        glesLibNames.add("libGL.so");
+        glesLibNames.add("GL");
+
+        libNames.add(glesLibNames);
+        libNames.add(getEGLLibNamesList());
+        return libNames;
+    }
 
-        return glesLibNames;
+    public List/*<String>*/ getGlueLibNames() {
+        return glueLibNames;
     }
 }
 
index f5f027f..ae8b5bf 100755 (executable)
@@ -67,21 +67,16 @@ public class EGLExternalContext extends EGLContext {
         lastContext = null;
     }
 
-    protected int makeCurrentImpl() throws GLException {
+    protected void makeCurrentImpl(boolean newCreated) throws GLException {
         if (firstMakeCurrent) {
             firstMakeCurrent = false;
-            // FIXME: set contextHandle
-            return CONTEXT_CURRENT_NEW;
         }
-        return CONTEXT_CURRENT;
     }
 
     protected void releaseImpl() throws GLException {
     }
 
     protected void destroyImpl() throws GLException {
-        contextHandle = 0 ;
-        GLContextShareSet.contextDestroyed(this);
     }
 
     public void bindPbufferToTexture() {
index b749916..cb8b01d 100755 (executable)
@@ -47,37 +47,6 @@ public class EGLOnscreenContext extends EGLContext {
         super(drawable, shareWith);
     }
 
-    // Note: Usually the surface shall be locked within [makeCurrent .. swap .. release]
-    protected int makeCurrentImpl() throws GLException {
-        int lockRes = drawable.lockSurface();
-        boolean exceptionOccurred = false;
-        try {
-          if (lockRes == NativeWindow.LOCK_SURFACE_NOT_READY) {
-            return CONTEXT_NOT_CURRENT;
-          }
-          return super.makeCurrentImpl();
-        } catch (RuntimeException e) {
-          exceptionOccurred = true;
-          throw e;
-        } finally {
-          if (exceptionOccurred ||
-              (isOptimizable() && lockRes != NativeWindow.LOCK_SURFACE_NOT_READY) && drawable.isSurfaceLocked()) {
-            drawable.unlockSurface();
-          }
-        }
-    }
-
-    // Note: Usually the surface shall be locked within [makeCurrent .. swap .. release]
-    protected void releaseImpl() throws GLException {
-        try {
-          super.releaseImpl();
-        } finally {
-          if (!isOptimizable() && drawable.isSurfaceLocked()) {
-            drawable.unlockSurface();
-          }
-        }
-    }
-
     public void bindPbufferToTexture() {
         throw new GLException("Should not call this");
     }
index 3864fc3..551a21e 100644 (file)
@@ -59,21 +59,7 @@ public class EGLOnscreenDrawable extends EGLDrawable {
     }
 
     protected void swapBuffersImpl() {
-        boolean didLock = false;
-        if (!isSurfaceLocked()) {
-            // Usually the surface shall be locked within [makeCurrent .. swap .. release]
-            if (lockSurface() == NativeWindow.LOCK_SURFACE_NOT_READY) {
-                return;
-            }
-            didLock = true;
-        }
-        try {
-            EGL.eglSwapBuffers(eglDisplay, eglSurface);
-        } finally {
-            if (didLock) {
-                unlockSurface();
-            }
-        }
+        EGL.eglSwapBuffers(eglDisplay, eglSurface);
     }
 
 }
index 2eb3ca5..98cc3f3 100755 (executable)
@@ -118,6 +118,7 @@ import java.nio.*;
 
 import javax.media.opengl.*;
 import com.jogamp.opengl.impl.*;
+import com.jogamp.common.nio.Buffers;
 
 /**
  * Project.java
@@ -173,7 +174,7 @@ public class ProjectDouble {
     // Slice up one big buffer because some NIO implementations
     // allocate a huge amount of memory to back even the smallest of
     // buffers.
-    DoubleBuffer locbuf = InternalBufferUtil.newDoubleBuffer(128);
+    DoubleBuffer locbuf = Buffers.newDirectDoubleBuffer(128);
     int pos = 0;
     int sz = 16;
     matrixBuf = slice(locbuf, pos, sz);
index 501f5f5..42f55f9 100644 (file)
@@ -48,7 +48,7 @@ import javax.media.opengl.GL;
 import javax.media.opengl.GL2;
 import javax.media.opengl.glu.GLU;
 import com.jogamp.opengl.impl.Debug;
-import com.jogamp.opengl.impl.InternalBufferUtil;
+import com.jogamp.common.nio.Buffers;
 import java.nio.*;
 import java.io.*;
 
@@ -89,8 +89,8 @@ public class BuildMipmap {
     
     Mipmap.retrieveStoreModes( gl, psm );
     try {
-      newImage = InternalBufferUtil.nativeOrder(ByteBuffer.allocateDirect( Mipmap.image_size( width, 1, format, 
-            GL2.GL_UNSIGNED_SHORT ) )).asShortBuffer();
+      newImage = Buffers.newDirectByteBuffer( Mipmap.image_size( width, 1, format, 
+            GL2.GL_UNSIGNED_SHORT ) ).asShortBuffer();
     } catch( OutOfMemoryError ome ) {
       return( GLU.GLU_OUT_OF_MEMORY );
     }
@@ -117,7 +117,7 @@ public class BuildMipmap {
         if( otherImage == null ) {
           memReq = Mipmap.image_size( newwidth, 1, format, GL2.GL_UNSIGNED_SHORT );
           try {
-            otherImage = InternalBufferUtil.nativeOrder(ByteBuffer.allocateDirect( memReq )).asShortBuffer();
+            otherImage = Buffers.newDirectByteBuffer( memReq ).asShortBuffer();
           } catch( OutOfMemoryError ome ) {
             gl.glPixelStorei( GL2.GL_UNPACK_ALIGNMENT, psm.getUnpackAlignment() );
             gl.glPixelStorei( GL2.GL_UNPACK_SKIP_ROWS, psm.getUnpackSkipRows() );
@@ -178,8 +178,8 @@ public class BuildMipmap {
     }
     
     try {
-      newImage = InternalBufferUtil.nativeOrder(ByteBuffer.allocateDirect( Mipmap.image_size( width, height, 
-            format, GL2.GL_UNSIGNED_SHORT ) )).asShortBuffer();
+      newImage = Buffers.newDirectByteBuffer( Mipmap.image_size( width, height, 
+            format, GL2.GL_UNSIGNED_SHORT ) ).asShortBuffer();
     } catch( OutOfMemoryError ome ) {
       return( GLU.GLU_OUT_OF_MEMORY );
     }
@@ -206,7 +206,7 @@ public class BuildMipmap {
         if( otherImage == null ) {
           memReq = Mipmap.image_size( newwidth[0], newheight[0], format, GL2.GL_UNSIGNED_SHORT );
           try {
-            otherImage = InternalBufferUtil.nativeOrder(ByteBuffer.allocateDirect( memReq )).asShortBuffer();
+            otherImage = Buffers.newDirectByteBuffer( memReq ).asShortBuffer();
           } catch( OutOfMemoryError ome ) {
             gl.glPixelStorei( GL2.GL_UNPACK_ALIGNMENT, psm.getUnpackAlignment() );
             gl.glPixelStorei( GL2.GL_UNPACK_SKIP_ROWS, psm.getUnpackSkipRows() );
@@ -364,7 +364,7 @@ public class BuildMipmap {
           case( GL2.GL_UNSIGNED_INT_8_8_8_8_REV ):
           case( GL2.GL_UNSIGNED_INT_10_10_10_2 ):
           case( GL2.GL_UNSIGNED_INT_2_10_10_10_REV ):
-            dstImage = InternalBufferUtil.nativeOrder(ByteBuffer.allocateDirect( memReq ));
+            dstImage = Buffers.newDirectByteBuffer( memReq );
             break;
           default:
             return( GLU.GLU_INVALID_ENUM );
@@ -481,7 +481,7 @@ public class BuildMipmap {
           case( GL2.GL_UNSIGNED_INT_8_8_8_8_REV ):
           case( GL2.GL_UNSIGNED_INT_10_10_10_2 ):
           case( GL2.GL_UNSIGNED_INT_2_10_10_10_REV ):
-            dstImage = InternalBufferUtil.nativeOrder(ByteBuffer.allocateDirect( memReq ));
+            dstImage = Buffers.newDirectByteBuffer( memReq );
             break;
           default:
             return( GLU.GLU_INVALID_ENUM );
@@ -519,7 +519,7 @@ public class BuildMipmap {
           case( GL2.GL_UNSIGNED_INT_8_8_8_8_REV ):
           case( GL2.GL_UNSIGNED_INT_10_10_10_2 ):
           case( GL2.GL_UNSIGNED_INT_2_10_10_10_REV ):
-            dstImage = InternalBufferUtil.nativeOrder(ByteBuffer.allocateDirect( memReq ));
+            dstImage = Buffers.newDirectByteBuffer( memReq );
             break;
           default:
             return( GLU.GLU_INVALID_ENUM );
@@ -653,7 +653,7 @@ public class BuildMipmap {
             case( GL2.GL_UNSIGNED_INT_8_8_8_8_REV ):
             case( GL2.GL_UNSIGNED_INT_10_10_10_2 ):
             case( GL2.GL_UNSIGNED_INT_2_10_10_10_REV ):
-              dstImage = InternalBufferUtil.nativeOrder(ByteBuffer.allocateDirect( memReq ));
+              dstImage = Buffers.newDirectByteBuffer( memReq );
               break;
             default:
               return( GLU.GLU_INVALID_ENUM );
@@ -880,8 +880,7 @@ public class BuildMipmap {
       int i, j;
       
       try {
-        newImage = InternalBufferUtil.nativeOrder(ByteBuffer.allocateDirect( Mipmap.image_size( 
-              width, height, format, GL2.GL_UNSIGNED_BYTE ) ));
+        newImage = Buffers.newDirectByteBuffer( Mipmap.image_size(width, height, format, GL2.GL_UNSIGNED_BYTE ) );
       } catch( OutOfMemoryError err ) {
         return( GLU.GLU_OUT_OF_MEMORY );
       }
@@ -924,7 +923,7 @@ public class BuildMipmap {
         if( otherImage == null ) {
           memReq = Mipmap.image_size( newwidth[0], newheight[0], format, GL2.GL_UNSIGNED_BYTE );
           try {
-            otherImage = InternalBufferUtil.nativeOrder(ByteBuffer.allocateDirect( memReq ));
+            otherImage = Buffers.newDirectByteBuffer( memReq );
           } catch( OutOfMemoryError err ) {
             gl.glPixelStorei( GL2.GL_UNPACK_ALIGNMENT, psm.getUnpackAlignment() );
             gl.glPixelStorei( GL2.GL_UNPACK_SKIP_ROWS, psm.getUnpackSkipRows() );
@@ -1102,7 +1101,7 @@ public class BuildMipmap {
           case( GL2.GL_UNSIGNED_INT_8_8_8_8_REV ):
           case( GL2.GL_UNSIGNED_INT_10_10_10_2 ):
           case( GL2.GL_UNSIGNED_INT_2_10_10_10_REV ):
-            dstImage = InternalBufferUtil.nativeOrder(ByteBuffer.allocateDirect( memReq ));
+            dstImage = Buffers.newDirectByteBuffer( memReq );
             break;
           default:
             return( GLU.GLU_INVALID_ENUM );
@@ -1288,7 +1287,7 @@ public class BuildMipmap {
           case( GL2.GL_UNSIGNED_INT_8_8_8_8_REV ):
           case( GL2.GL_UNSIGNED_INT_10_10_10_2 ):
           case( GL2.GL_UNSIGNED_INT_2_10_10_10_REV ):
-            dstImage = InternalBufferUtil.nativeOrder(ByteBuffer.allocateDirect( memReq ));
+            dstImage = Buffers.newDirectByteBuffer( memReq );
             break;
           default:
             return( GLU.GLU_INVALID_ENUM );
@@ -1329,7 +1328,7 @@ public class BuildMipmap {
           case( GL2.GL_UNSIGNED_INT_8_8_8_8_REV ):
           case( GL2.GL_UNSIGNED_INT_10_10_10_2 ):
           case( GL2.GL_UNSIGNED_INT_2_10_10_10_REV ):
-            dstImage = InternalBufferUtil.nativeOrder(ByteBuffer.allocateDirect( memReq ));
+            dstImage = Buffers.newDirectByteBuffer( memReq );
             break;
           default:
             return( GLU.GLU_INVALID_ENUM );
@@ -1391,7 +1390,7 @@ public class BuildMipmap {
             case( GL2.GL_UNSIGNED_INT_8_8_8_8_REV ):
             case( GL2.GL_UNSIGNED_INT_10_10_10_2 ):
             case( GL2.GL_UNSIGNED_INT_2_10_10_10_REV ):
-              dstImage = InternalBufferUtil.nativeOrder(ByteBuffer.allocateDirect( memReq ));
+              dstImage = Buffers.newDirectByteBuffer( memReq );
               break;
             default:
               return( GLU.GLU_INVALID_ENUM );
index 1c0707c..4e3f6c2 100644 (file)
@@ -50,7 +50,7 @@ import javax.media.opengl.GL2GL3;
 import javax.media.opengl.glu.GLU;
 import javax.media.opengl.GLException;
 import java.nio.*;
-import com.jogamp.opengl.impl.InternalBufferUtil;
+import com.jogamp.common.nio.Buffers;
 
 /**
  *
@@ -575,8 +575,8 @@ public class Mipmap {
       if( !isLegalFormatForPackedPixelType( format, typeout ) ) {
         return( GLU.GLU_INVALID_OPERATION );
       }
-      beforeimage = InternalBufferUtil.nativeOrder(ByteBuffer.allocateDirect( image_size( widthin, heightin, format, GL2GL3.GL_UNSIGNED_SHORT ) ));
-      afterimage = InternalBufferUtil.nativeOrder(ByteBuffer.allocateDirect( image_size( widthout, heightout, format, GL2GL3.GL_UNSIGNED_SHORT ) ));
+      beforeimage = Buffers.newDirectByteBuffer( image_size( widthin, heightin, format, GL2GL3.GL_UNSIGNED_SHORT ) );
+      afterimage = Buffers.newDirectByteBuffer( image_size( widthout, heightout, format, GL2GL3.GL_UNSIGNED_SHORT ) );
       if( beforeimage == null || afterimage == null ) {
         return( GLU.GLU_OUT_OF_MEMORY );
       }
index f0bb7fb..804845f 100644 (file)
@@ -48,7 +48,7 @@ import javax.media.opengl.GL;
 import javax.media.opengl.GL2;
 import javax.media.opengl.glu.GLU;
 import java.nio.*;
-import com.jogamp.opengl.impl.InternalBufferUtil;
+import com.jogamp.common.nio.Buffers;
 
 /**
  *
@@ -2425,10 +2425,10 @@ public class ScaleInternal {
     }
     
     try {
-    beforeImage = InternalBufferUtil.nativeOrder(ByteBuffer.allocateDirect( Mipmap.imageSize3D( widthIn, 
-            heightIn, depthIn, format, GL2.GL_UNSIGNED_SHORT ) )).asShortBuffer();
-    afterImage = InternalBufferUtil.nativeOrder(ByteBuffer.allocateDirect( Mipmap.imageSize3D( widthIn, 
-            heightIn, depthIn, format, GL2.GL_UNSIGNED_SHORT ) )).asShortBuffer();
+        beforeImage = Buffers.newDirectByteBuffer( Mipmap.imageSize3D( widthIn, 
+                heightIn, depthIn, format, GL2.GL_UNSIGNED_SHORT ) ).asShortBuffer();
+        afterImage = Buffers.newDirectByteBuffer( Mipmap.imageSize3D( widthIn, 
+                heightIn, depthIn, format, GL2.GL_UNSIGNED_SHORT ) ).asShortBuffer();
     } catch( OutOfMemoryError err ) {
       return( GLU.GLU_OUT_OF_MEMORY );
     }
index 371df1e..46b86a5 100644 (file)
@@ -134,7 +134,7 @@ public abstract class MacOSXCGLContext extends GLContextImpl
       int[] viewNotReady = new int[1];
       // Try to allocate a context with this
       contextHandle = CGL.createContext(share,
-                                    drawable.getNativeWindow().getSurfaceHandle(),
+                                    drawable.getHandle(),
                                     pixelFormat,
                                     viewNotReady, 0);
       if (contextHandle == 0) {
@@ -166,26 +166,8 @@ public abstract class MacOSXCGLContext extends GLContextImpl
     GLContextShareSet.contextCreated(this);
     return true;
   }
-       
-  protected int makeCurrentImpl() throws GLException {
-    if (0 == drawable.getNativeWindow().getSurfaceHandle()) {
-        throw new GLException("drawable has invalid surface handle: "+drawable);
-    }
-    boolean newCreated = false;
-    if (!isCreated()) {
-      create();
-      newCreated = isCreated();
-      if(!newCreated) {
-        if (DEBUG) {
-          System.err.println("!!! GL Context creation failed for " + getClass().getName());
-        }
-        return CONTEXT_NOT_CURRENT;
-      }
-      if (DEBUG) {
-        System.err.println("!!! Created OpenGL context " + toHexString(contextHandle) + " for " + getClass().getName());
-      }
-    }
-            
+
+  protected void makeCurrentImpl(boolean newCreated) throws GLException {
     if ( isNSContext ) {
         if (!CGL.makeCurrentContext(contextHandle)) {
           throw new GLException("Error making Context (NS) current");
@@ -195,12 +177,6 @@ public abstract class MacOSXCGLContext extends GLContextImpl
           throw new GLException("Error making Context (CGL) current");
         }
     }
-            
-    if (newCreated) {
-      setGLFunctionAvailability(false, -1, -1, CTX_PROFILE_COMPAT|CTX_OPTION_ANY);
-      return CONTEXT_CURRENT_NEW;
-    }
-    return CONTEXT_CURRENT;
   }
        
   protected void releaseImpl() throws GLException {
@@ -214,9 +190,6 @@ public abstract class MacOSXCGLContext extends GLContextImpl
   }
        
   protected void destroyImpl() throws GLException {
-    if( ! isCreated() ) {
-        return;
-    } 
     if ( !isNSContext ) {
       if (CGL.kCGLNoError != CGL.CGLDestroyContext(contextHandle)) {
         throw new GLException("Unable to delete OpenGL Context (CGL)");
@@ -224,8 +197,6 @@ public abstract class MacOSXCGLContext extends GLContextImpl
       if (DEBUG) {
         System.err.println("!!! Destroyed OpenGL Context (CGL) " + contextHandle);
       }
-      contextHandle = 0;
-      GLContextShareSet.contextDestroyed(this);
     } else {
       if (!CGL.deleteContext(contextHandle)) {
         throw new GLException("Unable to delete OpenGL Context (NS)");
@@ -233,20 +204,12 @@ public abstract class MacOSXCGLContext extends GLContextImpl
       if (DEBUG) {
         System.err.println("!!! Destroyed OpenGL Context (NS) " + contextHandle);
       }
-      contextHandle = 0;
     }
-    GLContextShareSet.contextDestroyed(this);
   }
 
-  public void copy(GLContext source, int mask) throws GLException {
+  protected void copyImpl(GLContext source, int mask) throws GLException {
     long dst = getHandle();
-    if (0 == dst) {
-      throw new GLException("Destination OpenGL Context has not been created");
-    }
     long src = source.getHandle();
-    if (0 == src) {
-      throw new GLException("Source OpenGL Context has not been created");
-    }
     if( !isNSContext() ) {
         if ( ((MacOSXCGLContext)source).isNSContext() ) {
           throw new GLException("Source OpenGL Context is NS ; Destination Context is CGL.");
index 3f41d95..23fdcbf 100644 (file)
@@ -42,7 +42,6 @@ package com.jogamp.opengl.impl.macosx.cgl;
 import javax.media.nativewindow.*;
 import javax.media.opengl.*;
 import com.jogamp.opengl.impl.*;
-import com.jogamp.common.os.DynamicLookupHelper;
 
 public abstract class MacOSXCGLDrawable extends GLDrawableImpl {
   // The Java2D/OpenGL pipeline on OS X uses low-level CGLContextObjs
@@ -83,17 +82,10 @@ public abstract class MacOSXCGLDrawable extends GLDrawableImpl {
  }
 
   protected void setRealizedImpl() {
-    if(realized) {
-        if( NativeWindow.LOCK_SURFACE_NOT_READY == lockSurface() ) {
-            throw new GLException("Couldn't lock surface");
-        }
-        // locking the surface is essential to update surface data
-        unlockSurface();
-    }
   }
 
   public GLDynamicLookupHelper getGLDynamicLookupHelper() {
-    return MacOSXCGLDynamicLookupHelper.getMacOSXCGLDynamicLookupHelper();
+    return getFactoryImpl().getGLDynamicLookupHelper(0);
   }
 
   protected static String getThreadName() {
index e507e48..7f05041 100644 (file)
@@ -48,9 +48,26 @@ import com.jogamp.opengl.impl.*;
 import com.jogamp.nativewindow.impl.NullWindow;
 
 public class MacOSXCGLDrawableFactory extends GLDrawableFactoryImpl {
+  private static final DesktopGLDynamicLookupHelper macOSXCGLDynamicLookupHelper;
+
+  static {
+        DesktopGLDynamicLookupHelper tmp = null;
+        try {
+            tmp = new DesktopGLDynamicLookupHelper(new MacOSXCGLDynamicLibraryBundleInfo());
+        } catch (GLException gle) {
+            if(DEBUG) {
+                gle.printStackTrace();
+            }
+        }
+        macOSXCGLDynamicLookupHelper = tmp;
+        /** FIXME ?? 
+        if(null!=macOSXCGLDynamicLookupHelper) {
+            CGL.getCGLProcAddressTable().reset(macOSXCGLDynamicLookupHelper);
+        } */
+  }
 
   public GLDynamicLookupHelper getGLDynamicLookupHelper(int profile) {
-      return MacOSXCGLDynamicLookupHelper.getMacOSXCGLDynamicLookupHelper();
+      return macOSXCGLDynamicLookupHelper;
   }
 
   public MacOSXCGLDrawableFactory() {
@@ -60,8 +77,6 @@ public class MacOSXCGLDrawableFactory extends GLDrawableFactoryImpl {
     // The act of constructing them causes them to be registered
     new MacOSXCGLGraphicsConfigurationFactory();
 
-    MacOSXCGLDynamicLookupHelper.getMacOSXCGLDynamicLookupHelper(); // setup and initialize
-
     try {
       ReflectionUtil.createInstance("com.jogamp.opengl.impl.macosx.cgl.awt.MacOSXAWTCGLGraphicsConfigurationFactory",
                                   new Object[] {});
@@ -35,59 +35,37 @@ import java.util.*;
 import java.security.*;
 import javax.media.opengl.GLException;
 
-public class MacOSXCGLDynamicLookupHelper extends DesktopGLDynamicLookupHelper {
-    private static final MacOSXCGLDynamicLookupHelper macOSXCGLDynamicLookupHelper;
-
-    static {
-        MacOSXCGLDynamicLookupHelper tmp = null;
-        try {
-            tmp = new MacOSXCGLDynamicLookupHelper();
-        } catch (GLException gle) {
-            if(DEBUG) {
-                gle.printStackTrace();
-            }
-        }
-        macOSXCGLDynamicLookupHelper = tmp;
-    }
-
-    public static MacOSXCGLDynamicLookupHelper getMacOSXCGLDynamicLookupHelper() {
-        return macOSXCGLDynamicLookupHelper;
-    }
-
-    protected MacOSXCGLDynamicLookupHelper() {
+public class MacOSXCGLDynamicLibraryBundleInfo extends DesktopGLDynamicLibraryBundleInfo  {
+    protected MacOSXCGLDynamicLibraryBundleInfo() {
         super();
     }
 
-    public synchronized void loadGLULibrary() {
-        if(null==gluLib) {
-            List/*<String>*/ gluLibNames = new ArrayList();
-            gluLibNames.add("/System/Library/Frameworks/OpenGL.framework/Libraries/libGLU.dylib");
-            gluLibNames.add("GLU");
-            gluLib = loadFirstAvailable(gluLibNames, null, false);
-            if(null != gluLib) {
-                glLibraries.add(gluLib);
-            }
-        }
-    }
-    NativeLibrary gluLib = null;
+    public List getToolLibNames() {
+        List/*<List>*/ libNamesList = new ArrayList();
 
-    protected final List/*<String>*/ getGLLibNames() {
         List/*<String>*/ glesLibNames = new ArrayList();
+
         glesLibNames.add("/System/Library/Frameworks/OpenGL.framework/Libraries/libGL.dylib");
         glesLibNames.add("GL");
-        return glesLibNames;
-    }
 
-    protected final List/*<String>*/ getGLXLibNames() {
-        return null;
+        libNamesList.add(glesLibNames);
+
+        return libNamesList;
     }
 
-    protected final String getGLXGetProcAddressFuncName() {
-        return "getProcAddress" ; // dummy 
+    public final List getToolGetProcAddressFuncNameList() {
+        return null; 
+        /** OSX manual says: NSImage use is discouraged
+        List res = new ArrayList();
+        res.add("GetProcAddress"); // dummy
+        return res; */
     }
 
-    protected long dynamicLookupFunctionOnGLX(long glxGetProcAddressHandle, String glFuncName) {
-        return CGL.getProcAddress(glFuncName); // manual implementation 
+    public final long toolDynamicLookupFunction(long toolGetProcAddressHandle, String funcName) {
+        return 0;
+        /** OSX manual says: NSImage use is discouraged
+            return CGL.getProcAddress(glFuncName); // manual implementation 
+         */
     }
 }
 
index 9865fdf..e851892 100644 (file)
@@ -60,56 +60,52 @@ public class MacOSXExternalCGLContext extends MacOSXCGLContext {
   }
 
   protected static MacOSXExternalCGLContext create(GLDrawableFactory factory, GLProfile glp) {
-    ((GLDrawableFactoryImpl)factory).lockToolkit();
-    try {
-        long pixelFormat = 0;
-        long currentDrawable = 0;
-        long contextHandle = CGL.getCurrentContext(); // Check: MacOSX 10.3 ..
-        boolean isNSContext = 0 != contextHandle;
-        if( isNSContext ) {
-            currentDrawable = CGL.getNSView(contextHandle);
-            long ctx = CGL.getCGLContext(contextHandle);
-            if (ctx == 0) {
-              throw new GLException("Error: NULL Context (CGL) of Context (NS) 0x" +Long.toHexString(contextHandle));
-            }
-            pixelFormat = CGL.CGLGetPixelFormat(ctx);
-            if(DEBUG) {
-                System.err.println("MacOSXExternalCGLContext Create Context (NS) 0x"+Long.toHexString(contextHandle)+
-                                   ", Context (CGL) 0x"+Long.toHexString(ctx)+
-                                   ", pixelFormat 0x"+Long.toHexString(pixelFormat));
-            }
-        } else {
-            contextHandle = CGL.CGLGetCurrentContext();
-            if (contextHandle == 0) {
-              throw new GLException("Error: current Context (CGL) null, no Context (NS)");
-            }
-            pixelFormat = CGL.CGLGetPixelFormat(contextHandle);
-            if(DEBUG) {
-                System.err.println("MacOSXExternalCGLContext Create Context (CGL) 0x"+Long.toHexString(contextHandle)+
-                                   ", pixelFormat 0x"+Long.toHexString(pixelFormat));
-            }
+    long pixelFormat = 0;
+    long currentDrawable = 0;
+    long contextHandle = CGL.getCurrentContext(); // Check: MacOSX 10.3 ..
+    boolean isNSContext = 0 != contextHandle;
+    if( isNSContext ) {
+        currentDrawable = CGL.getNSView(contextHandle);
+        long ctx = CGL.getCGLContext(contextHandle);
+        if (ctx == 0) {
+          throw new GLException("Error: NULL Context (CGL) of Context (NS) 0x" +Long.toHexString(contextHandle));
         }
-
-        if (0 == pixelFormat) {
-          throw new GLException("Error: current pixelformat of current Context 0x"+Long.toHexString(contextHandle)+" is null");
+        pixelFormat = CGL.CGLGetPixelFormat(ctx);
+        if(DEBUG) {
+            System.err.println("MacOSXExternalCGLContext Create Context (NS) 0x"+Long.toHexString(contextHandle)+
+                               ", Context (CGL) 0x"+Long.toHexString(ctx)+
+                               ", pixelFormat 0x"+Long.toHexString(pixelFormat));
         }
-        GLCapabilities caps = MacOSXCGLGraphicsConfiguration.CGLPixelFormat2GLCapabilities(glp, pixelFormat);
+    } else {
+        contextHandle = CGL.CGLGetCurrentContext();
+        if (contextHandle == 0) {
+          throw new GLException("Error: current Context (CGL) null, no Context (NS)");
+        }
+        pixelFormat = CGL.CGLGetPixelFormat(contextHandle);
         if(DEBUG) {
-            System.err.println("MacOSXExternalCGLContext Create "+caps);
+            System.err.println("MacOSXExternalCGLContext Create Context (CGL) 0x"+Long.toHexString(contextHandle)+
+                               ", pixelFormat 0x"+Long.toHexString(pixelFormat));
         }
+    }
 
-        AbstractGraphicsScreen aScreen = DefaultGraphicsScreen.createDefault();
-        MacOSXCGLGraphicsConfiguration cfg = new MacOSXCGLGraphicsConfiguration(aScreen, caps, caps, pixelFormat);
-
-        NullWindow nw = new NullWindow(cfg);
-        nw.setSurfaceHandle(currentDrawable); 
-        return new MacOSXExternalCGLContext(new Drawable(factory, nw), isNSContext, contextHandle);
-    } finally {
-        ((GLDrawableFactoryImpl)factory).unlockToolkit();
+    if (0 == pixelFormat) {
+      throw new GLException("Error: current pixelformat of current Context 0x"+Long.toHexString(contextHandle)+" is null");
+    }
+    GLCapabilities caps = MacOSXCGLGraphicsConfiguration.CGLPixelFormat2GLCapabilities(glp, pixelFormat);
+    if(DEBUG) {
+        System.err.println("MacOSXExternalCGLContext Create "+caps);
     }
+
+    AbstractGraphicsScreen aScreen = DefaultGraphicsScreen.createDefault();
+    MacOSXCGLGraphicsConfiguration cfg = new MacOSXCGLGraphicsConfiguration(aScreen, caps, caps, pixelFormat);
+
+    NullWindow nw = new NullWindow(cfg);
+    nw.setSurfaceHandle(currentDrawable); 
+    return new MacOSXExternalCGLContext(new Drawable(factory, nw), isNSContext, contextHandle);
   }
 
-  protected void create() {
+  protected boolean createImpl() throws GLException {
+      return true;
   }
 
   public int makeCurrent() throws GLException {
@@ -129,20 +125,16 @@ public class MacOSXExternalCGLContext extends MacOSXCGLContext {
     lastContext = null;
   }
 
-  protected int makeCurrentImpl() throws GLException {
+  protected void makeCurrentImpl(boolean newCreated) throws GLException {
     if (firstMakeCurrent) {
       firstMakeCurrent = false;
-      return CONTEXT_CURRENT_NEW;
     }
-    return CONTEXT_CURRENT;
   }
 
   protected void releaseImpl() throws GLException {
   }
 
   protected void destroyImpl() throws GLException {
-    contextHandle = 0;
-    GLContextShareSet.contextDestroyed(this);
   }
 
   public void setOpenGLMode(int mode) {
index ede0c28..5682043 100644 (file)
@@ -54,52 +54,13 @@ public class MacOSXOnscreenCGLContext extends MacOSXCGLContext {
     this.drawable = drawable;
   }
 
-  protected int makeCurrentImpl() throws GLException {
-    int lockRes = drawable.lockSurface();
-    boolean exceptionOccurred = false;
-    try {
-      if (lockRes == NativeWindow.LOCK_SURFACE_NOT_READY) {
-        return CONTEXT_NOT_CURRENT;
-      }
-      int ret = super.makeCurrentImpl();
-      if ((ret == CONTEXT_CURRENT) ||
-          (ret == CONTEXT_CURRENT_NEW)) {
-        // Assume the canvas might have been resized or moved and tell the OpenGL
-        // context to update itself. This used to be done only upon receiving a
-        // reshape event but that doesn't appear to be sufficient. An experiment
-        // was also done to add a HierarchyBoundsListener to the GLCanvas and
-        // do this updating only upon reshape of this component or reshape or movement
-        // of an ancestor, but this also wasn't sufficient and left garbage on the
-        // screen in some situations.
-        CGL.updateContext(contextHandle);
-      } else {
-        if (!isOptimizable()) {
-          // This can happen if the window currently is zero-sized, for example.
-          // Make sure we don't leave the surface locked in this case.
-          drawable.unlockSurface();
-          lockRes = NativeWindow.LOCK_SURFACE_NOT_READY;
-        }
-      }
-      return ret;
-    } catch (RuntimeException e) {
-      exceptionOccurred = true;
-      throw e;
-    } finally {
-      if (exceptionOccurred ||
-          (isOptimizable() && lockRes != NativeWindow.LOCK_SURFACE_NOT_READY)) {
-        drawable.unlockSurface();
-      }
-    }
+  protected void makeCurrentImpl(boolean newCreated) throws GLException {
+      super.makeCurrentImpl(newCreated);
+      CGL.updateContext(contextHandle);
   }
     
   protected void releaseImpl() throws GLException {
-    try {
-      super.releaseImpl();
-    } finally {
-      if (!isOptimizable() && drawable.isSurfaceLocked()) {
-        drawable.unlockSurface();
-      }
-    }
+    super.releaseImpl();
   }
 
   protected void swapBuffers() {
@@ -115,8 +76,8 @@ public class MacOSXOnscreenCGLContext extends MacOSXCGLContext {
     CGL.updateContext(contextHandle);
   }
 
-  protected void create() {
-    create(false, false);
+  protected boolean createImpl() {
+    return create(false, false);
   }
 
   public void setOpenGLMode(int mode) {
index 3919085..9c630d2 100644 (file)
@@ -38,45 +38,22 @@ public class MacOSXPbufferCGLContext extends MacOSXCGLContext {
     // FIXME: not clear whether this is really necessary, but since
     // the API docs seem to imply it is and since it doesn't seem to
     // impact performance, leaving it in
-    CGL.setContextTextureImageToPBuffer(contextHandle, drawable.getPbuffer(), GL.GL_FRONT);
+    CGL.setContextTextureImageToPBuffer(contextHandle, drawable.getHandle(), GL.GL_FRONT);
   }
 
   public void releasePbufferFromTexture() {
   }
 
-  protected int makeCurrentImpl() throws GLException {
-    if (drawable.getPbuffer() == 0) {
-      if (DEBUG) {
-        System.err.println("Pbuffer not instantiated yet for " + this);
-      }
-      // pbuffer not instantiated yet
-      return CONTEXT_NOT_CURRENT;
-    }
-
+  protected void makeCurrentImpl(boolean newCreated) throws GLException {
     if (getOpenGLMode() != drawable.getOpenGLMode()) {
       setOpenGLMode(drawable.getOpenGLMode());
     }
 
-    if (contextHandle == 0) {
-      create();
-      if(!isCreated()) {
-        return CONTEXT_NOT_CURRENT;
-      }
-      if(!isNSContext()) {
-          throw new GLException("Not a NS Context");
-      }
-      if (DEBUG) {
-        System.err.println("!!! Created OpenGL context (NS) " + toHexString(contextHandle) + " for " + getClass().getName());
-      }
-    }
-    
     if (!impl.makeCurrent(contextHandle)) {
       throw new GLException("Error making Context (NS) current");
     }
             
-    if (isCreated()) {
-      setGLFunctionAvailability(false, -1, -1, CTX_PROFILE_COMPAT|CTX_OPTION_ANY);
-
+    if (newCreated) {
       // Initialize render-to-texture support if requested
       DefaultGraphicsConfiguration config = (DefaultGraphicsConfiguration) drawable.getNativeWindow().getGraphicsConfiguration().getNativeGraphicsConfiguration();
       GLCapabilities capabilities = (GLCapabilities)config.getChosenCapabilities();
@@ -99,10 +76,7 @@ public class MacOSXPbufferCGLContext extends MacOSXCGLContext {
       gl.glTexParameteri(textureTarget, GL.GL_TEXTURE_WRAP_S, GL.GL_CLAMP_TO_EDGE);
       gl.glTexParameteri(textureTarget, GL.GL_TEXTURE_WRAP_T, GL.GL_CLAMP_TO_EDGE);
       gl.glCopyTexImage2D(textureTarget, 0, GL.GL_RGB, 0, 0, drawable.getWidth(), drawable.getHeight(), 0);
-
-      return CONTEXT_CURRENT_NEW;
     }
-    return CONTEXT_CURRENT;
   }
 
   protected void releaseImpl() throws GLException {
@@ -112,22 +86,15 @@ public class MacOSXPbufferCGLContext extends MacOSXCGLContext {
   }
 
   protected void destroyImpl() throws GLException {
-    if (contextHandle != 0) {
       if (!impl.destroy(contextHandle)) {
         throw new GLException("Unable to delete OpenGL context");
       }
       if (DEBUG) {
         System.err.println("!!! Destroyed OpenGL context " + contextHandle);
       }
-      contextHandle = 0;
-      GLContextShareSet.contextDestroyed(this);
-    }
   }
 
   protected void setSwapIntervalImpl(int interval) {
-    if (contextHandle == 0) {
-      throw new GLException("OpenGL context not current");
-    }
     impl.setSwapInterval(contextHandle, interval);
     currentSwapInterval = impl.getSwapInterval() ;
   }
@@ -136,7 +103,7 @@ public class MacOSXPbufferCGLContext extends MacOSXCGLContext {
     return GLPbuffer.APPLE_FLOAT;
   }
 
-  protected void create() {
+  protected boolean createImpl() throws GLException {
     DefaultGraphicsConfiguration config = (DefaultGraphicsConfiguration) drawable.getNativeWindow().getGraphicsConfiguration().getNativeGraphicsConfiguration();
     GLCapabilities capabilities = (GLCapabilities)config.getChosenCapabilities();
     if (capabilities.getPbufferFloatingPointBuffers() &&
@@ -155,7 +122,11 @@ public class MacOSXPbufferCGLContext extends MacOSXCGLContext {
     if (!impl.makeCurrent(contextHandle)) {
       throw new GLException("Error making Context (NS:"+isNSContext()+") current");
     }
+    if(!isNSContext()) { // FIXME: ??
+        throw new GLException("Not a NS Context");
+    }
     setGLFunctionAvailability(true, 0, 0, CTX_PROFILE_COMPAT|CTX_OPTION_ANY);
+    return true;
   }
 
   //---------------------------------------------------------------------------
@@ -231,7 +202,7 @@ public class MacOSXPbufferCGLContext extends MacOSXCGLContext {
         throw new GLException("Error creating context for pbuffer");
       }
       // Must now associate the pbuffer with our newly-created context
-      CGL.setContextPBuffer(contextHandle, drawable.getPbuffer());
+      CGL.setContextPBuffer(contextHandle, drawable.getHandle());
       return contextHandle;
     }
 
@@ -335,7 +306,7 @@ public class MacOSXPbufferCGLContext extends MacOSXCGLContext {
         throw new GLException("Error code " + res + " while creating context");
       }
       // Attach newly-created context to the pbuffer
-      res = CGL.CGLSetPBuffer(ctx.get(0), drawable.getPbuffer(), 0, 0, 0);
+      res = CGL.CGLSetPBuffer(ctx.get(0), drawable.getHandle(), 0, 0, 0);
       if (res != CGL.kCGLNoError) {
         throw new GLException("Error code " + res + " while attaching context to pbuffer");
       }
index afdc40d..64d646c 100644 (file)
@@ -96,7 +96,7 @@ public class MacOSXPbufferCGLDrawable extends MacOSXCGLDrawable {
     }
   }
 
-  public long getPbuffer() {
+  public long getHandle() {
     return pBuffer;
   }
   
index 9a90cbd..b42f113 100644 (file)
@@ -70,29 +70,13 @@ public class MacOSXJava2DCGLContext extends MacOSXCGLContext implements Java2DGL
     this.graphics = g;
   }
 
-  protected int makeCurrentImpl() throws GLException {
-    if (contextHandle == 0) {
-      create();
-      if(!isCreated()) {
-        return CONTEXT_NOT_CURRENT;
-      }
-      if (DEBUG) {
-        System.err.println("!!! Created GL Context (NS)  for " + getClass().getName());
-      }
-    }
-            
+  protected void makeCurrentImpl(boolean newCreated) throws GLException {
     if (!Java2D.makeOGLContextCurrentOnSurface(graphics, contextHandle)) {
       throw new GLException("Error making context current");
-    }
-            
-    if (isCreated()) {
-      setGLFunctionAvailability(false, -1, -1, CTX_PROFILE_COMPAT|CTX_OPTION_ANY);
-      return CONTEXT_CURRENT_NEW;
-    }
-    return CONTEXT_CURRENT;
+    }            
   }
 
-  protected void create() {
+  protected boolean createImpl() {
     // Find and configure share context
     MacOSXCGLContext other = (MacOSXCGLContext) GLContextShareSet.getShareContext(this);
     long share = 0;
@@ -118,11 +102,13 @@ public class MacOSXJava2DCGLContext extends MacOSXCGLContext implements Java2DGL
 
     long ctx = Java2D.createOGLContextOnSurface(graphics, share);
     if (ctx == 0) {
-      return;
+      return false;
     }
+    setGLFunctionAvailability(true, 0, 0, CTX_PROFILE_COMPAT|CTX_OPTION_ANY); // use GL_VERSION
     // FIXME: think about GLContext sharing
     contextHandle = ctx;
     isNSContext = true;
+    return true;
   }
 
   protected void releaseImpl() throws GLException {
@@ -132,15 +118,10 @@ public class MacOSXJava2DCGLContext extends MacOSXCGLContext implements Java2DGL
   }
 
   protected void destroyImpl() throws GLException {
-    if (contextHandle != 0) {
       Java2D.destroyOGLContext(contextHandle);
       if (DEBUG) {
         System.err.println("!!! Destroyed OpenGL context " + contextHandle);
       }
-      contextHandle = 0;
-      // FIXME
-      // GLContextShareSet.contextDestroyed(this);
-    }
   }
 
   public void setOpenGLMode(int mode) {
index 87a37da..5e3d55b 100644 (file)
@@ -51,9 +51,9 @@ public class WindowsDummyWGLDrawable extends WindowsWGLDrawable {
     // All entries to CreateDummyWindow must synchronize on one object
     // to avoid accidentally registering the dummy window class twice
     synchronized (WindowsDummyWGLDrawable.class) {
-      hwnd = WGL.CreateDummyWindow(0, 0, 1, 1);
+      hwnd = GDI.CreateDummyWindow(0, 0, 1, 1);
     }
-    hdc = WGL.GetDC(hwnd);
+    hdc = GDI.GetDC(hwnd);
     NullWindow nw = (NullWindow) getNativeWindow();
     nw.setSurfaceHandle(hdc);
     WindowsWGLGraphicsConfiguration config = (WindowsWGLGraphicsConfiguration)nw.getGraphicsConfiguration().getNativeGraphicsConfiguration();
@@ -61,9 +61,9 @@ public class WindowsDummyWGLDrawable extends WindowsWGLDrawable {
     GLCapabilities caps = (GLCapabilities) config.getChosenCapabilities();
     caps.setDepthBits(16);
     PIXELFORMATDESCRIPTOR pfd = WindowsWGLGraphicsConfiguration.GLCapabilities2PFD(caps);
-    int pixelFormat = WGL.ChoosePixelFormat(hdc, pfd);
+    int pixelFormat = GDI.ChoosePixelFormat(hdc, pfd);
     if ((pixelFormat == 0) ||
-        (!WGL.SetPixelFormat(hdc, pixelFormat, pfd))) {
+        (!GDI.SetPixelFormat(hdc, pixelFormat, pfd))) {
       destroy();
     }
   }
@@ -90,12 +90,12 @@ public class WindowsDummyWGLDrawable extends WindowsWGLDrawable {
 
   public void destroy() {
     if (hdc != 0) {
-      WGL.ReleaseDC(hwnd, hdc);
+      GDI.ReleaseDC(hwnd, hdc);
       hdc = 0;
     }
     if (hwnd != 0) {
-      WGL.ShowWindow(hwnd, WGL.SW_HIDE);
-      WGL.DestroyWindow(hwnd);
+      GDI.ShowWindow(hwnd, GDI.SW_HIDE);
+      GDI.DestroyWindow(hwnd);
       hwnd = 0;
     }
   }
index 55c9dc3..1f1fb0d 100755 (executable)
@@ -69,7 +69,7 @@ public class WindowsExternalWGLContext extends WindowsWGLContext {
     if (ctx == 0) {
       throw new GLException("Error: attempted to make an external GLContext without a context current");
     }
-    int pfdID = WGL.GetPixelFormat(hdc);
+    int pfdID = GDI.GetPixelFormat(hdc);
     if (pfdID == 0) {
       throw new GLException("Error: attempted to make an external GLContext without a valid pixelformat");
     }
@@ -100,20 +100,16 @@ public class WindowsExternalWGLContext extends WindowsWGLContext {
     lastContext = null;
   }
 
-  protected int makeCurrentImpl() throws GLException {
+  protected void makeCurrentImpl(boolean newCreated) throws GLException {
     if (firstMakeCurrent) {
       firstMakeCurrent = false;
-      return CONTEXT_CURRENT_NEW;
     }
-    return CONTEXT_CURRENT;
   }
 
   protected void releaseImpl() throws GLException {
   }
 
   protected void destroyImpl() throws GLException {
-    contextHandle = 0;
-    GLContextShareSet.contextDestroyed(this);
   }
 
   // Need to provide the display connection to extension querying APIs
index 74db459..41e4692 100755 (executable)
@@ -55,7 +55,7 @@ public class WindowsExternalWGLDrawable extends WindowsWGLDrawable {
     if (0==hdc) {
       throw new GLException("Error: attempted to make an external GLDrawable without a drawable current");
     }
-    int pfdID = WGL.GetPixelFormat(hdc);
+    int pfdID = GDI.GetPixelFormat(hdc);
     if (pfdID == 0) {
       throw new GLException("Error: attempted to make an external GLContext without a valid pixelformat");
     }
index bf466d4..8079cd4 100644 (file)
@@ -89,27 +89,27 @@ public class WindowsOffscreenWGLDrawable extends WindowsWGLDrawable {
     header.setBiYPelsPerMeter(0);
     header.setBiClrUsed(0);
     header.setBiClrImportant(0);
-    header.setBiCompression(WGL.BI_RGB);
+    header.setBiCompression(GDI.BI_RGB);
     header.setBiSizeImage(width * height * bitsPerPixel / 8);
 
-    long hdc = WGL.CreateCompatibleDC(0);
+    long hdc = GDI.CreateCompatibleDC(0);
     if (hdc == 0) {
-      System.out.println("LastError: " + WGL.GetLastError());
+      System.out.println("LastError: " + GDI.GetLastError());
       throw new GLException("Error creating device context for offscreen OpenGL context");
     }
     ((SurfaceChangeable)nw).setSurfaceHandle(hdc);
 
-    hbitmap = WGL.CreateDIBSection(hdc, info, WGL.DIB_RGB_COLORS, null, 0, 0);
+    hbitmap = GDI.CreateDIBSection(hdc, info, GDI.DIB_RGB_COLORS, null, 0, 0);
     if (hbitmap == 0) {
-      WGL.DeleteDC(hdc);
+      GDI.DeleteDC(hdc);
       hdc = 0;
       throw new GLException("Error creating offscreen bitmap of width " + width +
                             ", height " + height);
     }
-    if ((origbitmap = WGL.SelectObject(hdc, hbitmap)) == 0) {
-      WGL.DeleteObject(hbitmap);
+    if ((origbitmap = GDI.SelectObject(hdc, hbitmap)) == 0) {
+      GDI.DeleteObject(hbitmap);
       hbitmap = 0;
-      WGL.DeleteDC(hdc);
+      GDI.DeleteDC(hdc);
       hdc = 0;
       throw new GLException("Error selecting bitmap into new device context");
     }
@@ -121,9 +121,9 @@ public class WindowsOffscreenWGLDrawable extends WindowsWGLDrawable {
     NativeWindow nw = getNativeWindow();
     if (nw.getSurfaceHandle() != 0) {
       // Must destroy bitmap and device context
-      WGL.SelectObject(nw.getSurfaceHandle(), origbitmap);
-      WGL.DeleteObject(hbitmap);
-      WGL.DeleteDC(nw.getSurfaceHandle());
+      GDI.SelectObject(nw.getSurfaceHandle(), origbitmap);
+      GDI.DeleteObject(hbitmap);
+      GDI.DeleteDC(nw.getSurfaceHandle());
       origbitmap = 0;
       hbitmap = 0;
       ((SurfaceChangeable)nw).setSurfaceHandle(0);
index aeb1311..475faee 100644 (file)
@@ -46,43 +46,8 @@ import javax.media.opengl.*;
 import com.jogamp.opengl.impl.*;
 
 public class WindowsOnscreenWGLContext extends WindowsWGLContext {
-  protected WindowsOnscreenWGLDrawable drawable;
-
   public WindowsOnscreenWGLContext(WindowsOnscreenWGLDrawable drawable,
                                   GLContext shareWith) {
     super(drawable, shareWith);
-    this.drawable = drawable;
-  }
-  
-  // Note: Usually the surface shall be locked within [makeCurrent .. swap .. release]
-  protected int makeCurrentImpl() throws GLException {
-    int lockRes = drawable.lockSurface();
-    boolean exceptionOccurred = false;
-    try {
-      if (lockRes == NativeWindow.LOCK_SURFACE_NOT_READY) {
-        return CONTEXT_NOT_CURRENT;
-      }
-      int ret = super.makeCurrentImpl();
-      return ret;
-    } catch (RuntimeException e) {
-      exceptionOccurred = true;
-      throw e;
-    } finally {
-      if (exceptionOccurred ||
-          (isOptimizable() && lockRes != NativeWindow.LOCK_SURFACE_NOT_READY) && drawable.isSurfaceLocked()) {
-        drawable.unlockSurface();
-      }
-    }
-  }
-
-  // Note: Usually the surface shall be locked within [makeCurrent .. swap .. release]
-  protected void releaseImpl() throws GLException {
-    try {
-      super.releaseImpl();
-    } finally {
-      if (!isOptimizable() && drawable.isSurfaceLocked()) {
-        drawable.unlockSurface();
-      }
-    }
-  }
+  }    
 }
index a9e02e1..1da5b80 100644 (file)
@@ -68,7 +68,7 @@ public class WindowsPbufferWGLContext extends WindowsWGLContext {
     WGLExt wglExt = getWGLExt();
     gl.glBindTexture(textureTarget, texture);
     if (rtt && hasRTT) {
-      if (!wglExt.wglBindTexImageARB(drawable.getPbuffer(), WGLExt.WGL_FRONT_LEFT_ARB)) {
+      if (!wglExt.wglBindTexImageARB(drawable.getPbufferHandle(), WGLExt.WGL_FRONT_LEFT_ARB)) {
         throw new GLException("Binding of pbuffer to texture failed: " + wglGetLastError());
       }
     }
@@ -84,18 +84,15 @@ public class WindowsPbufferWGLContext extends WindowsWGLContext {
     }
     if (rtt && hasRTT) {
       WGLExt wglExt = getWGLExt();
-      if (!wglExt.wglReleaseTexImageARB(drawable.getPbuffer(), WGLExt.WGL_FRONT_LEFT_ARB)) {
+      if (!wglExt.wglReleaseTexImageARB(drawable.getPbufferHandle(), WGLExt.WGL_FRONT_LEFT_ARB)) {
         throw new GLException("Releasing of pbuffer from texture failed: " + wglGetLastError());
       }
     }
   }
 
-  protected int makeCurrentImpl() throws GLException {
-    int res = super.makeCurrentImpl();
-    if (DEBUG && VERBOSE) {
-      System.err.println("WindowsPbufferWGLContext: super.makeCurrentImpl() = " + res);
-    }
-    if (res == CONTEXT_CURRENT_NEW) {
+  protected void makeCurrentImpl(boolean newCreated) throws GLException {
+    super.makeCurrentImpl(newCreated);
+    if (newCreated) {
       GLCapabilities capabilities = drawable.getChosenGLCapabilities();
 
       // Initialize render-to-texture support if requested
@@ -142,7 +139,6 @@ public class WindowsPbufferWGLContext extends WindowsWGLContext {
         }
       }
     }
-    return res;
   }
 
   public int getFloatingPointMode() {
index c7034e9..c8c6291 100644 (file)
@@ -89,18 +89,21 @@ public class WindowsPbufferWGLDrawable extends WindowsWGLDrawable {
           // not be called here, so we skip the use of any composable
           // pipelines (see WindowsOnscreenWGLContext.makeCurrentImpl)
           if (wglExt.wglReleasePbufferDCARB(buffer, nw.getSurfaceHandle()) == 0) {
-            throw new GLException("Error releasing pbuffer device context: error code " + WGL.GetLastError());
+            throw new GLException("Error releasing pbuffer device context: error code " + GDI.GetLastError());
           }
           ((SurfaceChangeable)nw).setSurfaceHandle(0);
         }
         if (!wglExt.wglDestroyPbufferARB(buffer)) {
-            throw new GLException("Error destroying pbuffer: error code " + WGL.GetLastError());
+            throw new GLException("Error destroying pbuffer: error code " + GDI.GetLastError());
         }
         buffer = 0;
     }
   }
 
-  public long getPbuffer() {
+  public long getPbufferHandle() {
+    // The actual to-be-used handle for makeCurrent etc,
+    // is the derived DC, set in the NativeWindow surfaceHandle
+    // returned by getHandle().
     return buffer;
   }
 
@@ -293,7 +296,7 @@ public class WindowsPbufferWGLDrawable extends WindowsWGLDrawable {
       if (wglExt.wglGetPixelFormatAttribivARB(parentHdc, pformats[whichFormat], 0, niattribs, iattributes, 0, ivalues, 0)) {
         GLCapabilities newCaps = WindowsWGLGraphicsConfiguration.AttribList2GLCapabilities(glProfile, iattributes, niattribs, ivalues, true, false, true);
         PIXELFORMATDESCRIPTOR pfd = WindowsWGLGraphicsConfiguration.createPixelFormatDescriptor();
-        if (WGL.DescribePixelFormat(parentHdc, pformats[whichFormat], pfd.size(), pfd) == 0) {
+        if (GDI.DescribePixelFormat(parentHdc, pformats[whichFormat], pfd.size(), pfd) == 0) {
           if (DEBUG) {
               System.err.println("Unable to describe pixel format (Continue: true) " + whichFormat + "/" + nformats + " pfdID " + pformats[whichFormat]+":\n\t"+newCaps);
           }
@@ -304,7 +307,7 @@ public class WindowsPbufferWGLDrawable extends WindowsWGLDrawable {
         config.setCapsPFD(newCaps, pfd, pformats[whichFormat], true);
       } else {
         PIXELFORMATDESCRIPTOR pfd = WindowsWGLGraphicsConfiguration.createPixelFormatDescriptor();
-        if (WGL.DescribePixelFormat(parentHdc, pformats[whichFormat], pfd.size(), pfd) == 0) {
+        if (GDI.DescribePixelFormat(parentHdc, pformats[whichFormat], pfd.size(), pfd) == 0) {
           throw new GLException("Unable to describe pixel format " + pformats[whichFormat]);
         }
         GLCapabilities newCaps = WindowsWGLGraphicsConfiguration.PFD2GLCapabilities(glProfile, pfd, false, true);
index 3ecd3bd..33f1bc8 100644 (file)
@@ -51,8 +51,7 @@ public class WindowsWGLContext extends GLContextImpl {
   private boolean wglGetExtensionsStringEXTInitialized;
   private boolean wglGetExtensionsStringEXTAvailable;
   private boolean wglMakeContextCurrentInitialized;
-  private boolean wglMakeContextCurrentARBAvailable;
-  private boolean wglMakeContextCurrentEXTAvailable;
+  private boolean wglMakeContextCurrentAvailable;
   private static final Map/*<String, String>*/ functionNameMap;
   private static final Map/*<String, String>*/ extensionNameMap;
   private WGLExt wglExt;
@@ -95,17 +94,14 @@ public class WindowsWGLContext extends GLContextImpl {
   public boolean wglMakeContextCurrent(long hDrawDC, long hReadDC, long ctx) {
     WGLExt wglExt = getWGLExt();
     if (!wglMakeContextCurrentInitialized) {
-      wglMakeContextCurrentARBAvailable = isFunctionAvailable("wglMakeContextCurrentARB");
-      wglMakeContextCurrentEXTAvailable = isFunctionAvailable("wglMakeContextCurrentEXT");
+      wglMakeContextCurrentAvailable = isFunctionAvailable("wglMakeContextCurrent");
       wglMakeContextCurrentInitialized = true;
       if(DEBUG) {
-          System.err.println("WindowsWGLContext.wglMakeContextCurrent: ARB "+wglMakeContextCurrentARBAvailable+", EXT "+wglMakeContextCurrentEXTAvailable);
+          System.err.println("WindowsWGLContext.wglMakeContextCurrent: "+wglMakeContextCurrentAvailable);
       }
     }
-    if(wglMakeContextCurrentARBAvailable) {
-        return wglExt.wglMakeContextCurrentARB(hDrawDC, hReadDC, ctx);
-    } else if(wglMakeContextCurrentEXTAvailable) {
-        return wglExt.wglMakeContextCurrentEXT(hDrawDC, hReadDC, ctx);
+    if(wglMakeContextCurrentAvailable) {
+        return wglExt.wglMakeContextCurrent(hDrawDC, hReadDC, ctx);
     }
     return WGL.wglMakeCurrent(hDrawDC, ctx);
   }
@@ -174,7 +170,7 @@ public class WindowsWGLContext extends GLContextImpl {
         }
     }
 
-    ctx = wglExt.wglCreateContextAttribsARB(drawable.getNativeWindow().getSurfaceHandle(), share, attribs, 0); 
+    ctx = wglExt.wglCreateContextAttribsARB(drawable.getHandle(), share, attribs, 0); 
     if(DEBUG) {
       System.err.println("WindowsWGLContext.createContextARB success: "+(0!=ctx)+" - "+getGLVersion(major, minor, ctp, "@creation")+", bwdCompat "+ctBwdCompat+", fwdCompat "+ctFwdCompat);
     }
@@ -182,7 +178,7 @@ public class WindowsWGLContext extends GLContextImpl {
         // In contrast to GLX no verification with a drawable binding, ie default framebuffer, is necessary,
         // if no 3.2 is available creation fails already!
         // Nevertheless .. we do it ..
-        if (!WGL.wglMakeCurrent(drawable.getNativeWindow().getSurfaceHandle(), ctx)) {
+        if (!WGL.wglMakeCurrent(drawable.getHandle(), ctx)) {
             if(DEBUG) {
               System.err.println("WindowsWGLContext.createContextARB couldn't make current "+getGLVersion(major, minor, ctp, "@creation"));
             }
@@ -198,10 +194,7 @@ public class WindowsWGLContext extends GLContextImpl {
    * Creates and initializes an appropriate OpenGL context. Should only be
    * called by {@link #makeCurrentImpl()}.
    */
-  protected void create() {
-    if(0!=contextHandle) {
-        throw new GLException("context is not null: "+contextHandle);
-    }
+  protected boolean createImpl() {
     WindowsWGLDrawableFactory factory = (WindowsWGLDrawableFactory)drawable.getFactoryImpl();
     GLCapabilities glCaps = drawable.getChosenGLCapabilities();
 
@@ -233,18 +226,18 @@ public class WindowsWGLContext extends GLContextImpl {
     if(0==contextHandle) {
         // To use WGL_ARB_create_context, we have to make a temp context current,
         // so we are able to use GetProcAddress
-        temp_ctx = WGL.wglCreateContext(drawable.getNativeWindow().getSurfaceHandle());
+        temp_ctx = WGL.wglCreateContext(drawable.getHandle());
         if (temp_ctx == 0) {
-          throw new GLException("Unable to create temp OpenGL context for device context " + toHexString(drawable.getNativeWindow().getSurfaceHandle()));
+          throw new GLException("Unable to create temp OpenGL context for device context " + toHexString(drawable.getHandle()));
         }
-        if (!WGL.wglMakeCurrent(drawable.getNativeWindow().getSurfaceHandle(), temp_ctx)) {
-            throw new GLException("Error making temp context current: 0x" + toHexString(temp_ctx) + ", werr: 0x"+Integer.toHexString(WGL.GetLastError()));
+        if (!WGL.wglMakeCurrent(drawable.getHandle(), temp_ctx)) {
+            throw new GLException("Error making temp context current: 0x" + toHexString(temp_ctx) + ", werr: 0x"+Integer.toHexString(GDI.GetLastError()));
         }
         setGLFunctionAvailability(true, 0, 0, CTX_PROFILE_COMPAT|CTX_OPTION_ANY);
 
         if( createContextARBTried ||
-            !isFunctionAvailable("wglCreateContextAttribsARB") /* ||
-            !isExtensionAvailable("WGL_ARB_create_context") */ ) { // unresolved case where client version is 1.4 without this extension
+            !isFunctionAvailable("wglCreateContextAttribsARB") ||
+            !isExtensionAvailable("WGL_ARB_create_context") ) {
             if(glCaps.getGLProfile().isGL3()) {
               WGL.wglMakeCurrent(0, 0);
               WGL.wglDeleteContext(temp_ctx);
@@ -253,7 +246,8 @@ public class WindowsWGLContext extends GLContextImpl {
 
             // continue with temp context for GL < 3.0
             contextHandle = temp_ctx;
-            return;
+            setGLFunctionAvailability(false, -1, -1, CTX_PROFILE_COMPAT|CTX_OPTION_ANY);
+            return true;
         } 
         contextHandle = createContextARB(share, true, major, minor, ctp);
         createContextARBTried=true;
@@ -265,8 +259,8 @@ public class WindowsWGLContext extends GLContextImpl {
         WGL.wglMakeCurrent(0, 0);
         WGL.wglDeleteContext(temp_ctx);
 
-        if (!wglMakeContextCurrent(drawable.getNativeWindow().getSurfaceHandle(), drawableRead.getNativeWindow().getSurfaceHandle(), contextHandle)) {
-            throw new GLException("Cannot make previous verified context current: 0x" + toHexString(contextHandle) + ", werr: 0x" + Integer.toHexString(WGL.GetLastError()));
+        if (!wglMakeContextCurrent(drawable.getHandle(), drawableRead.getHandle(), contextHandle)) {
+            throw new GLException("Cannot make previous verified context current: 0x" + toHexString(contextHandle) + ", werr: 0x" + Integer.toHexString(GDI.GetLastError()));
         }
     } else {
         if(glCaps.getGLProfile().isGL3()) {
@@ -280,10 +274,10 @@ public class WindowsWGLContext extends GLContextImpl {
 
         // continue with temp context for GL < 3.0
         contextHandle = temp_ctx;
-        if (!wglMakeContextCurrent(drawable.getNativeWindow().getSurfaceHandle(), drawableRead.getNativeWindow().getSurfaceHandle(), contextHandle)) {
+        if (!wglMakeContextCurrent(drawable.getHandle(), drawableRead.getHandle(), contextHandle)) {
             WGL.wglMakeCurrent(0, 0);
             WGL.wglDeleteContext(contextHandle);
-            throw new GLException("Error making old context current: 0x" + toHexString(contextHandle) + ", werr: 0x" + Integer.toHexString(WGL.GetLastError()));
+            throw new GLException("Error making old context current: 0x" + toHexString(contextHandle) + ", werr: 0x" + Integer.toHexString(GDI.GetLastError()));
         }
     }
 
@@ -291,78 +285,47 @@ public class WindowsWGLContext extends GLContextImpl {
         if (!WGL.wglShareLists(share, contextHandle)) {
             throw new GLException("wglShareLists(" + toHexString(share) +
                                   ", " + toHexString(contextHandle) + ") failed: werr 0x" +
-                                  Integer.toHexString(WGL.GetLastError()));
+                                  Integer.toHexString(GDI.GetLastError()));
         }
     }
-    GLContextShareSet.contextCreated(this);
+    setGLFunctionAvailability(false, -1, -1, CTX_PROFILE_COMPAT|CTX_OPTION_ANY);
+    return true;
   }
   
-  protected int makeCurrentImpl() throws GLException {
-    if (0 == drawable.getNativeWindow().getSurfaceHandle()) {
-        throw new GLException("drawable has invalid surface handle: "+drawable);
-    }
-    boolean newCreated = false;
-    if (!isCreated()) {
-      create(); // throws exception if fails!
-      newCreated = true;
-&nbs