| Commit message (Collapse) | Author | Age | Files | Lines |
|\ |
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
EGLDrawableFactory: Validate static EGL func-ptr, probe EGL/ES2 first
- Move EGL to public package
jogamp.opengl.egl.EGL -> com.jogamp.opengl.egl.EGL
- EGLDrawableFactory
- Validate static EGL func-ptr against EGL/ES2,
ignoring EGL/[ES|GL] collisions w/ diff. native EGL implementations
due to static EGL usage.
- Probe EGL/ES2 first
|
| | |
|
| |
| |
| |
| | |
createSurfacelessImpl(..) implementations
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- Bug 1102: GLJPanel.setSurfaceScale(..)
Allow setting non-initialized GLJPanel surface scale.
TODO: More tests and probing before initialization.
- SurfaceSize.hashCode()
Resolution's hash code is already multiplied.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
framebuffer (Part 2); Bug 896: EGL_KHR_create_context (Part 1)
Bug 1068 - Allow GLContext creation and makeCurrent without default framebuffer (Part 2)
Implement surfaceless context on EGL and GLX/X11
utilizing *UpstreamSurfacelessHook as introduced in
commit 9ea218a5990b908e04235c407c0951c60df6ffba.
Surfaceless context is probed during GL profile probing by default.
If available, it will be used for offscreen FBO drawables.
If probing fails, or is disabled,
the new GLRendererQuirks.NoSurfacelessCtx is set.
- GLProfile.disableSurfacelessContext disables
surfaceless context probing, set property 'jogl.disable.surfacelesscontext'
Tested:
- Mesa/EGL works,
- Mesa + NVidia w/ GLX fail on GNU/Linux): Fails NoSurfacelessCtx
- TODO: Windows impl. and more tests
+++
Bug 896: EGL_KHR_create_context (Part 1)
- Detect EGL_KHR_create_context capability and utilize if available.
- Implement EGLContext.createContextARBImpl(..),
allowing native DEBUG context usage, where available.
- EGL implements SharedResourceRunner, i.e. probing profiles
on dedicated thread using common interface.
- Probe desktop profile/context ability
in EGLDrawableFactory SharedResourceRunner,
Where EGLGLnDynamicLibraryBundleInfo covers EGL + desktop GL.
- TODO: Tests w/ capable implementation
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
'Surfaceless Upstream Surface'
Preparation for Bug 1068: GLContext creation and makeCurrent without default framebuffer
- Unify EGL surface related code in EGLSurface
- EGLWrappedSurface -> EGLSurface,
which utilizes a more straight forward
foreign upstream surface (X11, GDI, ..) to EGL mapping.
This also addresses Bug 1096, i.e. EGL Cleanup.
- Add notion of 'Surfaceless Upstream Surface'
- Add surfaceless 'fake' upstream surface hooks:
- EGLUpstreamSurfacelessHook
- X11UpstreamSurfacelessHook
Utilizing the ProxySurface option bit 'OPT_UPSTREAM_SURFACELESS'
signaling usage of 'no surface'.
- Add GLDrawableFactoryImpl.createSurfacelessImpl(..)
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
DirectDataBufferInt/BufferedImageInt
- PixelFormat
Refine definition allowing complete format conversion by its attributes
instead of static 'knowledge'.
- PixelFormat has_a *new* PixelFormat.Composition
- PixelFormat.Composition contains all pixel component layout
information as required for inspection and conversion.
Component names are enumerated via PixelFormat.CType.
- PixelFormatUtil.convert(..) utilizes generic conversion
based on PixelFormat.Composition rather static type mapping.
However, a int32 RGBA static conversion is still supported for performance.
Utilizes Bitstream for varying pixel component bit-width.
- Complete w/ hashCode() and equals(..)
- GLPixelBuffer
- Take 'pack' mode into account when determine GLPixelAttributes,
i.e. on GLES pack=true (e.g. glReadPixel) only RGBA is guaranteed to work.
Hence querying GLPixelAttributes requires the GLProfile, PixelFormat and pack mode.
- Complete GLPixelAttributes conversions from PixelFormat or GL format/data-type,
while taking GL data-type into account, as well as pack-mode.
- Complete w/ hashCode() and equals(..)
- SingletonGLPixelBufferProvider queries singleton GLPixelBuffer via
- PixelFormat.Composition hostPixelComp,
- GLPixelAttributes pixelAttributes,
- boolean pack
which comprise a unique key, allowing the implementation to utilize
a hash map. This is implemented in AWTSingletonGLPixelBufferProvider.
This allows distinct singleton GLPixelBuffer for different
host PixelFormat (conversion) and GLPixelAttributes (depending on GLProfile).
- Removes field 'componentCount' which was 'hacked in' to pass
information about an optional host memory layout.
Implementations utilizing conversion, e.g. AWTGLPixelBuffer,
can implement GLPixelBufferProvider's
'PixelFormat.Composition getHostPixelComp(final GLProfile glp, final int componentCount)'
and manage such implementation details, see use-case GLJPanel.
- DirectDataBufferInt/BufferedImageInt: Expose underlying NIO ByteBuffer
- AWTMisc.createCursor(..) uses DirectDataBufferInt.BufferedImageInt exposed
NIO ByteBuffer, allowing to use generic PixelFormatUtil.convert(..).
|
| |
| |
| |
| | |
9e13e8c78ed69bb7afcd49abe8bf69340dc06223
|
| |
| |
| |
| |
| |
| | |
FBObject: Remove redudant case
GLBase: Add API doc reference to GLContext implementation
|
| | |
|
| |
| |
| |
| | |
mis-interpretation alike Version130 -> [ 1.3.0 | 1.30.0 ] ?
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
if zNear == zFar
throws GLException with GL_INVALID_VALUE if zNear is <= 0, or zFar < 0,
or if left == right, or bottom == top, or zNear == zFar
Add note on callers:
- FloatUtil.makePerspective(..)
- Matrix4.*
- PMVMatrix.*
- ProjectFloat.*
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1.2 (Version110 and Version120 are for 1.10 and 1.20 GLSL)
Following commit introduced the wrong version usage, where a comparison w/ 1.1 and 1.2 was intended.
Commit 6363fccee219ce238b0b2ded39c116e2bc8613d5
GLBuffers.sizeof(..): Add support for ES3, reading supported glPixelStorei states
Commit 73a4d809f92126228b64a3bded75686db806be64
Don't utilize glPixelStorei's PACK/UNPACK IMAGE_HEIGHT and SKIP_IMAGES for Desktop GL < 1.2, avoiding GL-Error
Commit f358c49418e95c622d50eb29f53c60dc4dbdee5b
Bug 1047 - jogamp.opengl.glu.mipmap.Mipmap now uses already parsed GL version number and GL profile selection
|
| |
|
| |
|
|
|
|
|
|
| |
bd24599b21f9787ac989e65b44dc1ba762162f22
- add missing PrivilegedAction around tempFile[0].delete()
|
|
|
|
| |
FontFactory.get(..) exception, we cannot recover in this demo
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
objects if GLRendererQuirks.NeedSharedObjectSync is set.
GLSharedContextSetter#synchronization GL Object Synchronization
Usually synchronization of shared GL objects should not be required,
if the shared GL objects are created and immutable before concurrent usage.
However, using drivers exposing GLRendererQuirks.NeedSharedObjectSync
always require the user to synchronize access of shared GL objects.
Synchronization can be avoided if accessing the shared GL objects
exclusively via a queue or com.jogamp.common.util.Ringbuffer,
see GLMediaPlayerImpl as an example.
+++
GLRendererQuirks.NeedSharedObjectSync is set for all OSX versions
+++
Handle GLRendererQuirks.NeedSharedObjectSync in user code!
+++
All shared context tests passed on OSX 10.9.5,
and GNU/Linux w/ Nvidia + Mesa/AMD driver.
|
| |
|
|
|
|
| |
info-string creation; MacOSXCGLContext: Fix intendation
|
| |
|
|
|
|
| |
readability (140 chars width)
|
|\ |
|
| |
| |
| |
| | |
consistent, adds a method to convert an attribute list into a capabilities object with no check in order to display some information about skipped capabilities objects and fixes a NullPointerException when skipping a capabilities object
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
size panel size
This is a regression due to commit 84f367a73c5b16dcebfd877e82e1c2cb90ae74ce:
GLJPanel Cleanup: Remove initial FBO reshape;
** Propagate reshape only if differs from panel-size; ** <- this one
Use pre-fetched panel-size.
Above commit only issued 'sendReshape'
if the reshape-size differs from the actual panel-size.
Note: The reshape-size is propagated to panel-size either in
[1] initializeBackendImpl(..) or
[2] handleReshape(..) @ paintComponent.
While printing w/ an invisible GLJPanel the reshape-size
has not yet propagated to the panel-size (see above)
and two consecutive reshape calls will cause the last one to be dropped.
With this patch we have:
GLJPanel.addNotify()
GLJPanel.reshape.0 null resize [paint] [ this 0x0, pixelScale 1x1, panel 560x420] -> 0x0 * 1x1 -> 0x0, reshapeSize 0x0
GLJPanel.reshape.0 null resize [paint] [ this 560x420, pixelScale 1x1, panel 560x420] -> 560x420 * 1x1 -> 560x420, reshapeSize 560x420
GLJPanel.setupPrint: scale 1.000000 / 1.000000, samples 0, tileSz -1 x -1
GLJPanel.createAndInitializeBackend.1: [printing] 560x420 @ scale 1x1 -> 560x420 @ scale 1x1
A
|
|/
|
|
| |
regression during print
|
|
|
|
|
|
| |
(GLRendererQuirks.NoPBufferWithAccum): Accum buffer allowed if !usePBuffer; Avoid NPE.
99f91f8b28d42cdf341533736e878056bcae4708
|
|\ |
|
| | |
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
software/hardware attribute of all profiles
GLProfile's mapping code does not consider the following combination:
- GL4 software
- GL3 hardware
and hence maps GL4-software -> [GL2ES2, GL2GL3],
where GL3-hardware -> [GL2ES2, GL2GL3] is desired.
This combination has recently been observed on
Mac OSX 10.9.5, which includes a software GL 4.1 implementation.
However, other systems could be affected as well.
+++
Fix GLProfile.computeProfileImpl(..):
Only use the higher profile, if hardware-accelerated or none of the
lower profiles offers hardware-acceleration!
This extra condition was missing for certain profiles,
e.g. GL4, GL4bc, GL3, GL3bc and GL2.
Conflicts:
make/scripts/tests.sh
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
initializeBackendImpl()
Commit 84f367a73c5b16dcebfd877e82e1c2cb90ae74ce removed utilization of reshape-size
in case panel-size is valid, even if a reshape event happened in between:
- addNotify
- paintComponent
initializeBackendImpl() includes now uses reshape-size IFF handleReshape is set.
Before it was using reshape-size only if panel-size was invalid.
TestAWT03GLJPanelRecreate01 covers this issue.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
if Offscreen-GLAD Realization throws an Exception (Stability)
- GLDrawableFactoryImpl: createOffscreenDrawable(..) and createDummyAutoDrawable(..)
Temporary catch exception during setRealized(true) of newly created GLDrawable,
to unrealize the instance before propagating the exception.
This handling removes a memory leak in case the exception of this method is handled
and application continues to operate, e.g. as in AWTPrintLifecycle.setupPrint().
The underlying drawable gets unrealized, since it's setRealized(boolean)
implementation toggles its realize-state before delegating the realize-operation.
Hence this is functional.
- AWTPrintLifecycle.setupPrint() Stability
Catch exception thrown by factory.createOffscreenAutoDrawable(..)'s setRealize(true)
to continue operation w/ onscreen GLAD.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
628509b39ea7c16210315d191860511d6be4aa69)
FontFactory Remove:
- Font get(final URLConnection conn)
- Font get(final InputStream stream)
FontFactory Add:
- [1] Font get(final InputStream stream, final int streamLen, final boolean closeStream)
- Direct usage of font InputStream w/ determined length,
may instantiate BufferedInputStream in case given stream
doesn't support mark/reset!
- [2] Font get(final InputStream stream, final boolean closeStream)
- Copy font InputStream w/o determined length,
resulting in BufferedInputStream supporting mark/reset!
Security Related:
- Only perform priviledged code on determine InputStream,
_not_ when parsing the font stream itself!
- Hence PrivilegedAction only happens in FontFactory's
InputStream preparation.
Misc:
- Use Uri class
|
|\ |
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
546f9b1a03c46b63f8bb18c1b8e2c80a8b66cf7c)
- GLFBODrawable:
- Remove FBOMODE_DEFAULT
- GLRendererQuirks:
- Remove COUNT
- Add getCount() method for future compatibility.
- Animator
- Hide local fields (private or package private)
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Refines commit cef7ba607ad7e8eb1ff2a438d77710a29aa0bda6
- The animator monitor-lock was still hold in the post finally block
issuing flushGLRunnables(), due to intrinsic monitor release (in finally):
- <http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.11.10>
- <http://stackoverflow.com/questions/10743285/behavior-of-a-synchronized-method-with-try-and-finally>
- Further: AnimatorBase.flushGLRunnables() acquired the lock itself (duh!)
This commit removes the requirement for finally altogether
by simply return a boolean from handleUncaughtException(caughtException),
where false denotes the caller to propagate the exception itself (no handler).
Post synchronized block then issues flushGLRunnables() and
exceptation propagation as required.
AnimatorBase.flushGLRunnables() 'synchronized' modifier is removed.
Further, ThreadDeath is being propagated if caught.
Here the finally block is also removed - redundant.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- GLContextImpl.setRendererQuirks(..) in called in GLContextImpl.setGLFunctionAvailability(..)
- GLContextImpl.setRendererQuirks(..) was called before fixing CTX_IMPL_ACCEL_SOFT
via isCurrentContextHardwareRasterizer().
The latter set CTX_IMPL_ACCEL_SOFT based on known software renderer string within GL_RENDERER.
This lead to incorrect hwAccel assumption and hence wrong setting of GLRendererQuirks:
- NoDoubleBufferedPBuffer (was selected even w/ later CTX_IMPL_ACCEL_SOFT)
- BuggyColorRenderbuffer (was never selected)
- Fix performs GLContextImpl.setRendererQuirks(..) _after_
fixing CTX_IMPL_ACCEL_SOFT via isCurrentContextHardwareRasterizer().
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
rare deadlock with animator-exception and invoke(wait=true, ..)
Fix synchronization issues in GLDrawableHelper.flushGLRunnables():
- Querying 'glRunnables.size()' is not synchronized, only its reference is volatile,
not the instance's own states.
- 'flushGLRunnable()' must operates while acquired the 'glRunnable' lock.
- 'glRunnables' are no more volatile
- introduced volatile 'glRunnableCount', allowing 'display(..)' method
to pre-query whether blocking 'execGLRunnables(..)' must be called.
This is risk (deadlock) free.
Also fixes rare deadlock in animator display-exception / GLAD.invoke(wait=true, ..) case:
- 'GLDrawableHelper.invoke(.., GLRunnable)' acquires the 'glRunnable' lock.
- Then it queries animator state, which is blocking.
- Hence animator's 'flushGLRunnable()' call must happen outside the animator lock
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
'closure'
GLDrawable.invoke(..) regression of commit c77b8f586cb2553582a42f5b90aeee5ef85f1efe:
'wait' was not set to false, if 'deferredHere' was forced to 'false'.
This could lead to the situation where GLRunnableTask
will catch the exception and supresses it.
Animator/FPSAnimator post exception propagation code
animThread = null; notifyAll();
must be complete to finalize animator state in case of an exception.
Decorate 'handleUncaughtException(..)' w/ try { } finally { }
where the latter ensures the mentioned 'closure'.
|
| |
| |
| |
| | |
Only check error if DEBUG || GLContext.DEBUG_GL in GLDrawableHelper.reshape(.., setViewport==true)
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- GLFBODrawableImpl
- cache getMaxRenderbufferSamples() result from initialize call,
method checks glGetError()
- FBObject
- init(..): Remove one redundant checkPreGLError()
- Allow reset(..) / modify-attachment-operations w/o glGetError():
- Only check error if DEBUG || GLContext.DEBUG_GL:
- RenderAttachment.initialize()
- TexureAttachment.initialize()
- syncSamplingSink(gl)
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- dual-use reset(..), use dedicated init(..) and reset(..)
- GLFBODrawable.FBOMODE_USE_DEPTH: Use GLCapabilities.[get|set]DepthBits(int)
Note: Applications shall use _requested_ GLCapabilities,
if passing caps down to the GLFBODrawable.
Otherwise (using _chosen_ caps) we may end up in requesting
properties not desired, e.g. stencil bits, if driver has chosen.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- Fix depth- and stencil bit count selection for attachRenderbuffer(..)
- Add generic values: DEFAULT_BITS, REQUESTED_BITS, CHOSEN_BITS, MAXIMUM_BITS
- Refactor depth- and stencil bit-count -> format into own method
- Allow depth- and stencil bit-count select a higher bit-count if required (fix)
- GLFBODrawable.FBOMODE_USE_DEPTH is deprecated, using GLCapabilities.[get|set]DepthBits(..)
- It was an oversight to introduce the bit flag in the first place,
since we should have used the capabilities depth bit-count
- Graph Test: GLEventListenerButton shall use requested capabilities for FBO drawable.
|