| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
Conflicts:
src/jogl/classes/com/jogamp/opengl/GLRendererQuirks.java
|
| |
|
|
|
|
| |
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
|
|
|
|
|
|
| |
(GLRendererQuirks.NoPBufferWithAccum): Accum buffer allowed if !usePBuffer; Avoid NPE.
99f91f8b28d42cdf341533736e878056bcae4708
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Preserve fields, but make them deprecated and don't use them anymore.
Using a new version with less visibility.
- Revert incompatible method prototype changes
- GLFBODrawable:
- Completly remove FBOMODE_DEFAULT and FBOMODE_USE_DEPTH usage
and deprecate them
- GLRendererQuirks:
- Completly remove COUNT usage and deprecate it.
- Add getCount() method for future compatibility.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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'.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- 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.
|
|
|
|
|
|
| |
fa6ba9d70d4fe47f05facc72608fb10c889f9d09
- bring back removed 'void dispose()' -> deprecated now
|
|
|
|
| |
- Handle deprecated reset(..) variants return type in a backward compatible manner
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
resetSamplingSink(..) if required; Fix resetSamplingSink(..), isBound(), ..
- Simplify API (init/reset)
- use new unique methods for init and reset:
- void init(final GL gl, final int newWidth, final int newHeight, final int newSamples)
- does not issue resetSamplingSink(..)
- boolean reset(final GL gl, final int newWidth, final int newHeight, final int newSamples)
- always issues resetSamplingSink(..)
- deprecated dual-use (init/reset):
- boolean reset(final GL gl, final int newWidth, final int newHeight)
- boolean reset(final GL gl, int newWidth, int newHeight, int newSamples, final boolean resetSamplingSink)
- reset(..) no more creates a dummy 'samplingSink' instance if sampling > 0,
left up to resetSamplingSink(..)
- Track 'modified' state of FBObject,
if size, format or any attachment has been changed since last
- use(..)
- syncSamplingSink(..)
- resetSamplingSink(..)
- Only issue resetSamplingSink(..) from syncSamplingSink(..)/use(..)
if 'modified == true'
+++
- Fix setSamplingSink(..), i.e. samplingSink state handling:
- Validated whether given samplingSink is initialized,
throws Exception if not.
- Fix resetSamplingSink(..)
- resets the bound state, i.e. leaves it untouched
- also unbinds the samplingSink
- sampleSinkDepthStencilMismatch() also returns true if
this.depth/stencil == null, but samplingSink is not.
- Newly created colorbuffer/-texture matches
exiting colorbuffer's internal-format, if exists.
- Using simplified resetSizeImpl(..) for size mismatch
- Simplified samplingColorSink init check
- Fix isBound()
was: 'bound = bound && fbName != gl.getBoundFramebuffer(GL.GL_FRAMEBUFFER)'
fix: 'bound = bound && fbName == gl.getBoundFramebuffer(GL.GL_FRAMEBUFFER)'
- Fix detachRenderbuffer(..) validates whether detachment was successful,
similar to detachColorbuffer(..)
Conflicts:
src/jogl/classes/com/jogamp/opengl/FBObject.java
|
|
|
|
| |
init call
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
renderbuffer may cause a crash
Workaround crash caused by Mesa 7.2 software rendering
using color renderbuffer target in FBO.
If Mesa < 8.0 and software - or -
property 'jogl.fbo.force.nocolorrenderbuffer' is set,
set quirks:
- GLRendererQuirks.BuggyColorRenderbuffer
- GLRendererQuirks.NoFullFBOSupport (to disable MSAA)
GLFBODrawable always uses FBOMODE_USE_TEXTURE
if GLRendererQuirks.BuggyColorRenderbuffer is set.
+++
Crash Report:
GNU C Library : 2.13 stable
OpenGL : software
Operating System : Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64
Processor ID : x86 Family 6 Model 44 Stepping 2, GenuineIntel
Abnormal termination:
Segmentation violation
Register State (from fault):
RAX = 00000000ff1818f0 RBX = 00000000beaf8afc
RCX = 0000000000000004 RDX = 00007f85ed9c9010
RSP = 00007f8252d24fd0 RBP = 00007f8252d25020
RSI = 0000000017b9b330 RDI = 0000000015bca400
R8 = 0000000000000000 R9 = 00007f81edcd3014
R10 = 00007f823565f6ce R11 = 00007f827bee49aa
R12 = 0000000000001406 R13 = 0000000000000001
R14 = 00000000154d5458 R15 = 00000000154d4f10
RIP = 00007f823565f7bc EFL = 0000000000010206
CS = 0033 FS = 0000 GS = 0000
Stack Trace (from fault):
[ 0] 0x00007f823565f7bc put_row_ubyte4 at /mesa/main/renderbuffer.c:665 (in /lib/libGL.so.1)
[ 1] 0x00007f8235727239 _swrast_write_rgba_span at /mesa/swrast/s_span.c:1450 (in /lib/libGL.so.1)
[ 2] 0x00007f823574b071 smooth_rgba_triangle at /mesa/swrast/s_tritemp.h:862 (in /lib/libGL.so.1)
[ 3] 0x00007f82357155f0 _swrast_Triangle at /mesa/swrast/s_context.c:692 (in /lib/libGL.so.1)
[ 4] 0x00007f8235771780 triangle_offset_twoside_rgba at /mesa/swrast_setup/ss_tritmp.h:188 (in /lib/libGL.so.1)
[ 5] 0x00007f82356d2cea _tnl_render_poly_elts at /mesa/tnl/t_vb_rendertmp.h:313 (in /lib/libGL.so.1)
[ 6] 0x00007f82356d335e _tnl_RenderClippedPolygon at /mesa/tnl/t_vb_render.c:244 (in /lib/libGL.so.1)
[ 7] 0x00007f82356c9313 clip_tri_4 at /mesa/tnl/t_vb_cliptmp.h:230 (in /lib/libGL.so.1)
[ 8] 0x00007f82356cd026 clip_render_triangles_verts at /mesa/tnl/t_vb_rendertmp.h:163 (in /lib/libGL.so.1)
[ 9] 0x00007f82356d37d9 run_render at /mesa/tnl/t_vb_render.c:320 (in /lib/libGL.so.1)
[ 10] 0x00007f82356c2436 _tnl_run_pipeline at /mesa/tnl/t_pipeline.c:158 (in /lib/libGL.so.1)
[ 11] 0x00007f82356c37da _tnl_draw_prims at /mesa/tnl/t_draw.c:402 (in /lib/libGL.so.1)
[ 12] 0x00007f82356b673a vbo_exec_DrawArrays at /mesa/vbo/vbo_exec_array.c:263 (in /lib/libGL.so.1)
[ 13] 0x00007f823583e5b0 glDrawArrays at /mesa/glapi/glapitemp.h:1645 (in /lib/libGL.so.1)
+++
|
|
|
|
|
|
| |
dropping usage of .addQuirks(int[] quirks, offset, len)
Directly adding a quirk allows dropping usage of erroneous fixed-sized int[] array for accumulated quirks.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
creation incl. Bug 1020 glClear(..) ; Fixes missing fbo.unbind(gl)
Utilize common self-contained setupFBO(..) method for FBO creation incl. Bug 1020 glClear(..)
initialize(..) and reset(..)'s fallback code
contained duplicated FBO setup/creation code.
The former was updated to suite the new FBO mode bits,
where the latter left untouched, hence was buggy.
Now setup and creation of a single FBO has been merged into setupFBO(..).
Fixes missing fbo.unbind(gl):
We did no issue unbind() on each fbo instance
while adding the workaround for Bug 1020.
Adding fbo.markUnbound() call to all fbos but the last.
Note: This might not cause any issues, since fbo.bind(gl) tests the currently bound fbo.
|
|
|
|
| |
differs from panel-size; Use pre-fetched panel-size.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Offscreen's GLCapabilitiesImmutable reconfiguration will dispose a realized instance
and issues recreation via initializeBackendImpl() immedietly.
Implementation performs operation on AWT-EDT.
Tests:
- TestGearsES2GLJPanelAWT:
- Toggle MSAA via 'm'
- TestGearsGLJPanelAWT:
- Toggle MSAA via 'm'
- Toggle Bitmap via 'b'
|
|
|
|
| |
fa0115efb3989c28af21fc5f570ae49723566107
|
|
|
|
| |
review.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
success - otherwise pause()/.. return value is inconsistent.
Caller of e.g. pause() running on the anim-thread or AWT-EDT (AWTAnimatorImpl)
will be non-blocking.
Before this change, a non-blocking simply did not wait until the 'hold' condition is reached
and returned its negated value.
This ofc is 'false', indicated unsuccessful operation.
Caller use the return value to determine whether the call actually paused (or ..)
the animator. Despite the non-blocking nature, the pause state was set, even if not reached.
Hence a resume() would be required to continue operation after a temporary pause.
+++
This change ignores the non-blocking nature's unmet condition.
finishLifecycleAction() returns !nok || !blocking,
i.e. either true for the reached condition (blocking) or true if non-blocking.
Blocking calls with unmet condition still return false.
+++
In case an animated GLAutoDrawableis being pulled after a non-blocking animator pause() call,
the GLAutoDrawable's implementation thread-safety must ensure proper operation.
+++
|
|
|
|
| |
states
|
|
|
|
|
|
| |
01c709ff0e81ddd84e3bc78ec180a53587ec855c
(happens when you try to do things fast w/ line commits and w/o checking .. duh!)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Desktop GL < 1.2, avoiding GL-Error
Commit fc1e98790a02b4fa7922f3cdd9d437f87d7c99e5
added handling of PACK/UNPACK IMAGE_HEIGHT and SKIP_IMAGES in GLPixelStorageModes.
However, it has been overseen that the four states are not available in OpenGL 1.1.
Adding exclusion of the same if desktop GL < 1.2
and hence avoiding GL errors.
Same applies to GLBuffers.sizeof(..) method.
|
|
|
|
|
|
| |
version number and GL profile selection
Since Bug 1047 didn't provide a unit tests, this must be fine for now.
|
|
|
|
| |
initialized
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
c78ceb642d0ef5bb5bf27ff8ff1495175ee2e983
Commit c78ceb642d0ef5bb5bf27ff8ff1495175ee2e983 changed:
- public static final String GL4 = "GL4";
+ public static final String GL4 = "GL4".intern();
which is identified by semver as incompatible,
due to Bug 1059 (no more inlining of interned string references).
|
|
|
|
| |
for GLSL >= 150 allowing GLSL compatibility profile
|
|
|
|
|
| |
- Add GL4.GL_TESS_CONTROL_SHADER and GL4.GL_TESS_EVALUATION_SHADER support for GLSL util class ShaderCode
- Add unit test TestTessellationShader01GL4NEWT, testing TessellationShader01aGL4 and TessellationShader01bGL4
|
|
|
|
|
|
|
|
|
| |
'GL4', ..) consequently using reference comparison.
GLProfile already compared profile strings by reference, hence interning those strings
to become canonical references was missing!
Consequently using reference comparison for all profile strings in GLProfile.
|
|
|
|
|
|
|
|
| |
implementation - Part 2/2
- TestGLProfile01NEWT: Allow ctx.isGLES3Compatible() and hence GL4ES3 on GL3bc and GL3
- GLProfile: Remove GL4ES3 mapping using GL3bc and GL3, only GL4bc, GL4 and GLES3 are allowed in static mapping.
|
|
|
|
|
|
| |
implementation on GL3 contexts
_gl.getGL2() -> _gl.getGL2GL3()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
OSX/Nvidia's FBO needs to be cleared before blitting,
otherwise first MSAA frame lacks antialiasing.
GLFBODrawableImpl.initialize(..) can clear
GL.GL_COLOR_BUFFER_BIT and GL.GL_DEPTH_BUFFER_BIT, if used.
FBObject cannot clear the buffer(s) due to it's low-level API,
i.e. it cannot know when the first bind occurs _after_ user
completed FBO setup (attaching buffers).
Hence plain FBObject usage required manual injection
of glClear(..) after setup as demonstrated in GLJPanel.
We may need to elaborate in this case,
i.e. add an FBObject API entry like 'fbo.postInitNotify()'.
|
|
|
|
|
|
|
|
|
| |
bind(): Set dedicated read/write if fullFBOSupport
- Add comments about maxSamples > 0 implies fullFBOSupport
- bind(): Set dedicated read/write if fullFBOSupport
as done in syncSamplingSink() and unbind()
|
|
|
|
| |
protected field name w/o breaking backward compatibility
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
fashion ; Don't use arbitrary shared context as 'master'.
GLContext* passes the shared-master to GLContextShareSet,
which only creates a sets of shared contexts
without differentiating the master context.
GLContext*'s shared-slave attempts to lock
the realized shared-master's surface at creation.
Currently only an arbitrary shared context is selected
due to the missing 'master' identity.
The arbitrary shared context's surface is locked
and its shared context handle used to create the slave context.
Lacking of using the user given shared-master
can lead to deadlock situations - and locking a 'wrong' surface.
+++
The patch:
- Allows query the user given shared-master!
- Use the user given shared-master for locking and it's
context handle for the slave's creation.
- The shared-context mapping maps each shared-master
to a shared-slave within one shared-context-set,
allowing deterministic and individual shared-master queries.
|