| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
| |
instead of String comparison.
GLProfile's 'profile' string reference is final and one of the static final GL* string references,
with which it is compared. Hence only the references can be used here.
Impact: Performance.
|
|
|
|
| |
.. was excluding: GL2GL3 common profile.
|
|
|
|
| |
massive '!!!' occurence
|
|
|
|
|
|
|
|
| |
- Subsume GL_EXT_texture_format_BGRA8888 -> GL,
Added GLContext.isTextureFormatBGRA8888Available()
- Movied generic isNPOTTextureAvailable() from GL -> GLContext, used by GL (desktop),
added simplified impl. in GLES1/GLES2 (false/true)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
GLProfile.get<Profile>() methods.
We need to distinguish between software and hardware accelerated OpenGL profiles
to allow choosing the proper profiles [default, GL2ES1, GL2ES2, ..]
on platforms where both, software and hardware implementations exist (GL, GLES2, ..).
Where no preference is being requested, hardware acceleration is favored:
GLProfile.getDefault()
GLProfile.getGL2ES1()
GLProfile.getGL2ES2()
Some method signatures needed to change
GLProfile:
getMaxProgrammable(AbstractGraphicsDevice device) ->
getMaxProgrammable(AbstractGraphicsDevice device, boolean favorHardwareRasterizer)
GLProfile adds: isHardwareRasterizer()
Determination whether a hardware acceleration is being used or not
is extended in GLContextImpl by querying the current context's
GL_RENDERER string. If the latter contains 'software' (case insensitive)
it is not hardware accelerated. At least this works w/ newer Mesa3D impl,
where GLX_SLOW_CONFIG is not set!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
ExtensionAvailabilityCache regression / enhancement:
- Set context version (w/o string) before caching.
This is required since we query the ctx version.
Regression from 4011e70eed8c88aee0fcd051a50ab3f15bb94f68
- Remove GLContextImpl state. Only use the passed value at initialization.
- Defined initialization, due to the 'new' cache/instantiation logic
Remove redundant GLContext profile bits:
- CTX_OPTION_ANY: implicit if !CTX_OPTION_FORWARD
- CTX_IMPL_ACCEL_HARD: implicit if !CTX_IMPL_ACCEL_SOFT
Cache key (ProcAddressTable, Extensions):
- Mask out GLContext.CTX_OPTION_DEBUG | GLContext.CTX_IMPL_ES2_COMPAT,
since they don't influence the cached values.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(and clean up)
- GLContext
- Expose isFunctionAvailable(), isExtensionAvailable(),
getPlatformExtensionCount(), getGLExtensionCount()
- sort methods a bit
ExtensionAvailabilityCache:
- Favor StringBuilder instead of StringBuffer (faster)
- Resuse set's
- Hold dedicated counts of extensions, platform and GL
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- GLProfile properly detects native EGL/ES1/ES2 on the 'desktop' device factory.
This allows usage of Mesa's EGL/ES or Imageon's PVR emulation, etc.
- GLProfile drops getDefaultDesktopDevice() and getDefaultEGLDevice()
since both are aligned by getDefaultDevice().
- Fix GL_ARB_ES2_compatibility detection and utilize
resulting isGLES2Compatible() where possible.
This allows ES2 compatible desktop profiles to use core ES2 functionality
(glShaderBinary() .. etc) even with a GL2ES2 desktop implementation.
- EGLDrawable: If createSurface(..) fails (BAD_NATIVE_WINDOW) w/ surfaceHandle
it uses windowHandle if available and differs.
This allows the ANGLE impl. to work.
- Properly order of EGL/ES library lookup:
ES2: libGLESv2.so.2, libGLESv2.so, GLES20, GLESv2_CM
EGL: libEGL.so.1, libEGL.so, EGL
- *DynamicLookupHelper reference will be null if it's library is not complete
(all tool libs, all glue libs and a ProcAddressFunc lookup function - if named).
- Enhance GL version string (incl. ES2 compatible, hw/sw, ..)
- GLBase: Fix docs and remove redundancies
- Prepared (disabled) DesktopES2DynamicLibraryBundleInfo
to be used for a real EGL/ES2 implementation within the desktop GL lib (AMD).
Sadly it currenly crashed within eglGetDisplay(EGL_DEFAULT_DISPLAY),
hence it's disabled.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
GLContext.release's setCurrent(null) exception prone.
Catch releaseImpl's glFinish() exception (DebugGL)
glGetError() after glFinish() (eg. w/ debug pipeline) produced unknown error 0x0506
on OS X (10.7.2 NV).
Make GLContext.release's setCurrent(null) exception prone
Call setCurrent(null) in finalizer block to ensure it's 'released' out of the TLS
even when an exception is being thrown.
Make MacOSX Shared Resources 'destroy' more error prone (catch exceptions)
|
|
|
|
|
|
| |
entry w/ AWT GLCanvas functionality.
-
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
makeCurrent()/release()/destroy() calls ; Enable context switch tracing ; GLCanvas: proper AbstractGraphicsDevice destruction
GLContext*/GLDrawableHelper: Fix consistency of recursive makeCurrent()/release()/destroy() calls
Utilizing volatile and lock.tryLock(0) for lockConsiderFailFast(),
reducing redundant synchronization and using RecursiveLock implicit sync.
GLContext 'early-out' is the case where the thread already holds the
context, ie. context is already current and the native makeCurrent is skipped.
makeCurrent()'s 'early-out' w/o incr. the recursive lock of GLContext
and it's NativeSurface could lead to asymetry in lock/unlock count
with release()/destroy() calls. The 1st release actually released the
native ctx already.
Properly utilize recursive lock/unlock in all cases and impl. 'early-out' after locking.
Following the above in GLDrawableHelper.invokeGL()'s 'early-out' case as well,
ie calling makeCurrent()/release() symmetrical.
Introduce GLDrawableHelper.disposeGL(), which issues dispose on all GLEventListeners
within a current context and issued context destruction directly.
This simplifies GLAutodrawable's destroy/dispose calls and ensures
that the above sequence of events happens atomically (lock is being hold until destruction).
Enable context switch tracing
If property 'jogl.debug.GLContext.TraceSwitch' is defined, trace context switch.
GLCanvas: proper AbstractGraphicsDevice destruction
|
|
|
|
|
|
|
|
|
| |
ignored buffer position.
This was disclosed by testing agains the Intel HD 3000 GPU,
resulting in an INVALID OPERATION GL error (correct).
Other driver ignored this mismatch ..
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
GLJPanel:
- fix dispose of backend
- proper J2DOGL thread
- no double dispose
- remove VERBOSE
- no dispose regenerate flag
- add @Overrride
- more safe createContext(..) impl
- setSynchronized(true); for all backends
- ensure AbstractGraphicsDevice close() is being called
GLDrawableHelper:
- Clarify w/ isDisposeAction = null==initAction
GLPbufferImpl:
- ensure AbstractGraphicsDevice close() is being called
Java2D:
- remove VERBOSE
-
|
|
|
|
|
|
|
| |
atomic java JAR)
- GLProfile, NWJNILibLoader, NEWTJNILibLoader:
Issue Platform.initSingleton() upfront within priviledge block.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
NewtCanvasAWT/GLCanvas (delegation) ; Fix GLCanvas OffscreenLayerSurface usage.
JAWTWindow.destroy():
- No more getGraphicsConfiguration().getScreen().getDevice().close() call,
since the configuration (hence the device) is passed @ creation and owned by the caller.
New Interface 'OffscreenLayerOption', impl. by JAWTWindow (impl) and NewtCanvasAWT/GLCanvas (delegation)
- Abstract offscreenLayer option to be delegated by using classes
- Allow offscreen testing of GLCanvas as well (like NewtCanvasAWT)
Fix GLCanvas OffscreenLayerSurface usage
- common 'createDrawableAndContext()' for context and drawable instance creation
- addNotify() calls createDrawableAndContext() after super.addNotify() to be able
to lock the surface (JAWTWindow) and hence to determine offscreen usage.
- reshape(...) issues recreation 'dispose(true)' in case of using an offscreen layer
- dispose() explicitly destroys the JAWTWindow
NewtCanvasAWT:
- explicitly close the device of the JAWTWindow (as GLCanvas does)
Tests:
com.jogamp.opengl.test.junit.newt.parenting.TestParentingOffscreenLayer01GLCanvasAWT
com.jogamp.opengl.test.junit.newt.parenting.TestParentingOffscreenLayer02NewtCanvasAWT
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
@ creation
GLDrawableFactory*.createOffscreenDrawable():
No implicit setRealized(true) @ creation, following deferred creation like onscreen drawables.
This allows using offscreen drawables in classes like GLCanvas, where realization is deferred due to pending valid size.
Only createGLPBuffer() realizes the offscreen pbuffer drawable immediatly to reduce the impact
on user-code.
GLDrawableFactoryImpl.createGLDrawable():
- Simplify OffscreenLayerSurface validation and check it first regardless of the chosenCaps
to get a chance to use pbuffer.
|
|
|
|
| |
is called 1st, add tests. Add performance numbers of init/shutdown in tests.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
'dead' thread (Applets)
GLDrawableFactory:
- clarify: public getWasSharedContextCreated(..) -> protected createSharedResource(..)
- add: getSharesResourceThread()
GLProfile:
- proper locking of initSingletion(..) path:
- Use RecursiveThreadGroupLock and add/remove GLDrawableFactory's sharesResourceThread
while creating it's the sharedResource.
This simplifies and fixes GLProfile's locking code.
- Fix and simplify initSingleton(boolean) API doc - mark it deprecated.
- Add initSingleton() for controlled initialization only, pairing w/ shutdown(..)
Remove initSingleton(boolean) calls in code and test!
+++
Fix SharedResourceRunner 'dead' thread (Applets)
In Applets, stopping an Applet makes the browser Java plugin interrupting
and killing all related threads, including our SharedResourceRunner thread.
- Validate whether the shared resource thread is alive
- Catch interruption in shared resource thread and assume it's a kill signal
- releaseSharedResource: clear devicesTried set
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Management
- Leave Platform, .. TempJarCache untouched.
- GLDrawableFactoryImpl*: Leave DynamicLibraryBundle(lib-binding) untouched,
for NativeLibrary, JNILibLoaderBase (JNI libs), .. consistency.
- SHARED_ONLY: shutdown shared GLDrawableFactoryImpl* resources and NativeWindowFactory
- COMPLETE: additionally shutdown GLContext*
Clear all cached GL/GLX proc-address and device/context mappings.
- Use new "GLProfile.shutdown(GLProfile.ShutdownType.SHARED_ONLY)" in Applets
- X11GLXDrawableFactory Shutdown: Uncomment close/destroy of shared resources.
- JAWTWindow.destroy(): Close the delegated device.
In case it's X11 this closes the exclusive opened X11 Display.
|
|
|
|
| |
(GLContextImpl)
|
| |
|
|
|
|
| |
constructor/destroy()
|
|
|
|
|
|
|
|
|
|
|
|
| |
More Robust GLProfile Initialization
- Catch GLException in GLDrawableFactory getWasSharedContextCreated(device) impl.,
which may fail (See comment on Firefox/Chorme EGL deployed library for Windows).
- If getWasSharedContextCreated(devide) fails, set respective factory availability to false,
ie. hasDesktopGLFactory, hasEGLFactory, ..
Add NativeWindowFactory Shutdown
- Currenly a dummy entry, may evolve. X11Util shutdown is issued by respective GLDrawableFactory
|
|
|
|
| |
AWTDevice: Remove subtype
|
|
|
|
|
|
|
|
|
|
|
| |
AbstractGraphicsConfiguration, if delegation is used.
This change restricts the usage of AbstractGraphicsConfiguration's getNativeGraphicsConfiguration()
to NativeSurface implementations and hence reduces complexity.
NativeSurface implementations are adapted and access to it's AbstractGraphicsConfiguration
is controlled via get/set method avoiding flawed usage (read/write), since read access shall
return the delegated AbstractGraphicsConfiguration, if used.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
public class GLDrawableFactoryImpl.
Michael Weber's test case (commit e7388512b69979d00e5a213a1b166a1b1726ae0c)
pointed me to the flaw in GLDrawableFactory which exposed a non-public method,
ie. 'getOrCreateSharedContext()'.
This lead to the assumption, that the 'shared' drawable/context of the factory is multi purpose
and may be used for application context sharing - which is not the case.
Changed Michael's test case to use a local shared pbuffer based drawable/context
and made the method non-public, where it belongs.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
I was too fast introducing these accessors, since they are currently not needed
and hence redundant.
Complete
- 7bc4c218b47033cb66f4eb5e707a86a0a4e60cff
Partial in regards to the holder interfaces only:
- d8fa00d35a49f4faf5f04aeb7e2bba4e972965f5
- f51e3dad6c4bd1f6d0001cecf6a0f692400ed602
- 46542168d64b37f544f61802693f15b59b224e4e
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- NativeSurfaceHolder interface allows access to it's implementation's NativeSurface reference.
- NativeWindowHolder interface allows access to it's implementation's NativeWindow reference.
Implement or extend interface w/ these accessors whereever it seems fit:
- NEWT Window
- GLDrawable
These accessors allow lower layers to retrieve the NativeSurface/Window instance
w/o knowledge of the 'upper' frameworks, ie. NativeWindow/JOGL or JOGL/NEWT.
Commited in followups (due to mixed semantical changes in those files):
- JAWTWindow
- NewtCanvasAWT
- Some NEWT impl.
|
| |
|
|
|
|
|
|
| |
features, used by pbuffer drawable before a current context.
- Also extract getNextPowerOf2() -> GLBuffers (remove redundancy)
|
| |
|
|
|
|
| |
dropping GL2ES[12] lists
|
| |
|
|
|
|
| |
usage and FBOMRT
|
|
|
|
|
|
| |
We not only shall skip windowing system triggered repaint if another animation thread
is running, but also if the current thread is the animator thread.
This keeps the animator intervals stable while resizing.
|
|
|
|
| |
== default && req != given
|
|
|
|
| |
is respected in EGL
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
release for a specific thread
- marked deprecated
- used to perf measure situation on omap3, ie
figuring out where the low perf. in GearsES2 comes from,
our core JOGL code or the GL usage.
Turns out it's the GL usage itself, ie the shader - good.
- calls are commented out in the demos
|
| |
|
| |
|
|
|
|
| |
ReflectionUtil.getConstructor(..)
|
| |
|
|
|
|
| |
; Use generics
|
|
|
|
| |
NativeWindow and NEWT; no more LD_LIB_.. in setenv.sh for test scripts
|
|
|
|
| |
TempJarCache if used.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
NV_swap_group support; setSwapInterval();
resetStates()
- fixes a bug where X11GLXContext impl. resetState() !!
- marked all with @Override tag
- ensured super.resetStates() is called at end (oops)
getPlatformExtensionsStringImpl()*
- fixes a bug where X11GLXContext overrides GLContext cached GLX extension string query
- marked 'final' in GLContext to avoid bugs
- using abstract 'getPlatformExtensionsStringImpl()' called by ExtensionAvailabilityCache
Add premiliry GLX/WGL NV_swap_group support
- thought it might be a solution to sync swap of 2 windows
- none of my drivers/platforms support it, event though extension is avail on Linux
Promote setSwapInterval() (1 up)
- bumped above API up to public GLContext
- those extension should not spam the GL interfaces .. hmm
|
|
|
|
|
|
|
| |
recreation of all resources
- Release all GLDrawableFactory instances at shutdown, [re]create them at initialization
- Release GLContext resources (availability map) as well
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(due to recreation) ; NEWT/Window: Remove isValid() API entry - always true!
Destruction of GLAutoDrawable shall not remove them from AnimatorControl (due to recreation)
- Completes commit b65e1e76d413b70e5593173e6bd36d30675554a6
- WindowImpl:
- volatile: windowHandle/visible fields (memeory sync critical)
- destroy must set visible := false, to avoid immediate recreation via
a display call of another thread, ie an animator.
NEWT/Window: Remove isValid() API entry - always true!
- NEWT/Window's can always be recreated.
- redundancy in API is even worse than redundancy in impl. :)
|