6 years agoFix Bug 621, JVM Crashes During X11 Shutdown while closing all unclosed display conne... x11_xinitthreads
Sven Gothel [Fri, 21 Sep 2012 20:18:20 +0000 (22:18 +0200)]
Fix Bug 621, JVM Crashes During X11 Shutdown while closing all unclosed display connections.

This is a regression of JOGL commit f2cfb6119a3663715ed2d572643949b3bef58662 to fix Bug 610.

Commit f2cfb6119a3663715ed2d572643949b3bef58662 closed all open display connections at
JVM shutdown in order of their creation.
This is required IF the driver is the proprietary ATI on X11.
X11Util.setMarkAllDisplaysUnclosable(true) is called in this case.

However, this behavior causes a SIGSEGV for other GPU driver, i.e. Nvidia :)

This fix only closes the pending display connections in their respective order
IF X11Util.getMarkAllDisplaysUnclosable() == true.
Hence the 'new' cleanup as introduced in the offending commit
is only performed on the erroneous ATI driver.

Manually tested w/ TestGearsES2AWT, see it's commandline options for details.

6 years agoFBObject: Small cleanup of freeColorbufferImpl(gl, i) -> freeAllColorbufferImpl(gl)
Sven Gothel [Fri, 21 Sep 2012 18:26:31 +0000 (20:26 +0200)]
FBObject: Small cleanup of freeColorbufferImpl(gl, i) -> freeAllColorbufferImpl(gl)

6 years agoMacOSXCGLContext: Fix missing initialization of 'needsSetContextPBuffer' if not offsc...
Sven Gothel [Fri, 21 Sep 2012 06:28:42 +0000 (08:28 +0200)]
MacOSXCGLContext: Fix missing initialization of 'needsSetContextPBuffer' if not offscreen-layer.

6 years agoMacOSXCGLDrawableFactory: Cannot use shared context to retrieve quirks since it's...
Sven Gothel [Fri, 21 Sep 2012 05:20:37 +0000 (07:20 +0200)]
MacOSXCGLDrawableFactory: Cannot use shared context to retrieve quirks since it's transient, store it.

6 years agoNativeWindowFactory/NEWT: Use relative sub-package names in NativeWindowFactory's...
Sven Gothel [Thu, 20 Sep 2012 21:18:30 +0000 (23:18 +0200)]
NativeWindowFactory/NEWT: Use relative sub-package names in NativeWindowFactory's TYPE_* strings, not NEWT's; NEWTFactory: Use default NEWT package name if rel. 'path'.

Use relative sub-package names in NativeWindowFactory's TYPE_* strings, not NEWT's
  Otherwise NEWT depends solely on NativeWindowFactory strings

  - Default subpackages denominate a relative path, i.e. start with a dot: '.egl', '.windows', '.x11'
  - Custom name may be absolute, eg: ''

NEWTFactory: Use default NEWT package name if relative 'path'.
  - If NativeWindowFactory type starts w/ dot (rel. path), simply prepend the default NEWT package prefix
    otherwise use complete package name as-is.

6 years agoAdd GLRendererQuirks; Fix shared EGL/ES resources;
Sven Gothel [Thu, 20 Sep 2012 21:12:48 +0000 (23:12 +0200)]
Add GLRendererQuirks; Fix shared EGL/ES resources;

Add GLRendererQuirks:
  - Contains centralized 'tagged' workarounds for GL renderer bugs (quirks)
  - Accessible via GLContext and GLDrawableFactory
  - Initialized in GLContext.setAvailability*

Simplify GLGraphicsConfigurationUtil.fixOffscreenGLCapabilities(..) & use Quirks
  - use quirks
  - instead of passing booleans for each config, pass factory & device

Fix shared EGL/ES resources:
  - GLProfile needs to initialize EGLDrawableFactory's shared resources before desktop,
    so EGLDrawableFactory can use the fallback defaultDisplay & defaultSharedResource
    for host mapped sharedResources (hack).

  - If using defaultSharedResources for host mapped ones,
    do not go through initialization cycles - simply map (sharedResource + context).

  - EGLDrawableFactory: Use device's unique-key instead of connection only,
    since the latter causes a collision (EGL-connection == X11-connection).

6 years agoFBO tests: Add singleBuffer cmd-line option for offscreen-layered tests; FBOMRT:...
Sven Gothel [Thu, 20 Sep 2012 20:46:53 +0000 (22:46 +0200)]
FBO tests: Add singleBuffer cmd-line option for offscreen-layered tests; FBOMRT: Allow test w/ only one attachment number (sure not MRT then)

6 years agoOSX CALayer / MacOSXCGLContext: Remove pbuffer swap garbage; Split pbuffer/FBO revali...
Sven Gothel [Thu, 20 Sep 2012 20:45:19 +0000 (22:45 +0200)]
OSX CALayer / MacOSXCGLContext: Remove pbuffer swap garbage; Split pbuffer/FBO revalidation/redraw; Don't sync @ needsDisplay

Simplified pbuffer replacement:
  Simply keep holding the pbuffer reference in native code
  until receiving newPBuffer @ swap.
  The newPBuffer will be established @draw method.
  This allows removing interaction at destroy pbuffer,
  which caused garbage and crash.

Remove pbuffer swap garbage
  See above.

Split pbuffer/FBO revalidation/redraw

Don't sync @ needsDisplay
  - No need to sync @ repaint command setNSOpenGLLayerNeedsDisplay*
    since we use volatiles and all lifecycle action is
    done @draw -> faster

6 years agoGLFBODrawableImpl: Fix garbage @ swap, add [disabled] reset-quirk for testing
Sven Gothel [Thu, 20 Sep 2012 17:03:26 +0000 (19:03 +0200)]
GLFBODrawableImpl: Fix garbage @ swap, add [disabled] reset-quirk for testing

Fix garbage @ swap:
  Reset the front buffer _after_ swap.

Add [disabled] reset-quirk for testing:
  On some OSX GPUs (old NV 7xxx only ?), reconfig/resize of FBO fails,
  recreate whole FBO w/ quirk enabled.

6 years agoFBObject cleanup / review: strings, simplified re-attachment, removed redundancy...
Sven Gothel [Thu, 20 Sep 2012 16:59:03 +0000 (18:59 +0200)]
FBObject cleanup / review: strings, simplified re-attachment, removed redundancy, adding quirk.

Strings: Cleanup status strings; More verbose TextureAttachment toString()

Simplified re-attachment: Using simple switch/case block to recreate renderbuffer instead of task list (duh!)

Removed redundant calls to bind(gl)

Adding quirk for re-attachment: detach all 1st, then recreate. Disabled per default.

6 years agoGLReadBufferUtil, ShaderUtil: Catch GLException (and dump if thrown), to increase...
Sven Gothel [Thu, 20 Sep 2012 13:25:55 +0000 (15:25 +0200)]
GLReadBufferUtil, ShaderUtil: Catch GLException (and dump if thrown), to increase robustness $ glReadPixels and Get NUM_SHADER_BINARY_FORMATS

6 years agoMake GLBufferStateTracker more robust: Catch GLError on Get(), causes INVALID_ENUM...
Sven Gothel [Thu, 20 Sep 2012 13:23:34 +0000 (15:23 +0200)]
Make GLBufferStateTracker more robust: Catch GLError on Get(), causes INVALID_ENUM w/ pname GL_PIXEL_UNPACK_BUFFER_BINDING on GL 3.0 Mesa 8.0.4

6 years agoFix Bug 612: glVertexAttribIPointer/glVertexAttribLPointer are BufferObjectKind ...
Sven Gothel [Thu, 20 Sep 2012 09:54:57 +0000 (11:54 +0200)]
Fix Bug 612: glVertexAttribIPointer/glVertexAttribLPointer are BufferObjectKind (VBO) and needs a RangeCheck as well

Fix glVertexAttribIPointer/glVertexAttribLPointer (Bug 612)

Similar to glVertexAttribPointer:
- Mark both BufferObjectKind
- Add RangeCheck to both

6 years agoFix non NIO direct GL semantics: Restrict certain GL function to NIODirectOnly (again)
Sven Gothel [Thu, 20 Sep 2012 09:54:20 +0000 (11:54 +0200)]
Fix non NIO direct GL semantics: Restrict certain GL function to NIODirectOnly (again)

Partially reverting commits

Both commits had flaws regarding:
  - GL spec: Pointer functions required passed memory pointers to persist

  - JNI: Primitive arrays may change their native memory location (swap),
         even if they were not GC'ed.

Xerxes Ranby and I discussed whether we are able to track the
primitive non direct NIO backed arrays and pinpoint them.
JNI's Get*ArrayElements may be able to pinpoint, however it could result
in a copy of the data, which would render this feature non performant.
The tracking itself may be another no-go, since it would add up complexity
and failing to free resources would be another negative sideeffect.

6 years agounit test, typo in doc
Sven Gothel [Tue, 18 Sep 2012 06:33:01 +0000 (08:33 +0200)]
unit test, typo in doc

6 years agoDocumenting Bug 586
Sven Gothel [Mon, 17 Sep 2012 03:41:16 +0000 (05:41 +0200)]
Documenting Bug 586

