SuccessChanges

Summary

  1. Bug 970: NEWT OSX ChildWindow setVisible(..) does not hide child window (details)
  2. Bug 972 - Reduce ClassLoader Lookup, i.e. Class.forName(..): GLProfile, (details)
  3. Bug 973: NativeWindowFactory: Needs service provider interface (SPI) for (details)
  4. Bug 973: NativeWindowFactory: Needs service provider interface (SPI) for (details)
  5. TextureIO: Support PNGTextureWriter w/ TextureData IntBuffer (via (details)
  6. Bug 962 - AWTGLReadBufferUtil should use aligned BufferedImage [for (details)
  7. TextureIO: Fix PNGTextureWriter Vertical-Flip, i.e. pass TextureData's (details)
  8. Bug 974 - Add missing [GL4] glMultiDrawArraysIndirect(int mode, int (details)
  9. SurfaceUpdatedListener: Order methods in impl. Class; (details)
  10. Bug 975 - GLJPanel's OffscreenDrawable shall not double swap (custom (details)
  11. GLPixelStorageModes: Safe and restore GL2ES3 modes, i.e. add missing (details)
  12. GLReadBufferUtil: Set PACK_ROW_LENGTH for ES3 as well - also set (details)
  13. Bug 975 - GLJPanel's OffscreenDrawable shall not double swap - Use (details)
  14. Bug 927 - Multithreading (MT) issues with ALAudioSink (openal-soft) (details)
  15. doc/HowToBuild.html: Complete Debian package list, add note on multiarch (details)
Commit c3c204a2e374c1dc4c1fb51f15444e5b92850839 by Sven Gothel
Bug 970: NEWT OSX ChildWindow setVisible(..) does not hide child window appropriately

Instead of using [mWin orderBack: mWin] for child windows,
utilize [mWin orderWindow: NSWindowOut relativeTo: [pWin windowNumber]]
The file was modifiedsrc/newt/native/MacWindow.m (diff)
The file was modifiedsrc/test/com/jogamp/opengl/test/junit/newt/parenting/TestParenting01NEWT.java (diff)
Commit c5964bf2e3ebd6e05a7d551b033355c21ca9eea9 by Sven Gothel
Bug 972 - Reduce ClassLoader Lookup, i.e. Class.forName(..): GLProfile, GLContextImpl, DisplayImpl

GLProfile, GLContextImpl:
  - ReflectionUtil.DEBUG_STATS_FORNAME: Dump forName stats if set
  - Cache GL*Impl and GL*ProcAddressTable Constructor<?> for GLContextImpl's createInstance(..)
  - Remove off-thread early classloading thread which only adds complications

DisplayImpl:
  - Remove one redundant availability test
The file was modifiedmake/scripts/tests.sh (diff)
The file was modifiedmake/scripts/tests-win.bat (diff)
The file was modifiedsrc/jogl/classes/javax/media/opengl/GLProfile.java (diff)
The file was modifiedsrc/newt/classes/jogamp/newt/DisplayImpl.java (diff)
The file was modifiedsrc/jogl/classes/jogamp/opengl/GLContextImpl.java (diff)
The file was modifiedmake/scripts/tests-x64-dbg.bat (diff)
Commit 84930529068062d29d48924b37953ecb1ee30bdd by Sven Gothel
Bug 973: NativeWindowFactory: Needs service provider interface (SPI) for TK specific implementations (Scaling)

Add FIXME note ..
The file was modifiedsrc/nativewindow/classes/javax/media/nativewindow/NativeWindowFactory.java (diff)
Commit 0666a9ee8332e8ab59d533c65552dae8c58cf267 by Sven Gothel
Bug 973: NativeWindowFactory: Needs service provider interface (SPI) for TK specific implementations (Scaling)
The file was modifiedsrc/nativewindow/classes/javax/media/nativewindow/NativeWindowFactory.java (diff)
Commit 21b68a5e73a672da34b37b5641b779aa1e3fa41d by Sven Gothel
TextureIO: Support PNGTextureWriter w/ TextureData IntBuffer (via PNGPixelRect and PixelFormatUtil)

TextureData IntBuffer could be caused by AWT read-pixels
but is not seamlessly supported via PNGPixelRect since the latter
uses a hardcoded ByteBuffer.

Add static PNGPixelRect.write(..) supporting IntBuffer
to support this case for now.
PNGPixelRect instances do not support any Buffer type to avoid
a bloated implementation.

PixelFormatUtil adds support for int32 pixel format conversion.
The file was modifiedsrc/jogl/classes/com/jogamp/opengl/util/texture/TextureIO.java (diff)
The file was modifiedsrc/jogl/classes/com/jogamp/opengl/util/PNGPixelRect.java (diff)
The file was modifiedsrc/nativewindow/classes/javax/media/nativewindow/util/PixelFormatUtil.java (diff)
Commit 1d2515da352a79c239efecdfa3e0fade47779781 by Sven Gothel
Bug 962 - AWTGLReadBufferUtil should use aligned BufferedImage [for resized images]; Fix GLReadBufferUtil GL_PACK_ROW_LENGTH

AWTGLPixelBuffer is being reused when used via AWTGLPixelBufferProvider
even when resized.

AWTGLPixelBufferProvider uses  GLPixelBufferProvider's requiresNewBuffer(..)
which returns true if
  - allowRowStride==true and pixel-buffer size < required-size, or
  - allowRowStride==false and pixel-buffer size < required _or_ width doesn't match

otherwise it returns true, i.e. the AWTGLPixelBuffer is reused.

Hence the used BufferedImage might need to be aligned,
i.e. using AWTGLPixelBuffer's getAlignedImage(..).

+++

GLReadBufferUtil shall use current texture-data width for GL_PACK_ROW_LENGTH,
not the static GLPixelBuffer's width, which may not reflect image dimension (resize)

+++
The file was addedsrc/test/com/jogamp/opengl/test/junit/jogl/awt/TestGLJPanelResize02AWT.java
The file was modifiedmake/scripts/tests.sh (diff)
The file was modifiedsrc/jogl/classes/com/jogamp/opengl/util/GLReadBufferUtil.java (diff)
The file was modifiedsrc/jogl/classes/com/jogamp/opengl/util/awt/AWTGLReadBufferUtil.java (diff)
The file was modifiedmake/scripts/tests-win.bat (diff)
The file was modifiedsrc/jogl/classes/com/jogamp/opengl/util/GLPixelBuffer.java (diff)
Commit 8631e403aa0c02c53b06819ef9b112af1885d4f7 by Sven Gothel
TextureIO: Fix PNGTextureWriter Vertical-Flip, i.e. pass TextureData's getMustFlipVertically() to PNGPixelRect
The file was modifiedsrc/jogl/classes/com/jogamp/opengl/util/texture/TextureIO.java (diff)
Commit 325986eb0b14e90d9ef35cbb0ca57c9c91df4827 by Sven Gothel
Bug 974 - Add missing [GL4] glMultiDrawArraysIndirect(int mode, int type, long indirect_offset, int drawcount, int stride)
The file was modifiedmake/config/jogl/gl-common.cfg (diff)
The file was modifiedmake/config/jogl/gl-common-gpubufferonly.cfg (diff)
The file was modifiedmake/config/jogl/gl4bc-common-cpubufferJavaCode.java (diff)
Commit 8be9d9b5bd71854f4da15294b47125a8a4975e31 by Sven Gothel
SurfaceUpdatedListener: Order methods in impl. Class; SurfaceUpdatedListener: Mark methods final, use volatile 'isEmpty' to bail out early @ surfaceUpdated.
The file was modifiedsrc/nativewindow/classes/com/jogamp/nativewindow/awt/JAWTWindow.java (diff)
The file was modifiedsrc/newt/classes/com/jogamp/newt/opengl/GLWindow.java (diff)
The file was modifiedsrc/nativewindow/classes/jogamp/nativewindow/SurfaceUpdatedHelper.java (diff)
The file was modifiedsrc/newt/classes/jogamp/newt/WindowImpl.java (diff)
Commit 908ebd99d1eb57ce773a1fdd67c76886da86b9e6 by Sven Gothel
Bug 975 - GLJPanel's OffscreenDrawable shall not double swap (custom swap by GLEventListener using [AWT]GLReadBufferUtil)

When utilizing [AWT]GLReadBufferUtil it is usually desired to read from the front-buffer
instead the back-buffer. The latter may not be defined, e.g. when using MSAA.

A GLEventListener utilizing [AWT]GLReadBufferUtil,
must perform the drawable.swapBuffers() to be able to read from the front-buffer.

Usually GLAutoDrawable.setAutoSwapBuffer(false) should be called here,
to avoid a double swap - however GLJPanel does not support toggling auto-swap
since it requires to control swap for it's own read-pixels.

Remedy for GLJPanel:
  - GLJPanel issues helper.setAutoSwapBufferMode(false) - immutable

  - Enable GLJPanel.swapBuffer() if initializes
    This was previously disabled.

  - GLJPanel's OffscreenBackend listens to  surfaceUpdated,
    to be notified whether postGL needs to swap buffer
    or the drawable.swapBuffer() was already called between preGL and postGL.

See unit tests adding/removing a snapshot GLEventListener
performing swapBuffers() and setting auto-swap accordingly.
The file was modifiedsrc/jogl/classes/javax/media/opengl/awt/GLJPanel.java (diff)
The file was addedsrc/test/com/jogamp/opengl/test/junit/jogl/acore/GLReadBuffer00Base.java
The file was addedsrc/test/com/jogamp/opengl/test/junit/jogl/acore/TestGLReadBuffer01GLWindowNEWT.java
The file was modifiedmake/scripts/tests.sh (diff)
The file was removedsrc/test/com/jogamp/opengl/test/junit/jogl/awt/TestGLJPanelResize02AWT.java
The file was addedsrc/test/com/jogamp/opengl/test/junit/jogl/acore/TestGLReadBuffer01GLJPanelAWT.java
The file was modifiedmake/scripts/tests-win.bat (diff)
Commit d55fa82fe6f236523dd4f701a15057b1a0ca8e36 by Sven Gothel
GLPixelStorageModes: Safe and restore GL2ES3 modes, i.e. add missing GLES3 modes. GLStateTracker: Use proper GL names for enums
The file was modifiedsrc/jogl/classes/jogamp/opengl/GLStateTracker.java (diff)
The file was modifiedsrc/jogl/classes/com/jogamp/opengl/util/GLPixelStorageModes.java (diff)
Commit fb12b0b6fa37d3a4136bb04597b3c32b15832c82 by Sven Gothel
GLReadBufferUtil: Set PACK_ROW_LENGTH for ES3 as well - also set ReadBuffer to default.
The file was modifiedsrc/jogl/classes/com/jogamp/opengl/util/GLReadBufferUtil.java (diff)
Commit 82f679b064784213591b460fc5eaa1f5f196fbd1 by Sven Gothel
Bug 975 - GLJPanel's OffscreenDrawable shall not double swap - Use default auto-swap mechanims

Refines commit 908ebd99d1eb57ce773a1fdd67c76886da86b9e6

Note that the test case decide whether to auto-swap (after read-pixels)
or not auto-swap (manual swap before read-pixels).

See UITestCase.swapBuffersBeforeRead(GLCapabilitiesImmutable chosenCaps):
   Determines whether the chosen GLCapabilitiesImmutable requires a swap-buffers before reading pixels.

   Usually one uses the default-read-buffer, i.e. GL.GL_FRONT for single-buffer
   and GL.GL_BACK for double-buffer GLDrawables
   and GL.GL_COLOR_ATTACHMENT0 for offscreen framebuffer objects.
   Here swap-buffers shall happen after calling reading pixels, the default.

   However, multisampling offscreen GLFBODrawables utilize swap-buffers to downsample
   the multisamples into the readable sampling sink.
   In this case, we require a swap-buffers before reading pixels.

   Returns:  chosenCaps.isFBO() && chosenCaps.getSampleBuffers()

+++

- GLJPanel:
  - Remove SurfaceUpdatedListener mechanism in favor of
    default auto-swap-buffer via GLDrawableHelper.
    This removes complexity.

  - postGL does not need to perform explicit swapBuffer operation,
    but rely on GLDrawableHelper and the default mechanism.
    This is also compatible w/ J2D backend.

  - Use GLDrawableHelper for setAutoSwapBufferMode(..) and getAutoSwapBufferMode()

+++

UnitTests:

- UITestCase:
  - Add 'boolean swapBuffersBeforeRead(GLCapabilitiesImmutable chosenCaps)'
    to determine whether swapBuffers() must occure before read-pixels. See above.

- GLReadBuffer00Base*
  - remove explicit addSnapshotGLEL/removeSnapshotGLEL

  - add TextRendererGLEL, to display frame-count and -dimension

  - SnapshotGLEL*
    - simply toggle auto-swap in their init(..) and dispose(..) method!

    - clear back-buffer if 'swapBuffersBeforeRead'
      to test whether the right buffer is being used for read-pixels.
The file was modifiedsrc/test/com/jogamp/opengl/test/junit/jogl/acore/TestGLReadBuffer01GLWindowNEWT.java (diff)
The file was modifiedsrc/test/com/jogamp/opengl/test/junit/util/UITestCase.java (diff)
The file was modifiedsrc/jogl/classes/javax/media/opengl/awt/GLJPanel.java (diff)
The file was modifiedmake/scripts/tests.sh (diff)
The file was modifiedsrc/test/com/jogamp/opengl/test/junit/jogl/acore/GLReadBuffer00Base.java (diff)
The file was modifiedsrc/test/com/jogamp/opengl/test/junit/jogl/acore/TestGLReadBuffer01GLJPanelAWT.java (diff)
Commit 938fbc9e4cb58c1ab6a6f66f128189ed7b634955 by Sven Gothel
Bug 927 - Multithreading (MT) issues with ALAudioSink (openal-soft)

- Using update openal-soft (commit 7297c3214a4c648aaee81a9877da15b88f798197)

- Analyzed openal-soft threading issues:
  - a global-lock would have removed the issue

  - turns out that using ALC_EXT_thread_local_context's alcSetThreadContext(..)
    instead of alcMakeContextCurrent(..) solves the issue

- Cleaned up al*GetError() queries and handling

- Simplified flush/dequeue buffers
The file was modifiedsrc/jogl/classes/jogamp/opengl/openal/av/ALAudioSink.java (diff)
The file was modifiedmake/scripts/tests.sh (diff)
Commit 1638fb3e80a1102670b5d216647ee6fce0031d7f by Sven Gothel
doc/HowToBuild.html: Complete Debian package list, add note on multiarch packages
The file was modifieddoc/HowToBuild.html (diff)