| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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)
+++
|
|
|
|
|
|
|
| |
appropriately
Instead of using [mWin orderBack: mWin] for child windows,
utilize [mWin orderWindow: NSWindowOut relativeTo: [pWin windowNumber]]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
multiple instances in parallel
Tested on GNU/Linux x86_64,
Result: Plays well here audio and video, i.e. audio is actually mixed from both movies.
Even if one movie (below) stops and restarts (AL buffer reset),
it didn't crash.
+++
LIB_AV Codec : 54.92.100 [cc 54]
LIB_AV Format : 54.63.104 [cc 54]
LIB_AV Util : 52.18.100 [cc 52]
LIB_AV Resample: 1.0.1 [cc 1, loaded true]
LIB_SW Resample: 0.17.102 [cc 0, loaded true]
LIB_AV Device : [loaded true]
LIB_AV Class : FFMPEGv09Natives
+++
(enable MovieSimple in scripts/tests.sh)
bash scripts/tests-x64.sh -loop -windows 2 \
-urlN 0 http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_720p_surround.avi \
-urlN 1 http://video.webmfiles.org/elephants-dream.webm
+++
2 Streaming threads, i.e. decoder threads:
"Thread-5-StreamWorker_1" daemon prio=10 tid=0x00007f994c102000 nid=0x5826 in Object.wait() [0x00007f996fa37000]
at jogamp.opengl.util.av.GLMediaPlayerImpl$StreamWorker.run(GLMediaPlayerImpl.java:1231)
"Thread-4-StreamWorker_0" daemon prio=10 tid=0x00007f99600ed000 nid=0x5825 in Object.wait() [0x00007f996cd09000]
at jogamp.opengl.util.av.GLMediaPlayerImpl$StreamWorker.run(GLMediaPlayerImpl.java:1231)
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
capabilities to GLArrayDataServer and add unit tests
GLArrayDataServer:
- Add create*Mapped(..) variants for GPU mapped buffer usage
w/o client buffers.
- Fix API documentation (arguments)
- Fix 'addGLSLSubArray(..)'
- properly compute and pass 'subStrideB' in bytes to GLArrayDataWrapper ctor.
- Add 'mapStorage(..)' and 'unmapStorage(..)'
allowing to map the GPU buffer.
GLArrayDataWrapper:
- Fix getElementCount(): Consider stride in bytes and consider 'mappedElementCount'
- getSizeInBytes(): Consider 'mappedElementCount'
Tests:
- Use new GLBase methods, e.g. getBoundBuffer(..) instead of glGetBoundBuffer(..)
- TestMapBufferRead01NEWT: Validate GLBufferStorage (i.e. GLBufferObjectTracker)
- Add RedSquareMappedES2 using GPU mapped buffer
- Test w/ TestRedSquareES2NEWT, cmd-line 'mappedBuffers'
- GearsES1 and GearsES2: Add GPU buffer mapping mode for all test cases
- Add buffer validation mode, i.e. test whether GLBufferObjectTracker
works properly.
- Test w/ TestGearsES2NEWT, cmd-line 'mappedBuffers'
- TestSharedContextVBOES2NEWT0, TestSharedContextVBOES2NEWT3:
- Add GPU mapped buffers tests to validate GLBufferObjectTracker
code path with shared GLContext across multiple threads.
|
| |
|
|
|
|
| |
visibility helping robostness of test case.
|
|
|
|
| |
error / Add test method 'invokeAndWaitError(..)'
|
|
|
|
|
|
| |
'isVisible()' determining actual on-screen showing state
See commit 071bdd6ce9f8c41ccecdbf8bc74f276ccd7ff651
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Simplify JAWTComponentListener's HierarchyListener:
- Don't interfere w/ Component's visibility anymore!
This shall reduce sideeffects.
Utilize 'isShowing' in each Component specialization, i.e. GLCanvas.
- On SHOWING_CHANGED if a parent caused a change
of the tracked components showing state,
propagate it to the offscreen-layer!
- Remove all other complicated states!
GLCanvas, GLJPanel:
- Instead of 'isVisible()' use 'showing state',
since only the 'showing state' reflects 'true' visibility
throughout the hierarchy.
- Add HierarchyListener and track volatile showing state
to be used instead of 'isVisible'.
Using a cached showing state is more efficient
than quering 'isShowing()' all the time!
NewtCanvasAWT:
- Use 'isShowing()' instead of 'isVisible(), see above
|
|
|
|
| |
'grey', which is used for the filename
|
|
|
|
| |
.. shameless inspired by KDE's Oxgen scheme .. (they are best)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Conversion Utilities (Allowing 'arbitrary' PointerIcon data input)
Commit fe28bc125429b38cdcd016746081f4a6d521c6fd added the notion of toolkit agnostic PixelFormat and conversion utilities,
utilized and further tested by this patch.
+++
- PointerIcon is a PixelRectangle
and hence holds the decoded data.
This allows on-the-fly conversion if required
as well as recreation w/o PNG re-decoding.
- Using array-backed PointerIcon data where possible,
allowing better performance when converting PixelFormat etc.
- NEWT Display adds 'createPointerIcon(final IOUtil.ClassResources pngResource...'
method to support agnostic PointerIcon creation.
- NEWT Display adds methods to allow users to avoid PixelFormat and
Buffer NIO type forced conversion:
- PixelFormat getNativePointerIconPixelFormat()
- boolean getNativePointerIconForceDirectNIO()
+++
PNGImage -> PNGPixelRect
Deleted: com.jogamp.opengl.util.texture.spi.PNGImage
Added: com.jogamp.opengl.util.PNGPixelRect
(We hope nobody was using PNGImage directly since it was a service-plugin for TextureIO)
PNGPixelRect is a PixelRectangle
PNGPixelRect actually is implemented OpenGL agnostic,
however - since our PNGJ support lives under package 'jogamp.opengl.util.pngj'
it cannot be moved up (yet).
PNGPixelRect now handles all PixelFormat for the target format
and also added support for grayscale+alpha (2 channels).
The latter is force-converted to RGB* - similar to paletted.
Further more, PNGPixelRect allows simply passing an OutputStream to write the PNG data.
Used by: TextureIO and NEWT
+++
- OffscreenSurfaceLayer's setCursor(..) uses the agnostic PixelRectangle
instead of a PNG resource.
- AWTMisc uses the PixelRectangle to produce the AWT Cursor
and converts it to the required format.
Hence same pixels are used for NEWT and AWT pointer/cursor icon.
- TestGearsES2Newt and NewtAWTReparentingKeyAdapter 'tests'
iterate over 3 custom PointerIcon when pressed 'c'.
- JOGLNewtAppletBase uses the new custom PointerIcon
'newt/data/crosshair-lumina-trans-32x32.png', which is included in NEWT (213 bytes only).
-
|
|
|
|
|
|
|
|
|
|
| |
Utilities (Allowing 'arbitrary' PointerIcon data input)
To allowing 'arbitrary' PointerIcon data input, i.e. via raw pixels
we need to define an agnostic PixelFormat and required conversion utilities.
The latter is not hw accelereated (toolkit agnostic), but this shall be expected
and satisfying for small amount of 'pixels'.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
and Issues
- Refine Display.PointerIcon: Complete type allowing re-creation
- Add associated Display reference
- Add used IOUtil.ClassResources reference
- Add isValid()/validate() methods for recreation
- Refine API doc
- Move Display.destroyPointerIcon(PointerIcon) -> PointerIcon.destroy()
- Move DisplayImpl.PointerIconImpl -> PointerIconImpl (own source file)
- Creation/Destruction and setting of PointerIcon happens on EDT
- DisplayImpl.shutdownAll() and Display.destroy() calls destroyAllPointerIconFromList
- WindowDriver.setPointerIconImpl: Validates PointerIconImpl (i.e. re-creates if required)
- Fix 'initial' window.setPointerIcon(..) before createNative(..),
tested w/ TestGearsES2NEWT
- OSX Native Code:
- Move mouse and pointer-state handling from NewtMacWindow -> NewtView class
to retain states (pointer handle, pointer visibility, etc) when reparenting.
Reparenting will move an exisiting NewtView into a new NewtMacWindow.
- Enable all mouse move events:
- NewtView::mouseEnter [nsWin makeFirstResponder: nsView];
- NewtView::mouseExited if( !mouseConfined ) { [nsView resignFirstResponder]; }
- NewtView::mouseMoved issued [myCurser set] if required, fixing
OSX issue not updating NSCursor properly.
- MacWindow:
- Test NewtMacWindow, NewtView and NSCursor handles before usage
- Fix DBG_PRINT(..) warnings
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Pointer Icons
- Utilizing JOGL's PNG decoder for all icons, if available.
- Application/window icons:
- Providing default application/window icons in 16x16 and 32x32 size
- NewtFactory.setWindowIcons(..) or property 'newt.window.icons' maybe used to override default icons.
- Using icons at application/window instantiation
- Display.PointerIcons:
- NativeWindow Win32 WindowClass no more references a default cursor
in favor of fine grained cursor control [in NEWT]
- Display provides create/destroy methods,
where display destruction also releases open PointerIcon references.
- Window.setPointerIcon(..) sets custom PointerIcon
- Implemented Platforms
- X11
- Windows
- OSX
- Manual Test: TestGearsES2NEWT (Press 'c')
|
|
|
|
| |
~2 kB)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
GL4NeedsGL3Request not set
GL3 core version validation failed due to missing braces around 'isES' _and_ term,
where the latter consist out of 2 _or_ terms testing version mismatch.
On OSX we validate a GL3 core context first and expect it to return a GL4 version if available,
which in turn triggers the quirk GL4NeedsGL3Request.
This behavior was disabled due to above mentioned bug, where the unqual major version caused
the validation to fail.
TestGLProfile01NEWT: Fixed 'GL4ES3' test, where 'GL4ES3' is only available
if extension <code>GL_ARB_ES3_compatibility</code> is available as well.
|
|
|
|
| |
3d0ab3e6263dfdbb9dd0014443ad28b1c9b0c238
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Map ES2 -> ES3 GLProfile, if available
- EGLDrawableFactory: Don't query ES2 if ES3 is available
- Fix queries and get methods (GL, GLContext and GLProfile):
- glES3.isGLES2()==true and glES3.getGLES2()!=null
- ctxES3.isGLES2()==true,
- glES3Profile.isGLES2()==true
- Enhance Unit test: TestGLProfile01NEWT
- Test all GLProfile availability combinations
based on implementing GLProfile
- Test all GLProfile's isGL*()
based on highest GLProfile identity
- Test all GL's isGL*()
based on highest GL identity.
|
|
|
|
|
|
|
|
|
|
|
|
| |
attempt)
Commit c8726ef04b94ad8e66e1191a06ff793b908d130c reinforced ALWAYS_ON_TOP in native reconfig code
issued at reparenting call, which might be too early for the WM.
Perform ALWAYS_ON_TOP reinforcement from java side when reparenting CHILD -> TOP was successful
and visibility is reached. X11 only!
NewtAWTReparentingKeyAdapter: Add 'a' alwaysOnTop toggle to test w/o applet code.
|
|\
| |
| | |
Fix Bug 362: calculated dimensions for MipMaps smaller than 16x16
|
| |
| |
| |
| |
| | |
Added method to calculate mipmap blocksize for uncompressed and DXTn
images
|
| |
| |
| |
| |
| |
| | |
(camera or other sources may not have duration)
Regression of commit 8a8ed735f6631b2da7bf605c5c3dda4e0fc13905
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
; Fallback for EOS Detection ; MovieSimple uses full GLEventListener for 'Audio Only' as well to test seek
Determine StreamWorker usage after init
- To support audio only files, we need to determine to use StreamWorker
after completion of stream-init.
Fix seek(..)
- FFMPeg: pos0 needs to use aPTS for audio-only
- Clip target time [0..duration[
Fallback for EOS Detection
In case the backend does not report proper EOS:
- Utilize 'nullFramesCount >= MAX' -> EOS,
where MAX is number of frames for 3s play duraction
and where 'nullFramesCount' is increased if no valid packet is available
and no decoded-video or -audio in the queue.
- Utilize pts > duration -> EOS
MovieSimple uses full GLEventListener for 'Audio Only' as well to test seek
- Matroska seek for audio-only leads to EOS ..
http://video.webmfiles.org/big-buck-bunny_trailer.webm
- MP4 audio-only seek works
http://download.blender.org/peach/bigbuckbunny_movies/BigBuckBunny_320x180.mp4
MovieSimple/MovieCube:
- Use audio-pts in audio-only to calc target time
Tested:
- A, V and A+V
- Pause, Stop and Seek
- GNU/Linux
|
|
|
|
| |
REPARENT_HINT_BECOMES_VISIBLE to ensure GL State Preservation ; Add unit test !
|
|
|
|
|
|
|
|
|
|
|
|
| |
REPARENT_HINT_BECOMES_VISIBLE hint via new method variant using hints; Deprecate other reparentWindow(..) variants w/o hints.
NEWT Window.reparentWindow(..): Provide REPARENT_HINT_BECOMES_VISIBLE hint via new method variant using hints:
- Add REPARENT_HINT_FORCE_RECREATION, covering 'old' forceDestroyCreate boolean argument
- Add REPARENT_HINT_BECOMES_VISIBLE, Claim window becomes visible after reparenting, which is important for e.g. preserving the GL-states in case window is invisible while reparenting.
Deprecate other reparentWindow(..) variants w/o hints.
Use only new variant using hints w/o semantical change.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Platform.currentTimeMicros() for accuracy
ReflectionUtil usage:
TestShutdownCompleteNEWT -wait -initOnly
Hotspots:
- MakeCurrent 5.3% - Called 52 times
- ClassLoader.findClass(..) 3.1% - Called 486 times .
- ReflectionUtil: 13 times ~ 0.3%
|
|
|
|
| |
considered in AWTTilePainter: 'Origin of GL image is still on Bottom'
|
|
|
|
|
|
|
| |
matrix scaling instead of MODELVIEW rotation ...
'User Vertical Flip' for GLJPanel shall be performed via PROJECTION matrix scaling instead of MODELVIEW rotation
to simplify workflow, and to remove artifacts w/ tiled printing.
|
|
|
|
| |
8512777873461ee33d8ed913ee26bafc00a08a02
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Clogged Key-Release Event by AWT Robot
Impact: Only unit test code
- TestNewtKeyCodesAWT:
Fix Bug 919 - Move mouse bacl/forth while waiting for events ..
- Use common wait for key timeout/polling using constants in NEWTKeyUtil
- InputEventCountAdapter:
'getQueued()' -> 'copyQueue()' - ensuring queue is copied while instance is locked.
|
|
|
|
| |
decode proper file-scheme if applicable - otherwise encoded ASCII URI.
|
|
|
|
| |
9310b11b2b6e1e89fa5ed9b8de26e56ff6a6b262): Test start/stop balance.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Test is online @ http://jogamp.org/deployment/test/bug910/
Test validates the state of the added component:
TC1 - addNotify() and removeNotify() has been called from AWT-EDT.
TC2 - removeNotify() is not called before Applet.destroy()
Test also validates the Applet state:
TA1 - isActive()
TA2 - init count
TA3 - start count
TA4 - stop count
TA5 - destroy count
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
NW.getLocationOnScreen(..) for X11 and Windows ; Allow unit test to run on all platforms.
- Reuse SWTAccessor.isOS_TYPE (public now)
- Impl NW.getLocationOnScreen(..) for X11 and Windows reusing existing native code
- Allow unit test to run on all platforms.
Note: NewtCanvasSWT unit tests require a 'wait for realized' while SWT dispatching.
Otherwise the 'sash unit test' will fail since realiziation happens later, at least on X11.
Hence extended AWTRobotUtil.waitForRealized(..) to use a 'waitAction'
which is used here w/ special SWT dispatch Runnable.
AWTRobotUtil.waitForRealized(..) operates on time-delta instead of iteration-counter,
allowing above 'waitAction' Runnable.
AWTRobotUtil.waitForRealized(..) removed 2nd 'glad.isRealized()' loop ..
|
|
|
|
| |
get picked up by our unit test run
|
|
|
|
|
|
|
|
|
|
|
| |
The NewtCanvasSWT is now brought into place by the parent SWT Composite
and the super SWT Canvas it extends. Also added two test cases. One with
a simple SashForm and the NewtCanvasSWT in the second cell, and another
with the NewtCanvasSWT in a Composite, that Composite now in the second
cell of the SashForm. The second test is necessary because the
NewtCanvasSWT does not receive SWT.Resize events in this configuration,
but only SWT.Paint ones (a behaviour inherited from the super SWT
Canvas)
|
|
|
|
|
|
|
|
|
|
|
|
| |
AWTGLPixelBuffer
GLJPanel must validate whether it's local BufferedImage's DataBuffer is sourced
by the current singleton AWTGLPixelBuffer.
Case:
GLJPanel-B has created a new singleton AWTGLPixelBuffer w/ increased size.
Previous created GLJPanel-A's local BufferedImage's DataBuffer is no more sourced
by the singleton AWTGLPixelBuffer and hence must be re-created.
|
| |
|
|
|
|
| |
to fix event validation for offscreen mode (OSX/CALayer)
|
|
|
|
| |
Consume AWT KeyEvents in downstream mode; Test respects 'consumed' key events.
|
|
|
|
| |
for key events); Allow AWTAdapter to be lazily setup w/ downstream object.
|
|
|
|
|
|
|
|
|
| |
when in offscreen-mode (OSX/CALayer)
NewtCanvasAWT.FocusAction must take focus when in offscreen-mode (OSX/CALayer)
since the NEWT window _is_ offscreen (no input events) and AWT events are translated to NEWT.
Regression of commit 0be87f241c0f0b2f5881d9a602ce12378b8e453d
|
| |
|
| |
|