6 years agoFixes Bug 615 - X11: Use proper screen index/name for shared resources and device...
Sven Gothel [Mon, 17 Sep 2012 01:30:36 +0000 (03:30 +0200)]
Fixes Bug 615 - X11: Use proper screen index/name for shared resources and device denominated 'mutable' surfaces (dummy, offscreen, ..)

Fix follows findings of Rob Hatcherson, but instead of parsing the display connection ourself
we use the X11 macro 'DefaultScreen(display)'

See <>

"The screen number specified in the display_name argument is returned by the DefaultScreen() macro
(or the XDefaultScreen() function)."

Since I currently have no two-head X11 setup here, only xinerama via virtualbox,
pls test / validate.

Note: One Display connection may span multiple screens, i.e.:
  display 'lala:0.1' may span from screen 1 - 3 (non xinerama mode)


[1] How to validate whether a screen number belongs to one display connection ?
We can query ScreenCount(display), however it is not clear what the range would be.

[2] With 1 display connection spanning multiple screens, what is/are the proper connection string[s] ?

[3] After all, it seems this ancient configuration really cannot beat a modern setup w/ XRandR
    having Xinerama enabled. The latter is the default anyways.

6 years agoAnotate focus tests in regards to OSX stability .. sporadically won't gain focus...
Sven Gothel [Sun, 16 Sep 2012 22:27:37 +0000 (00:27 +0200)]
Anotate focus tests in regards to OSX stability .. sporadically won't gain focus and receive keyboard input via AWTRobot

6 years agoAnalyze crash of shared context each running in multiple threads, disabled test for...
Sven Gothel [Sun, 16 Sep 2012 22:01:51 +0000 (00:01 +0200)]
Analyze crash of shared context each running in multiple threads, disabled test for OSX > 10.7.0

Shared context w/ 3 context each running in there own thread is instable here on OSX 10.7.4/NVidia,
SIGSEGV @ glDrawArrays / glBindBuffer .. any shared VBO.
Seems to run fine on 10.6.8/NVidia.

6 years agoComplete 646714d3dab87396b9a3119bf90ca26e0b1c97ce / Fix Bug 601: Add missing enqueueK...
Sven Gothel [Sun, 16 Sep 2012 19:24:58 +0000 (21:24 +0200)]
Complete 646714d3dab87396b9a3119bf90ca26e0b1c97ce / Fix Bug 601: Add missing enqueueKeyEvent(..) in WindowsDriver; Fix API doc typo.

6 years agoFix Bug 601: Harmonize order of key events incl. auto-repeat and adding AUTOREPEAT_MA...
Sven Gothel [Sun, 16 Sep 2012 19:13:51 +0000 (21:13 +0200)]
Fix Bug 601: Harmonize order of key events incl. auto-repeat and adding AUTOREPEAT_MASK modifier bit. Refine InputEvent toString(..) and list modifiers by name.

As now described in NEWT's KeyEvent:
+ * Key events are delivered in the following order:
+ * <ol>
+ *   <li>{@link #EVENT_KEY_PRESSED}</li>
+ *   <li>{@link #EVENT_KEY_RELEASED}</li>
+ *   <li>{@link #EVENT_KEY_TYPED}</li>
+ * </ol>
+ * In case the native platform does not
+ * deliver keyboard events in the above order or skip events,
+ * the NEWT driver will reorder and inject synthetic events if required.
+ * <p>
+ * Besides regular modifiers like {@link InputEvent##SHIFT_MASK} etc.,
+ * the {@link InputEvent#AUTOREPEAT_MASK} bit is added if repetition is detected.
+ * </p>
+ */

6 years agoAdding test case for Bug 611: On Windows XP is a performance issue, after JOGL initia...
Sven Gothel [Sun, 16 Sep 2012 13:39:10 +0000 (15:39 +0200)]
Adding test case for Bug 611: On Windows XP is a performance issue, after JOGL initialization there seems to be a huge time lag when trying to open the Desktop folder.

6 years agoOSX: Disable TestSWTAccessor03AWTGLn - NSLocking issues w/ SWT/AWT ..
Sven Gothel [Sun, 16 Sep 2012 13:30:48 +0000 (15:30 +0200)]
OSX: Disable TestSWTAccessor03AWTGLn - NSLocking issues w/ SWT/AWT ..

6 years agoAdded very basic unit test of 1 GLProfile initialization
Sven Gothel [Sun, 16 Sep 2012 11:43:45 +0000 (13:43 +0200)]
Added very basic unit test of 1 GLProfile initialization

6 years agoOSX: Capture 'invalid drawable' message cause by NSOpenGLContext::setView(NULL |...
Sven Gothel [Sun, 16 Sep 2012 11:27:06 +0000 (13:27 +0200)]
OSX: Capture 'invalid drawable' message cause by NSOpenGLContext::setView(NULL || incomplete-view) ; Add missing [ctx release] in MyNSOpenGLLayer ; Misc

NSOpenGLContext::setView(NULL || incomplete-view) was called on 2 occasions:
  [1] - MacOSXCGLContext native createContext
  [2] - NSOpenGLLayer internals

For [1], we simply don't call setView(..) ourselfs in case view is NULL or incomplete (invisible)

For [2], we need to wrap the class 'MyNSOpenGLContext:NSOpenGLContext' and capture setView(NULL)


Add missing [ctx release] in MyNSOpenGLLayer, otherwise resource won't get dealloc'ed


  - MacOSXCGLContext. contextRealized(true): set pbuffer -> ctx, otherwise 1st makeCurrent call will not catch it
  - MacOSXOnscreenCGLContext: don't add ContextUpdater to invisible ProxySurface's (dummy window)

6 years agoDisable double-buffer mode when offscreen-bitmap is chosen, remove dbl-buff bitmap...
Sven Gothel [Sun, 16 Sep 2012 06:26:58 +0000 (08:26 +0200)]
Disable double-buffer mode when offscreen-bitmap is chosen, remove dbl-buff bitmap test

6 years agoMerge remote-tracking branch 'xranby/jnlp-arch-armv6'
Sven Gothel [Sun, 16 Sep 2012 06:24:41 +0000 (08:24 +0200)]
Merge remote-tracking branch 'xranby/jnlp-arch-armv6'

6 years agoSeamless Integration of an FBObject based GLFBODrawable as GLOffscreenAutoDrawable...
Sven Gothel [Sat, 15 Sep 2012 14:54:52 +0000 (16:54 +0200)]
Seamless Integration of an FBObject based GLFBODrawable as GLOffscreenAutoDrawable.FBO and as an OffscreenLayerSurface's drawable (OSX) - Fix Bugs 569 and 599

The new FBObject based GLFBODrawable implementation allows the seamless utilization of
FBO offscreen rendering in single buffer, double buffer and MSAA mode.

The GLFBODrawable uses a parent drawable based on a
dummy surface to allow a GLOffscreenAutoDrawable.FBO creation
or a mutable surface supporting an existing offscreen layer surface (OSX CALayer).

Offscreen GLDrawable's and GLOffscreenAutoDrawable's can be selected via the
GLCapabilities. If simply !onscreen is selected in the caps instance w/o enabling FBO, PBuffer or Bitmap,
the factory will automatically choose regarding availability:
   FBO > PBuffer > Bitmap

Double buffering is supported in MSAA more (intrinsic) and explicit in non MSAA.
It is preferred when delivering resources (texture id's or framebuffer names)
to a shared GLContext.
This is demonstrated in (emulates our OSX CALayer implementation):
and with the OSX JAWT OffscreenLayerSurface itself. FBO is the preferred choice.


Offscreen drawables can be resized while maintaining a bound GLContext (e.g. w/ GLAutoDrawable).
Previously both, drawable and context, needed to be destroyed and recreated at offscreen resize.
Common implementation in GLDrawableHelper is used in the implementations
(NEWT's GLWindow, AWT GLCanvas, SWT GLCanvas).



Manually run all unit tests on:
  - Linux x86_64 NVidia/AMD/Mesa3d(ES)
  - OSX x86_64 NVidia
  - Windows x86_64 NVidia
  - Android arm Mali-400/Tegra-2

No regressions.

This feature is committed almost in one patch.

Both previous commits were introducing / fixing the capabilities behavior:

I have to appologize for the huge size and impact (files and platforms) of this commit
however, I could not find a better way to inject this feature in one sane piece.

NativeWindow Details:

Complete decoupling of platform impl. detail of surfaces
implementing ProxySurface. Used to generalize dummy surfaces and EGL surfaces
on top of a native platform surface.
  - ProxySurface.UpstreamSurfaceHook -> UpstreamSurfaceHook
  - abstract class ProxySurface -> interface ProxySurface + ProxySurfaceImpl
  - Misc. implementations

JOGL Details:

FBOObject: API Change / Simplification & Usability
  - Removed reference counter to remove complexity, allow user to choose.
  - Add 'dispose' flag for detachColorbuffer(..), allowing to keep attachment alive
  - Fix equals operation of Attachment
  - Check pre-exising GL errors
  - Interface Colobuffer gets lifecycle methods
  - Add static factory methods to create Attachments w/o FBObject instance
  - Reset:
    - Clip min size to 1
    - Keep alive samplingSink, i.e. don't issue resetMSAATexture2DSink(..).
      It gets called at syncFramebuffer()/use(..) later on before actual usage.
      This allows the consumer to utilize the GL_FRONT buffer until (e.g.) swap.
  - misc bugfixes

GLOffscreenAutoDrawable: API Change
  - Reloc and interfacing
  - class com.jogamp.opengl.OffscreenAutoDrawable ->*
    interfaces GLOffscreenAutoDrawable extends GLAutoDrawable
               GLOffscreenAutoDrawable.FBO extends GLOffscreenAutoDrawable, GLFBODrawable
  - Added general implementation and FBO specialization
  - Replacing GLPBuffer (deprecated) .. usable for any offscreen GLDrawable via factory

  - Add 'GLDrawable getDelegatedDrawable()'
  - Refine documentation of setContext(..), remove disclaimer and fixme tags

  - Refine API doc and it's selection mechanism for offscreen.
  - Add createOffscreenDrawable(..)
  - Add createOffscreenAutoDrawable(..)
  - Add canCreateFBO(..)
  - Mark createGLPbuffer(..) deprectated

Mark GLPBuffer deprecated

New: GLFBODrawable extends GLDrawable

GLCanvas (AWT and SWT): Add offscreen resize support w/o GLContext recreation

GLAutoDrawableBase .. GLWindow:
  - Add offscreen resize support w/o GLContext recreation
  - Remove double swapBuffer call

  - Add:
    - boolean hasBasicFBOSupport()
    - boolean hasFullFBOSupport()
    - int getMaxRenderbufferSamples()
    - boolean isTextureFormatBGRA8888Available()

GLContext: Fix version detection and hasGLSL()
  - Version detection in setGLFunctionAvailability(..)
    - Query GL_VERSION ASAP and parse it and compare w/ given major/minor
    - Use parsed version if valid and lower than given _or_ given is invalid.
    - Use validated version for caching (procaddr, ..), version number, etc.

  - Fix hasGLSL()
    Since 'isGL2ES2()' is true if 'isGL2()'
    and the latter simply alows GL 1.*, we confine the result to a GL >= 2.0
    on desktops. FIXME: May consider GL 1.5 w/ extensions.
    -  return isGL2ES2();
    +      return isGLES2() ||
    +             isGL3() ||
    +             isGL2() && ctxMajorVersion>1 ;

  - Add 'associateContext(GLContext, boolean)' allowing impl.
    to have a (weak) reference list of bound context.
    This is was pulled up from the OSX specific drawable impl.
  - swapBuffersImpl() -> swapBuffersImpl(boolean doubleBuffered)
    and call it regardless of single buffering.
    This is required to propagate this event to impl. properly,
    i.e. FBODrawable requires a swap notification.
  - Clarify 'contextMadeCurrent(..)' protocol

  - Add resize and recreate offscreen drawable util method
  - Simplify required init/reshape calls for GLEventListener

  - fixWinAttribBitsAndHwAccel: Reflect sharede context hw-accel bits
  - OSX has no offscreen bitmap, use pbuffer
  - use proper offscreen auto selection if offscreen and no modes are set

EGL Context/Drawable/DrawableFactory: Abstract native platform code out of base classes
  - Use EGLWrappedSurface w/ UpstreamSurfaceHook to handle upstream (X11, WGL, ..)
    lifecycle - in case the EGL resource is hooked up on it.

Invisible dummy surfaces: All platforms
  - size is now reduced to 64x64 and decoupled of actual generic mutable size
  - fix device  lifecycle, no more leaks



Enable support for GLFBODrawableImpl in offscreen CALayer mode
  - NSOpenGLImpl: hooks to calayer native code
  - calayer code:
    - allows pbuffer and texures (FBO)
    - decouple size and draw calls avoiding flickering
    - enable auto resize of calayer tree

  - NSOpenGLImpl:
  - Fix false pbuffer 'usage', validate the pointer
  - If !pbuffer, copy other window mode bits of caps

  - Only assume pbuffer if !onscreen
  - Remove reference of native pixelformat pointer

Native code:
  - use 'respondsToSelector:' query before calling 'new' methods
    avoiding an error message where unsuported (prev. OSX versions)
  - if monitor refresh-rate is queried 0, set to default 60hz
  - add missing NSAutoreleasePool decoration


Android / NEWT:

Issue setVisible(..) w/o wait, i.e. queue on EDT,
@Android surfaceChanged() callback. Otherwise we could deadlock:
   setVisible(..) -> EDT -> setVisibleImpl(..) -> 'GL-display'.
the latter may may cause havoc while Android-EDT is blocked [until it's return].

6 years agoFix window mode attribute bit FBO_BIT usage in platform dependent code (map it to...
Sven Gothel [Sat, 8 Sep 2012 17:45:11 +0000 (19:45 +0200)]
Fix window mode attribute bit FBO_BIT usage in platform dependent code (map it to native type) ; OSX Caps selection ; WGL/GDI BITMAP fix

Fix window mode attribute bit FBO_BIT usage in platform dependent code (map it to native type)
  All platform dependent winAttrBit mapping: 'nativeType -> winAttrBit' and 'GLCapabilities -> winAttrBits'
  shall replace FBO_BIT w/ the native type of the wrapper surface, i.e. WINDOW_BIT (X11, WGL, CGL) or PBUFFER_BIT (EGL).
  This condenses to changes in
    - EGLGraphicsConfiguration: EGLConfigDrawableTypeBits / GLCapabilities2AttribList

    - X11GLXGraphicsConfiguration: FBCfgDrawableTypeBits, XVisualInfo2GLCapabilities / GLCapabilities2AttribList

    - WindowsWGLGraphicsConfiguration: AttribList2DrawableTypeBits, PFD2DrawableTypeBits / GLCapabilities2AttribList

    - OSX CGL/NS requires changes in MacOSXCGLContext, i.e. fix the surface mode of
      NSPixelFormat2GLCapabilities, CGLPixelFormat2GLCapabilities results.
      This change is included in the upcoming commit (class is heavily edited).

OSX chooseGraphicsConfigurationStatic: Add missing 'GLGraphicsConfigurationUtil.fixGLCapabilities(..)' call
  - all platform impl. require to fix the given user caps due to the new offscreen auto selection mode

WindowsWGLGraphicsConfiguration*: ARB / GDI updateGraphicsConfiguration*()
  - ARB method detects early whether it's suitable for given HDC, i.e. in case of BITMAP (it's not here)
  - GDI methods detect failure while choosing PFD and doesn't care of DOUBLEBUFFER in case of bitmap (fixes BITMAP usage)

  - Fix missing double-buffer check in GLCapabilities.equals()
  - add 'copyFrom(..)' method copy all data from give caps

6 years agoNEWT AWT Driver: Remove flashing (clear background @ update/paint method) ; Proper...
Sven Gothel [Fri, 7 Sep 2012 06:34:32 +0000 (08:34 +0200)]
NEWT AWT Driver: Remove flashing (clear background @ update/paint method) ; Proper canvas size and direct events.

6 years agoNEWT EDTUtil: Complete AWT and SWT impl. w/ Newt event dequeue thread (NEDT)
Sven Gothel [Fri, 7 Sep 2012 06:32:31 +0000 (08:32 +0200)]
NEWT EDTUtil: Complete AWT and SWT impl. w/ Newt event dequeue thread (NEDT)

AWT and SWT impl. use the toolkit thread to deliver toolkit events and to
execute task. However, NEWT dispatches event using its own queue for NEWT events.
Adding a simple thread to dequeue those.

Remove 'EDTUtil.start()', since this is implicit @ invoke().

6 years agoCleanup shutdown mechanism ; Fix X11/ATI SIGV at shutdown ; EGLDisplayUtil: Check...
Sven Gothel [Fri, 7 Sep 2012 06:13:06 +0000 (08:13 +0200)]
Cleanup shutdown mechanism ; Fix X11/ATI SIGV at shutdown ; EGLDisplayUtil: Check for leaked display handles

GLProfile / all shutdown methods: Remove ShutdownType to remove complexity (not required)

Proper shutdown sequence:
  GLProfile - GLDrawableFactory+ - GLContext - NativeWindowFactory - [X11Util, OSXUtil, ..]

GLDrawableFactory: Always keep shutdown-hook alive, required for X11Util shutdown (@ JVMShutdown only)

X11Util: Shutdown
  - @ JVMShutdown only
  - If GL vendor ATI: close pending X11 display connections in proper order of creation.
    This finally removes the SIGV when shutting down the JVM on X11 w/ ATI driver.

EGLDisplayUtil: Add shutdown, allowing to validate whether leaked EGL display handles remain.

6 years agoWindows scripts: bump to 1.6.0_35
Sven Gothel [Fri, 7 Sep 2012 03:46:52 +0000 (05:46 +0200)]
Windows scripts: bump to 1.6.0_35

6 years agoFix Capabilities ambiguity and explosion of queried available-list; Add FBO availabil...
Sven Gothel [Fri, 7 Sep 2012 03:46:22 +0000 (05:46 +0200)]
Fix Capabilities ambiguity and explosion of queried available-list; Add FBO availability detection for EGL, WGL and OSX.

Introducing Capabilities 'bitmap' boolean, complementing the offscreen modes FBO and PBuffer.
This allows:
  1 - deterministic setting of the offscreen mode

  2 - utilizing auto configuration of offscreen mode, if !onscreen !FBO !PBuffer and !Bitmap

  3 - adding 'availability' semantic of 'onscreen' boolean,
      i.e. if onscree:=1 for a queried instance, the offscreen modes still indicate offscreen
      availability - see [4]

  4 - avoiding explosion of the availability list due to [3],
      one Capability entry reflect on- and offscreen settings.

Add FBO availability detection for EGL, WGL and OSX.

Tested manually w/ 'TestGLCapabilities01NEWT' on X11 [NV, ATI], WGL[NV], OSX[NV].

6 years agoAndroid: Bump version.code: 914011
Sven Gothel [Thu, 23 Aug 2012 20:28:27 +0000 (22:28 +0200)]
Android: Bump version.code: 914011

6 years agoFix Android Power-suspend and Power-resume
Sven Gothel [Thu, 23 Aug 2012 19:09:23 +0000 (21:09 +0200)]
Fix Android Power-suspend and Power-resume

NewtBaseActivity onPause()/onResume(): add setVisible(..) allowing recreation and avoid usage of unavail resources
  - crucial for power suspend/resume, which itself calls activity onPause()/onResume(),
    this ensures resources are not used onPause().

  - Animator suspend is not sufficient due to surfaceRedrawNeeded(..) hook etc ..

  - iff power suspend leads to surfaceDestroyed(..), recreation is now possible due to setVisible(true) on onResume()
    even though I have not observed this on Android 2.3 and 4.0.1

Tested on Android 2.3 and Android 4.0.1

6 years agoFix Android/NEWT WindowDriver: Add missing eglDestroySurface() in closeNativeImpl...
Sven Gothel [Thu, 23 Aug 2012 19:07:55 +0000 (21:07 +0200)]
Fix Android/NEWT WindowDriver: Add missing eglDestroySurface() in closeNativeImpl(); Complete visibleChanged() in reconfigureWindowImpl() even if resize or reposition can't be handled

Add missing eglDestroySurface() in closeNativeImpl()
  - missing egl surface destruction leaked it's resource ..

Complete visibleChanged() in reconfigureWindowImpl() even if resize or reposition can't be handled
  - properly detect resize and reposition request, warn if this action cannot be completed
    but contine w/ workflow -> visibleChanged()

  - this allows properly handling of setVisible(..) and it's visible-changed detection polling

6 years agoGLContext: Remove integer-key based attach/detach object - use String based (minor...
Sven Gothel [Thu, 23 Aug 2012 12:01:08 +0000 (14:01 +0200)]
GLContext: Remove integer-key based attach/detach object - use String based (minor API change)

The integer based attachement is currently not used
and since it has no benefit over the String based hash map - remove it.

6 years agoJNLP: Cache jogl-all-natives and jogl-cg-natives for linux-armv6 and linux-armv6hf.
Xerxes Rånby [Wed, 22 Aug 2012 09:35:35 +0000 (11:35 +0200)]
JNLP: Cache jogl-all-natives and jogl-cg-natives for linux-armv6 and linux-armv6hf.

Gluegen commit gluegen/commit/422d7a5eb53fca6642ebf4e8910d8b0311bb2597
Change/Lower ARM Requierements for GNU/Linux
changed the *native-linux-arm* jar names; update jnlp-files accordingly.

Due to the lack of OS Arch and ABI detection in JNLP launchers
force us download both armv6 armel and armv6hf armhf ABI jars on ARM.

6 years agoFix/Workaround: For BCM_VC_IV EGL (alpha) configuration
Sven Gothel [Tue, 21 Aug 2012 13:55:37 +0000 (15:55 +0200)]
Fix/Workaround: For BCM_VC_IV EGL (alpha) configuration

Native BCM_VC_IV code CreateWindow() uses the default alpha value setting,
which is alpha:8 ! Hence we require to chose alpha from the egl configurations

TODO: Properly select the alpha mode in CreateWindow()! This will allow this hack.

6 years agoFix EGLDrawableFactory ES1/ES2 detection for !pbuffer ; Misc robustness changes for...
Sven Gothel [Tue, 21 Aug 2012 13:51:55 +0000 (15:51 +0200)]
Fix EGLDrawableFactory ES1/ES2 detection for !pbuffer ; Misc robustness changes for GLDrawableFactory ..

- EGLDrawableFactory ES1/ES2 detection for !pbuffer
   - isEGLContextAvailable(..) -> mapAvailableEGLESConfig(..)
   - handle case where no pbuffer configuration is available (nokia n9 meego ..).
     in such case, assume availability if onscreen profile is avail.

- EGLDrawableFactory.getOrCreateEGLSharedResource(..)
   - avoid double creation attempt (similar to SharedResourceRunner)

- EGLGraphicsConfiguration.EGLConfig2Capabilities(..) respect EGL.EGL_CONFIG_CAVEAT's EGL.EGL_SLOW_CONFIG
   - if EGL.EGL_SLOW_CONFIG -> no hw accel.

- Fix GLContext.getRequestMajorAndCompat(..): Proper handling of ES1 and ES2

- Add abstract GLDrawableFactory.isComplete(): Only if true use the factory for 'getFactory(..)' avoid using incomplete ones.

6 years agocrossref userguide/deployment
Sven Gothel [Mon, 20 Aug 2012 22:36:04 +0000 (00:36 +0200)]
crossref userguide/deployment

6 years agoUpdate TODO ; Update JOGL-DEPLOYMENT.html w/ new jar names and added applets
Sven Gothel [Mon, 20 Aug 2012 22:25:11 +0000 (00:25 +0200)]
Update TODO ; Update JOGL-DEPLOYMENT.html w/ new jar names and added applets

6 years agoNEWT Windows.closeNativeImpl(): Remove 'GDI.SetParent(windowHandleClose, 0)' for...
Sven Gothel [Sun, 19 Aug 2012 09:48:04 +0000 (11:48 +0200)]
NEWT Windows.closeNativeImpl(): Remove 'GDI.SetParent(windowHandleClose, 0)' for NewtCanvasSWT workaround - not required anymore

6 years agoFix missing NEWT driver class name change - regression of a694cadca4ab72481e777222f41...
Sven Gothel [Sat, 18 Aug 2012 19:07:37 +0000 (21:07 +0200)]
Fix missing NEWT driver class name change - regression of a694cadca4ab72481e777222f412f006f973f77e

6 years agoFix bcm_vc_iv.h: redefinition of typedef ‘DISPMANX_ELEMENT_HANDLE_T
Sven Gothel [Sat, 18 Aug 2012 18:28:01 +0000 (20:28 +0200)]
Fix bcm_vc_iv.h: redefinition of typedef ‘DISPMANX_ELEMENT_HANDLE_T

6 years agoNativeWindowFactory.getNativeWindowType(..): Return canonical string representation...
Sven Gothel [Sat, 18 Aug 2012 12:52:32 +0000 (14:52 +0200)]
NativeWindowFactory.getNativeWindowType(..): Return canonical string representation allowing proper use of ref. comparison '==', instead of 'String.equals()'

Also make NativeWindowFactory's instances of nativeWindowingTypePure and nativeWindowingTypeCustom static final.

6 years agoNEWT Platform Driver: Uniform impl. class names [DisplayDriver, ScreenDriver, WindowD...
Sven Gothel [Sat, 18 Aug 2012 12:12:54 +0000 (14:12 +0200)]
NEWT Platform Driver: Uniform impl. class names [DisplayDriver, ScreenDriver, WindowDriver] to reduce complexity and programatic selection.

6 years agoGLProfile/NativeWindowFactory: Remove deprecated argument 'firstUIActionOnProcess...
Sven Gothel [Sat, 18 Aug 2012 09:46:01 +0000 (11:46 +0200)]
GLProfile/NativeWindowFactory: Remove deprecated argument 'firstUIActionOnProcess' of initSingleton() method

The notion of changing the threading behavior of native initialization was deprecated for over a year.
The code still contained the bits and pieces, i.e. whether X11Util.initSingletion() is invoked
before or after optional AWT initialization.
This condition has been removed now and behavior is uniform, i.e.
X11Util.initSingletion() is invoked after optional AWT initialization.

- Removed GLProfile.initSingleton(boolean firstUIActionOnProcess), use remaining GLProfile.initSingleton()

- Removed NativeWindowFactory.isFirstUIActionOnProcess()

- Changed NativeWindowFactory.initSingleton(boolean firstUIActionOnProcess) to

6 years agoFix GLCanvas's JAWTWindow reference ; Add ES2 test in TestAWT01GLn ; Ubuntu 12.04...
Sven Gothel [Fri, 17 Aug 2012 22:45:13 +0000 (00:45 +0200)]
Fix GLCanvas's JAWTWindow reference ; Add ES2 test in TestAWT01GLn ; Ubuntu 12.04/Pandaboard(Omap4, PowerVR SGX 540) 103/108 tests passed (before freeze) of 124 total

Fix GLCanvas's JAWTWindow reference
  - drawable.getNativeSurface() may not be a JAWTWindow
    due to our EGL WrappedSurface. Hence store the created JAWTWindow reference locally.

Add ES2 test in TestAWT01GLn
  - test EGL/ES2 w/ AWT GLCanvas

Ubuntu 12.04/Pandaboard(Omap4, PowerVR SGX 540): 103/108 tests passed (before freeze) of 124 total
  - machine freezes around test 108 ..
  - new passed unit test high for ES2 incl. AWT tests

6 years agoFix EGLDrawableFactory.createOffscreenDrawableImpl(NativeSurface): Validate passed...
Sven Gothel [Fri, 17 Aug 2012 18:53:25 +0000 (20:53 +0200)]
Fix EGLDrawableFactory.createOffscreenDrawableImpl(NativeSurface): Validate passed NativeSurface 'target' via getEGLSurface(target)

Makes impl. consistent w/ EGLDrawableFactory.createOnscreenDrawableImpl().
Even for offscreen drawable creation, the passed NativeSurface maybe platform specific (X11, GLX)
for which we require to create a WrappedSurface w/ EGL instances.

6 years agoGLDrawableFactory.createGLDrawable() offscreen: Fix caps - set double-buffer := false...
Sven Gothel [Fri, 17 Aug 2012 18:50:44 +0000 (20:50 +0200)]
GLDrawableFactory.createGLDrawable() offscreen: Fix caps - set double-buffer := false to be consistent w/ GLDrawableFactory.createOffscreenDrawable()

TestGLDrawable01NEWT: Enhance test case to run w/ EGLDrawableFactory (ES2) besides GL2 and GLX/WGL/..-Factory

6 years agoRobostness FBObject / GLReadBufferUtil: Ignore pre-existing GL errors - remove GL...
Sven Gothel [Fri, 17 Aug 2012 15:11:03 +0000 (17:11 +0200)]
Robostness FBObject / GLReadBufferUtil: Ignore pre-existing GL errors - remove GL error checking in FBObject bind/unbind.

- User GL code caused errors shall not fail impl.

- FBObject bind/unbind GL error checking is almost useless due to it's simple code,
  would only catch user GL code errors, which should be ignored here.

- MultisampleDemoES2: Only enable GL_MULTISAMPLE if available, i.e. validate passed multisample flag

6 years agoFix EGLDrawableFactory.getEGLSurface(..): Catch WrappedSurface case w/ EGLDevice...
Sven Gothel [Fri, 17 Aug 2012 13:33:12 +0000 (15:33 +0200)]
Fix EGLDrawableFactory.getEGLSurface(..): Catch WrappedSurface case w/ EGLDevice and EGLGraphicsConfiguration - Regression of 43a473b2005d7f59a7f4f5b8bc7ca9ae88b4e894

Do not create a WrappedSurface around a given WrappedSurface
if the latter is intended for EGL, i.e. uses EGLDevice and EGLGraphicsConfiguration
even though the surface handle is not valid [yet].

For this case we assume the WrappedSurface has a lifecycle hook
as it is used for the dummy drawable.

Otherwise we would have a recursive WrappedSurface, ie with
EGLDrawableFactory.createOnscreenDrawableImpl( dummySurface ),
where dummySurface is a WrappedSurface w/ EGL pbuffer drawable lifecycle hook.

Commit 43a473b2005d7f59a7f4f5b8bc7ca9ae88b4e894 didn't take the above case into account.

6 years agoRobustness: FBObject or reset(..)
Sven Gothel [Fri, 17 Aug 2012 12:20:14 +0000 (14:20 +0200)]
Robustness: FBObject or reset(..)

- Add property 'jogl.fbo.force.min' to simulate minimum FBO caps

- Check new size in reset(..)

- Ignore the status in attachColorbuffer(..), attachRenderbufferImpl(..) and attachTexture2D(..)
  when recreating the resources in detachAllImpl(..)/reset(..).
  The status is validated after recreation of all resources in detachAllImpl(..)

6 years agoRobostness: GLDrawableImpl's contextMadeCurrent()/contextRealized() ; GLFBODrawableIm...
Sven Gothel [Fri, 17 Aug 2012 11:47:48 +0000 (13:47 +0200)]
Robostness: GLDrawableImpl's contextMadeCurrent()/contextRealized() ; GLFBODrawableImpl.contextMadeCurrent(false), OffscreenAutoDrawable.setSize(..)

GLDrawableImpl's contextMadeCurrent()/contextRealized():
  - Catch exception which may appear during callback and cont. w/ GLContextImpl's release()/destroy()
    while throwing catched exception at end.

  - Detect null Colorbuffer ASAP and throw exception

  - Catch exceptions at 1) GLFBODrawableImpl.setSize(..) and
    2) GLContext.release() .. throw it in proper order.

6 years agoFix FFMPEGMediaPlayer: Use GL_ALPHA (texture format intern/data) instead of GL_RGBA...
Sven Gothel [Thu, 16 Aug 2012 14:06:57 +0000 (16:06 +0200)]
Fix FFMPEGMediaPlayer: Use GL_ALPHA (texture format intern/data) instead of GL_RGBA/GL_ALPHA ; Load dedicated native libav/libffmpeg

- ES2 spec does not allow GL_RGBA/GL_ALPHA.

- Load dedicated native libs (libav/libffmpeg) since distributions don't create
  symlink e.g. ->

6 years agoEGLGraphicsConfigurationFactory: Fix platform w/o GLX but X11 window handle.
Sven Gothel [Thu, 16 Aug 2012 14:01:49 +0000 (16:01 +0200)]
EGLGraphicsConfigurationFactory: Fix platform w/o GLX but X11 window handle.

Without GLX but X11 windows, there is no pre-configured X11GLXGraphicsConfigurationFactory set,
hence fetch the fallback X11GraphicsConfigurationFactory via:
  GraphicsConfigurationFactory.getFactory(com.jogamp.nativewindow.x11.X11GraphicsDevice.class, CapabilitiesImmutable.class)

TODO: Cleanup cases for other platform - simplify!

6 years agoEGLDisplayUtil: Workaround (latest) PVR 540 EGL regression where 3nd EGLDisplay's...
Sven Gothel [Thu, 16 Aug 2012 13:58:33 +0000 (15:58 +0200)]
EGLDisplayUtil: Workaround (latest) PVR 540 EGL regression where 3nd EGLDisplay's eglInitialize(..) fails ; Fix EGLDrawableFactory.getEGLSurface()

- EGLDisplayUtil: Workaround (latest) PVR 540 EGL regression where 3nd EGLDisplay's eglInitialize(..) fails
  In this case and if eglGetDisplay(..) fails w/ a non EGL_DEFAULT_DEVICE, fall back to EGL_DEFAULT_DEVICE - always.
  This workaround actually simplifies handling both cases.

- Fix EGLDrawableFactory.getEGLSurface()
  Tests whether a given NativeSurface w/ EGLGraphicsDevice and EGLGraphicsConfiguration
  has a valid EGL Surface. Only if true, reuse the whole NativeSurface,
  otherwise construct the missing pieces (device, config and use a WrappedSurface for EGL).

6 years agoInclude NEWT driver BCM_VC_IV to 'all' JAR (completes 0ca481381b51b4082ac2b3bbae80cfa...
Sven Gothel [Thu, 16 Aug 2012 13:48:02 +0000 (15:48 +0200)]
Include NEWT driver BCM_VC_IV to 'all' JAR (completes 0ca481381b51b4082ac2b3bbae80cfaf5b60c3b8)

6 years agoNEWT: Adding support for BCM VC IV (Broadcom VideoCodec 4) and Linux console mouse...
Sven Gothel [Thu, 16 Aug 2012 13:46:49 +0000 (15:46 +0200)]
NEWT: Adding support for BCM VC IV (Broadcom VideoCodec 4) and Linux console mouse tracker

Rasperry PI uses the 'BCM VC IV' GPU via console as it's default configuration.
This driver enables direct support for JOGL/NEWT.

Due to the lack of detection (TODO) users have to specify the Java property:

- Autodetection should be included in 'NativeWindowFactory._getNativeWindowingType()'
  while adding a new TYPE: 'TYPE_BCM_VC_IV'.

- Autodetection may need to detect whether an X11 Display runs and the installed
  EGL library uses it (instead of the default console one)

This work is authored in coop w/ Xerxes Rånby <>!

6 years agoAdapt to GlueGen ARM Build Changes 422d7a5eb53fca6642ebf4e8910d8b0311bb2597
Sven Gothel [Thu, 16 Aug 2012 12:47:16 +0000 (14:47 +0200)]
Adapt to GlueGen ARM Build Changes 422d7a5eb53fca6642ebf4e8910d8b0311bb2597

Note: Patch set not clean since build*xml files contain 'NEWT Broadcom' driver changes of upcoming commit
      due to pervious uncommitted work. Will be fixed w/ next commit.

6 years agoResolve conflict
Sven Gothel [Tue, 7 Aug 2012 03:15:46 +0000 (06:15 +0300)]
Resolve conflict

6 years agoMerge remote-tracking branch 'github-sgothel/master' into armv6hf
Xerxes Rånby [Mon, 6 Aug 2012 21:17:11 +0000 (21:17 +0000)]
Merge remote-tracking branch 'github-sgothel/master' into armv6hf

6 years agoUse armv6 optimization for armhf to stay compatible with the new Raspberry Pi Raspbia...
Xerxes Rånby [Mon, 6 Aug 2012 21:00:19 +0000 (21:00 +0000)]
Use armv6 optimization for armhf to stay compatible with the new Raspberry Pi Raspbian distribution.

6 years agoFix X11 Display Connection leak w/ new GLAutoDrawableBase code when used w/ offscreen... v2.0-rc10
Sven Gothel [Thu, 2 Aug 2012 22:38:37 +0000 (01:38 +0300)]
Fix X11 Display Connection leak w/ new GLAutoDrawableBase code when used w/ offscreen drawables, reported by Mark Raynsford

New common GLAutoDrawableBase missed to close the AbstractGraphicsDevice
in case it has been created and dedicated for the passed GLDrawable.
This detailed knowledge is only known to the creator, hence it is passed
in the constructor and is being passed through all specializations.

Further more the new X11/GLX impl. of GLDrawableFactory's
'createMutableSurfaceImpl' always creates it's own private X11 display connection
to avoid locking / threading issues. Since the old implementation reused the
shared display connection which is prone to threading issues, this bug was not visible before.

Also fixed the unit test TestNEWTCloseX11DisplayBug565,
now correctly validating that no display connection is left over
after a new cycle of create/destroy of onscreen and offscreen drawables.

6 years agoAdd property: 'jogl.disable.opengles' to disable querying and using OpenGL ES
Sven Gothel [Wed, 25 Jul 2012 02:25:32 +0000 (04:25 +0200)]
Add property: 'jogl.disable.opengles' to disable querying and using OpenGL ES

This might be required by a few older buggy ES implementations.

Also assists to discable ANGLE is not properly detected (?)
on Windows 32bit - the latter causes SEGV within FF and Chrome.

TODO: Fix ANGLE detection and usage within broser

NOTE: ANGLE works fine standalone ..

6 years agoSWT Update: SWT GLCanvas creates lazy when resource is ready; Create new NewtCanvasSW...
Sven Gothel [Wed, 25 Jul 2012 02:23:35 +0000 (04:23 +0200)]
SWT Update: SWT GLCanvas creates lazy when resource is ready; Create new NewtCanvasSWT allowing to parent NEWT windows natively.

SWT GLCanvas creates lazy when resource is ready
  - Ensures drawable and context are created when size > zero and native visualID is valid.
    The latter is platform dependent.
  - Note that you cannot utilize custom GLCapabilities w/ this one,
    since the configurations is already realized - use NewtCanvasSWT.

Create new NewtCanvasSWT allowing to parent NEWT windows natively:
  - Similar to NewtCanvasAWT
  - Allows attaching / detaching NEWT windows

NewtCanvasAWT: Public setNEWTChild(..) fixed

Added test cases for the above - tested on Linux, OSX and Windows w/ SWT

Note: As usual for OSX, add -XstartOnFirstThread


- NEWT Display has new method: 'EDTUtil setEDTUtil(EDTUtil)'
  allowing to set a custom event dispatch utility.
  We use this to set our SWTEDTUtil for using NEWT w/ SWT
  complying w/ SWT threading constraints.

6 years agoFix GraphicsConfigurationFactory: Map factory to device-type _and_ capabilities-type...
Sven Gothel [Mon, 23 Jul 2012 22:14:02 +0000 (00:14 +0200)]
Fix GraphicsConfigurationFactory: Map factory to device-type _and_ capabilities-type; Add a pre-set nativeVisualID to chooseGraphicsConfiguration(..)

Map factory to device-type _and_ capabilities-type:
  - Allows using different GraphicsConfigurationFactory implementations for different capabilities-types.
    Previous impl. failed to use an OpenGL agnostic CapabilitiesImmutable for 'chooseGraphicsConfiguration(..)'
    since only the GL aware factory was mapped. The latter failed since it expected a GLCapabilitiesImmutable.

  - The passed capabilities-type as well as device-type given at getFactory(..)
    is traversed top-to-down to find a most suitable factory:
        For-All devT := getTopDownDeviceTypes(deviceType)
            For-All capsT := getTopDownCapabilitiesTypes(capabilitiesType)
               f = factory.get(devT, capsT);
               if(f) { return f; }

Add a pre-set nativeVisualID to chooseGraphicsConfiguration(..)
  - In situations where a native visualID is already chosen [by external means for example],
    but we still need to query a matching GraphicsConfiguration - we require to pass
    a non VisualIDHolder.VID_UNDEFINED nativeVisualID.

    We had a hack implemented before within some implementations and their static calls,
    however an agnostic mechanism is required to implement new NativeSurface/Window's
    platform agnostic.

  - X11GLXGraphicsConfigurationFactory: respect a pre-set xvisualID

  - X11GLXDrawableFactory.createProxySurfaceImpl(..) queries the given windowHandle's
    visualID and 'chooses' the configuration accordingly. If the visualID is undefined
    an exception is thrown, since window is invalid.
    These mechanics are implicit for Windows and OSX.

Fix X11GLXGraphicsConfiguration.updateGraphicsConfiguration():
  - Skip any action if a valid X11GLCapabilities is already chosen, i.e. w/ visualID.
    Otherwise choose a suitable configuration incl. visualID.
    The latter is quite impossible and invalid, since visualID must be defined at window creation time
    and the update method is issued with a valid window.

X11 - Misc:
  - Added 'int jogamp.nativewindow.x11.X11Lib.GetVisualIDFromWindow(..)'

  - All returned visualID's are of type 'int'

6 years agoAdding TODO note: Optimize/Fix NIO caching of glMapBuffer/glUnmapBuffer
Sven Gothel [Sun, 22 Jul 2012 02:18:26 +0000 (04:18 +0200)]
Adding TODO note: Optimize/Fix NIO caching of glMapBuffer/glUnmapBuffer

6 years agoAlign TestSWTAccessor02GLn w/ TestSWTJOGLGLCanvas01GLn, dropping the canvas cstr...
Sven Gothel [Sun, 22 Jul 2012 02:18:07 +0000 (04:18 +0200)]
Align TestSWTAccessor02GLn w/ TestSWTJOGLGLCanvas01GLn, dropping the canvas cstr on SWT thread,
which seems not to be required.

6 years agoFix Bug 606 - New AWT threading implementation breaks .. ; Fix GLAutoDrawable multi...
Sven Gothel [Sun, 22 Jul 2012 02:16:55 +0000 (04:16 +0200)]
Fix Bug 606 - New AWT threading implementation breaks .. ; Fix GLAutoDrawable multi-threading w/ proper pattern (hope so)

Considering code changes and remarks:

It seems necessary to have

- recursive locking employed for all semantic actions which changes drawable & context (and the Window resource)

- to avoid deadlock, we have to ensure the locked code segment will not spawn
  off to another thread, or a thread holds the lock, spawns of an action requiring the lock. .. sure

- other read-only methods (flags, ..) shall at least utilize a safe local copy of a volatile field
  if further use to produce the result is necessary.

- flags like sendReshape require to be volatile to guarantee it's being processed

Patch impacts: AWT/SWT GLCanvas, GLAutoDrawableBase [and it's specializations]
and hopefully closes any loopholes of missing a cache hit, etc.

If you review this and find optimizations, i.e. removing a lock due to semantics etc,
don't hold back and discuss it, please.

6 years agoFix TestSWTAccessor02GLn regression .. forgot to: canvas.addControlListener(swtUpstre...
Sven Gothel [Fri, 20 Jul 2012 20:16:54 +0000 (22:16 +0200)]
Fix TestSWTAccessor02GLn regression .. forgot to: canvas.addControlListener(swtUpstreamHook);

6 years agoFix OSX OffscreenLayerSurface (OLS) regressions (pbuffer based)
Sven Gothel [Fri, 20 Jul 2012 20:05:32 +0000 (22:05 +0200)]
Fix OSX OffscreenLayerSurface (OLS) regressions (pbuffer based)

- Use pbuffer (still), don't set FBO (invisible)

- OLS (only impl is JAWTWindow now) stores the attached layer handle
  created and attached by the GLContext implementation,
  so 'others' may detach it -> NewtCanvasAWT

- NewtCanvasAWT.removeNotify() needs to ask the OLS to detach the layer
  since it's parent will be gone.

- MacOSXCGLContext destroy allows a removed OLS (see above)

6 years minor edit
Sven Gothel [Fri, 20 Jul 2012 13:44:20 +0000 (15:44 +0200)] minor edit

6 years agoFix OSX regression of commit 20bf031db719f7baa4c6e74734fc999061e08fe2 - handling...
Sven Gothel [Fri, 20 Jul 2012 13:44:00 +0000 (15:44 +0200)]
Fix OSX regression of commit 20bf031db719f7baa4c6e74734fc999061e08fe2 - handling w/ non NSView handles (pbuffer)

6 years agoFix TestFocus01SwingAWTRobot failure duer to RedSquareES2's setFullscreen() toggle...
Sven Gothel [Fri, 20 Jul 2012 12:48:52 +0000 (14:48 +0200)]
Fix TestFocus01SwingAWTRobot failure duer to RedSquareES2's setFullscreen() toggle mouse adapter :)

Moved the fullscreen toggle mouse adapter to main test class.

6 years agoMinor edits
Sven Gothel [Fri, 20 Jul 2012 12:09:04 +0000 (14:09 +0200)]
Minor edits

6 years agoGLCapabilities Native Aquisition: Set alpha bits at last - due to it's auto setting...
Sven Gothel [Fri, 20 Jul 2012 12:08:49 +0000 (14:08 +0200)]
GLCapabilities Native Aquisition: Set alpha bits at last - due to it's auto setting by setSampleBuffers(true) and setBackgroundOpaque(false)

This bug lead to X11 GLCapabilities rgba: 8/8/8/1 - which ofc is invalid. Sideeffect was a bad selected GLXFB configuration
and the GLContext couldn't be made current.

Patch sets alpha bits reflecting reality carefully after opaque/samples. Added API doc note.

6 years agoFix NEWT exception handling in event dispatching: Catch and fwd to caller
Sven Gothel [Fri, 20 Jul 2012 10:46:35 +0000 (12:46 +0200)]
Fix NEWT exception handling in event dispatching: Catch and fwd to caller

Exceptions caused by NEWTEvent processing (on it's EDT)
were not propagated to the caller (diff thread).
Hence the EDT were brought down and the caller may have waited forever (deadlock).

Catch exception if caller waits and throw exception at waiting point.

6 years agoBug 599 - FBObject / Offscreen Support - Part 1
Sven Gothel [Thu, 19 Jul 2012 19:15:10 +0000 (21:15 +0200)]
Bug 599 - FBObject / Offscreen Support - Part 1

- New FBObject implementation handling FBO and it's attachments  *** API CHANGE: Util -> Core ***
  while it's size and sample-count can be reconfigured on the fly.
    - com.jogamp.opengl.util.FBObject -> com.jogamp.opengl.FBObject
    - agnostic to texture unit
    - separate attachments using OO hierarchy reflecting FBO
    - handling MSAA and blitting
    - no FBO destruction for reconfig (attach/detach)

- New GLFBODrawableImpl impl. an FBObject based GLDrawable
   - Instantiated by a dummy native surface (onscreen and invisible)
     hooked up to a dummy GLDrawable, which is the delegation for context creation.

   - Utilizies ProxySurface.UpstreamSurfaceHook for dummy surface
     avoiding specialization for native platforms.

   - TODO: Allow to utilize common surface interface as a
     dummy-surface to supporting API seperation of
     windowing/GL. The latter allows impl. of createGLDrawable(NativeSurface)
     with FBO.

- New OffscreenAutoDrawable (extends GLAutoDrawableDelegate)
  for all offscreen drawables. Shall replace GLPbuffer.

- New GLCapabilities*.isFBO() / setFBO(boolean) to request FBO offscreen,
  similar to isPBuffer(). Rule: if both are requested, FBO shall be favored.

- GLContext adds raw FBO availability query (min. FBO avail),
  FBObject contains fine grained queries (TODO: Move parts to GLContext for efficiency).

- Add framebuffer tracking, allowing fast querying:
  - GLBase/GLContext:
      public int getBoundFramebuffer(int target);
      public int getDefaultDrawFramebuffer();
      public int getDefaultReadFramebuffer();

  - GLContextImpl
      public final void setBoundFramebuffer(int target, int framebufferName)
      .. called by GL impl bind framebuffer

- GL: getDefaultDrawFramebuffer(), getDefaultReadFramebuffer()
  Adding default framebuffer queries being issued by
  GL.glBindFramebuffer(target, 0) w/ a default framebuffer, o.e. zero.
  This allows a transparent use of a custom FBO even in case the applications
  attempts to reset FBO to zero.
    Value flow: GL <- GLContext <- GLDrawable,

- GLCapabilities handle fbo/pbuffer seperate, don't disable the other

- GLContext/GL track read/write framebuffer to be queried by FBObject
  to determine whether to bind/unbind  a framebuffer

- Test cases for multiple FBO w/ and w/o MSAA

Other Features:

- New interface ProxySurface.UpstreamSurfaceHook,
  allowing to hook an upstream surface of unknown type
  providing lifecycle and information (size, ..) callbacks.
  Used for all new dummy NativeSurface impl and SWT GLCanvas.

  - GLContext -> GLDrawable propagation context/drawable lifecycle
    via ProxySurface.UpstreamSurfaceHook allowing dynamic resources
    to react (create, init, ..)
    - contextRealized()
    - contextMadeCurrent()

- SurfaceChangeable -> MutableSurface
  currently only contains setting the surface handle.

  TODO: May need to move ProxySurface.UpstreamSurfaceHook -> MutableSurface.UpstreamSurfaceHook,
        allowing other impl. classes (NEWT OffscreenWindow) to utilize the new
        upstream hookup mechanism - will allow FBO/Dummy window to work.

- SWT GLCanvas using ProxySurface.UpstreamSurfaceHook for proper size

- New GLAutoDrawable::getUpstreamWidget(), allowing GLEventListener
  to fetch the owning Java side UI element (NEWT, SWT, AWT, ..).

- GLDrawableFactory: Removed createOffscreenSurface() - unused and not GL related

- EGLDrawableFactory handles device/profile avail. mapping
  while actually creating context/drawable.
  This allows us to learn whether the ES context is software/hardware as well as FBO avail.

- EGLDrawable: Removed secret buckets of EGL configs :)
  Employ native surface (X11, WGL, ..) to EGL 'mapping' in
  EGLDrawableFactory utilizing new EGLUpstreamSurfaceHook (implements ProxySurface.UpstreamSurfaceHook).

Other Bugs:

- Add CTX_OPTION_DEBUG to ctx/extension cache key since only a debug ctx
  may expose the ARB debug capability.
  This bug caused lack of ARB/AMD debug functionality.

- Fix GLProfile deadlock (debug mode, w/ EGL/ES, no X11),
  dump availability information _after_ lock.

- ImmModeSink draw(): Use GL's glDrawElements(..), don't cast for GL2ES1.
  Fixes use for GL2ES2.

- Fix KeyEvent.getKeyChar() comment (-> only stable for keyTyped(..))


- Refined alot of API doc

- New GLExtensions holds commonly used GL extension strings,
  allows better referencing and usage lookup.

- Move GL (interface) decl. to GLBase

- GLBuffers: Cleanup API doc (format, types)

- TextureIO: Add PAM and PPM static suffix identifier

- GLCapabilities getNumSamples() returns 0 if sampleBuffers is disabled, this seems to be more natural.

- finalized a lot

6 years agoRename jogamp.newt.driver.kd.* classes to allow OpenKODE testing by passing
Xerxes Rånby [Tue, 10 Jul 2012 15:12:12 +0000 (17:12 +0200)]
Rename jogamp.newt.driver.kd.* classes to allow OpenKODE testing by passing
-cp jar/atomic/newt-driver-kd.jar

6 years agoRename jogamp.newt.driver.kd.* classes to allow OpenKODE testing by passing
Xerxes Rånby [Tue, 10 Jul 2012 15:03:01 +0000 (17:03 +0200)]
Rename jogamp.newt.driver.kd.* classes to allow OpenKODE testing by passing
-cp jar/atomic/newt-driver-kd.jar

6 years agoGLCapabilities*: Add 'isFBO()' and 'setFBO(boolean)', allowing upcoming impl. to...
Sven Gothel [Mon, 9 Jul 2012 15:08:45 +0000 (17:08 +0200)]
GLCapabilities*: Add 'isFBO()' and 'setFBO(boolean)', allowing upcoming impl. to select offscreen FBO (GLDrawable, ..)

6 years agoEGLGraphicsDevice adds desctruction callback and nativeDisplayID; EGLDisplayUtil...
Sven Gothel [Mon, 9 Jul 2012 15:07:02 +0000 (17:07 +0200)]
EGLGraphicsDevice adds desctruction callback and nativeDisplayID; EGLDisplayUtil adds creation of EGLGraphicsDevice.

Due to EGL's location in JOGL, supporting destruction of an EGLGraphicsDevice
is solved (hack) temporary by passing an eglTerminate callback to it's ctor.

Using EGLGraphicsDevice's close() method to also issue eglTerminate() simplifies the code.

In future we shall move EGL to nativewindow!

6 years agoFix commit dfee8c58d4915f78f57545c26a492668b2b68a87
Sven Gothel [Fri, 6 Jul 2012 07:06:03 +0000 (09:06 +0200)]
Fix commit dfee8c58d4915f78f57545c26a492668b2b68a87

6 years agoFix SWT GLCanvas threading. Note: On OSX _only_ it's main thread is valid!
Sven Gothel [Fri, 6 Jul 2012 06:57:57 +0000 (08:57 +0200)]
Fix SWT GLCanvas threading. Note: On OSX _only_ it's main thread is valid!

6 years agoC code: remove warnings
Sven Gothel [Thu, 5 Jul 2012 23:58:09 +0000 (01:58 +0200)]
C code: remove warnings

6 years agotest scripts windows: use new jogl-all.jar and jogl-test.jar
Sven Gothel [Thu, 5 Jul 2012 23:57:38 +0000 (01:57 +0200)]
test scripts windows: use new jogl-all.jar and jogl-test.jar

6 years agoEnhance Bootsrapping of JOGL around 37% - 40% (1st start in new JVM) - GLProfile...
Sven Gothel [Thu, 5 Jul 2012 23:20:48 +0000 (01:20 +0200)]
Enhance Bootsrapping of JOGL around 37% - 40% (1st start in new JVM) - GLProfile and GLContext*

GLProfile: Enhance bootsrapping performance of loading GL*Impl class
  - Offthread classloading of all GL*Impl via reflection at startup
    reduces startup time here around 12% (800ms down to 700ms).

GLContext*: Enhance bootsrapping performance of querying available GL profiles
  - Add PROFILE_ALIASING mode, defaults to true - can be disabled w/ property 'jogl.debug.GLContext.NoProfileAliasing'
      If true (default), bootstrapping the available GL profiles
      will use the highest compatible GL context for each profile,
      hence skipping querying lower profiles if a compatible higher one is found.
        Linux x86_64 - Nvidia: 28%,  700ms down to 500ms
        Linux x86_64 - AMD   : 40%, 1500ms down to 900ms

- GL*Impl:
  - make fields final: glProfile, _context, buffer*Tracker and glStateTracker
  - allow null _context/glProfile in initialization (bootstrapping)

- JoglVersion.getDefaultOpenGLInfo(..)
  - add arg: 'boolean withCapabilitiesInfo', allowing to suppres the list of caps

6 years agoFIX JOGL's index.html - Reminder to myself: Always check web pages befor pushing...
Sven Gothel [Thu, 5 Jul 2012 12:57:54 +0000 (14:57 +0200)]
FIX JOGL's index.html - Reminder to myself: Always check web pages befor pushing them :)

6 years agoGLContext adds FBO availability to profile mapping; Fix GL[Auto]Drawable/GLContext...
Sven Gothel [Thu, 5 Jul 2012 12:57:18 +0000 (14:57 +0200)]
GLContext adds FBO availability to profile mapping; Fix GL[Auto]Drawable/GLContext re-association (switch) incl. unit test.

- GLContext adds FBO availability to profile mapping

- GLContext added 'GLDrawable setGLDrawable(GLDrawable readWrite, boolean setWriteOnly)'
  allowing to set the write GLDrawable. This method enables switching context/drawable.

Fix GL[Auto]Drawable/GLContext re-association (switch) incl. unit test
  Commit eed8508ae1132e5f45f788e9cb3f3d5a1050ac70 impl. of GLAutoDrawable's setContext(..)
  enabled proper setting of the GLAutoDrawable context incl. updating the context's drawables.
  Test covers:
  - remove/set (GLContext, GLEventListener) of GL[Auto]Drawable
  - switch (GLContext, GLEventListener) of 2 GLAutoDrawables

6 years agoNEWT/KD Adapt to 'new' KD Window Creation API, use EGLConfig
Sven Gothel [Thu, 5 Jul 2012 12:32:48 +0000 (14:32 +0200)]
NEWT/KD Adapt to 'new' KD Window Creation API, use EGLConfig

6 years agoNativeWindow/Newt X11ErrorHandler enhancement / unification - don't throw exceptions...
Sven Gothel [Thu, 5 Jul 2012 12:32:00 +0000 (14:32 +0200)]
NativeWindow/Newt X11ErrorHandler enhancement / unification - don't throw exceptions. Handles also XAWT BadMatch X_SetInputFocus.

X11ErrorHandler code now dumps proper information about the opcode and error message and the running Java thread.

Having propery "nativewindow.debug.X11Util.XErrorStackDump" or "nativewindow.debug=all' set,
a stack trace is dumped.

Since the X11ErrorHandler may catch an XAWT error: BadMatch X_SetInputFocus,
we cannot throw an exception and better keep running.

6 years agoGLAutoDrawable* refinement of abstraction / generalization - API Change!
Sven Gothel [Wed, 4 Jul 2012 16:02:11 +0000 (18:02 +0200)]
GLAutoDrawable* refinement of abstraction / generalization - API Change!

- GLAutoDrawable (compat change - recompile):
  - 'void invoke(boolean wait, GLRunnable glRunnable)' -> 'boolean invoke(boolean wait, GLRunnable glRunnable)'
    Allows notifying caller whether the task has been executed or at least enqueued.

- GLAutoDrawable add 'GLEventListener removeGLEventListener(int index)'
  - This allow one to remove a specific GLEventListener and reusing it (return value).

- GLDrawableImpl remove 'destroy()' to favor 'setRealized(false)'
  - Using more common code of GLAutoDrawableBase, i.e. GLPbufferImpl can use defaultDestroyOp().
  - Removes redundancy of methods

- GLAutoDrawableBase/Delegate
  - better 'default' names to emphasize it's purpose, adding API doc

  - includes more generic functionality
    - defaultWindowDestroyNotify()
    - defaultDestroyOp()

  - TestGLAutoDrawableDelegateNEWT demonstrates a simple example w/ all window events handled.

- Fix TestParenting01cSwingAWT's threading use (gl disturbance thread)

6 years agoGLAutoDrawable: Refine API doc; Use new abstract impl. GLAutoDrawableBase (GLWindow...
Sven Gothel [Mon, 2 Jul 2012 17:42:52 +0000 (19:42 +0200)]
GLAutoDrawable: Refine API doc; Use new abstract impl. GLAutoDrawableBase (GLWindow, ..); Add new GLAutoDrawableDelegate.

- Refine API doc
  - 'void setContext(GLContext)' -> 'GLContext setContext(GLContext)'
  - Add note to createContext(GLContext) override

-Use new abstract impl. GLAutoDrawableBase, used by:
  - GLWindow
  - GLAutoDrawableDelegate
  - GLPbufferImpl

- Add new GLAutoDrawableDelegate incl. unit test

6 years agoTest case cleanup
Sven Gothel [Mon, 2 Jul 2012 17:24:16 +0000 (19:24 +0200)]
Test case cleanup

- Gears w/ 640x480 size and proper aspect ratio frustum
- query type of drawable.getNativeSurface() instead of auto-drawable itself
- RedSquareES2 allow setting no-rotation and aspect-ratio for frustum
- TestInitConcurrentNEWT: Don't use vsync

6 years agoFix Bug 597: XDisplayString(0) -> SIGSEGV; Handle n/a DISPLAY
Sven Gothel [Sat, 30 Jun 2012 13:44:55 +0000 (15:44 +0200)]
Fix Bug 597: XDisplayString(0) -> SIGSEGV; Handle n/a DISPLAY

It works now as follows:

Note: Remote connection tested using ssh to localhost or an actual remote

Test w/ proper X11 authentication, i.e. DISPLAY and xauth:

> cd projects/JOGL/jogl-bugs/597-headless/
> echo $DISPLAY

> xclock

T1.1 OK> java plop

T1.2 OK> java -Djava.awt.headless=true plop


Test _without_ proper X11 authentication, i.e. DISPLAY and xauth:

> xclock
No protocol specified
No protocol specified
Error: Can't open display: :0.0

T2.1 OK> java plop
No protocol specified
No protocol specified
Exception in thread "main" java.lang.InternalError: Can't connect to X11 window
server using ':0.0' as the value of the DISPLAY variable.
   (Stack trace from:
        GLProfile.initProfilesForDefaultDevices(..) ->
        NativeWindowFactory.initSingleton(..) ->
        sun.awt.X11.XToolkit.<clinit> ->
        sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)

T2.2 OK> java -Djava.awt.headless=true plop
No protocol specified
No protocol specified

6 years agoFix Bug #589 (JAWT Offscreen-Layer resize) and Offscreen-Layer setSwapInterval()...
Sven Gothel [Sat, 30 Jun 2012 03:14:34 +0000 (05:14 +0200)]
Fix Bug #589 (JAWT Offscreen-Layer resize) and Offscreen-Layer setSwapInterval() deadlock; Reuse JAWT instance; Cleanup

- Fixes
  - OSXUtil.CreateCALayer*(..): Pass layer target size (if known).
    This fixes Bug #589

  - MacOSXWindowSystemInterface-pbuffer.m:
     - ALL: displayLink NULL check

     - setSwapInterval(..): lock only for variable setting,
       could deadlock when start/stop CVDisplayLink

  - JAWTWindow.destroy(): use 'surfaceLock' instead of 'synchronized'

- Cleanup / Performance
  - JAWTWindow.lockSurface(): Reuse JAWT instance

  - MacOSXJAWTWindow: AttachJAWTSurfaceLayer0(..) -> SetJAWTRootSurfaceLayer0(..)
                      Reflects semantic better.

  - JAWTWindow.updateBounds(..) notify of bounds change

6 years agoJAWTUtil/MacOSXWindowSystemInterface-pbuffer: Cleanup / More DEBUG info
Sven Gothel [Sat, 30 Jun 2012 01:39:33 +0000 (03:39 +0200)]
JAWTUtil/MacOSXWindowSystemInterface-pbuffer: Cleanup / More DEBUG info

  - better local var names
  - one time init
  - add DEBUG trace
  - add offscreenLayer info

  - remove warning: access of protected vars from outside class
  - better local var names
  - more DEBUG info (pbuffer texture) git info: FAQ, tutorial and man pages.