summaryrefslogtreecommitdiffstats
path: root/src/jogl/classes/jogamp/opengl
Commit message (Collapse)AuthorAgeFilesLines
* GLPixelStorageModes: Safe and restore GL2ES3 modes, i.e. add missing GLES3 ↵Sven Gothel2014-02-141-8/+8
| | | | modes. GLStateTracker: Use proper GL names for enums
* Bug 972 - Reduce ClassLoader Lookup, i.e. Class.forName(..): GLProfile, ↵Sven Gothel2014-02-121-7/+5
| | | | | | | | | | | | 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
* GLMediaPlayer: Add user attached objects, similar to GLContext - Allowing ↵Sven Gothel2014-01-261-0/+19
| | | | GLMediaEventListener impl. to access GLMediaPlayer associated objects
* Bug 948 - Autodetect GLRendererQuirks.SingletonEGLDisplayOnlySven Gothel2014-01-242-22/+17
| | | | | | | | | Refines commit fbe00e6f5dca8043b40dd96f096fecc9424e0cc3 Instead of querying driver artifacts (vendor, platform, version ..) we simply can autodetect this quirk by trying to get a second egl-display handle when initializing the EGLDrawablFactory's default device: EGL.eglGetDisplay(EGL.EGL_DEFAULT_DISPLAY)
* Bug 948 - NVIDIA 331.38 (Linux X11) EGL impl. only supports _one_ EGL ↵Sven Gothel2014-01-243-89/+167
| | | | | | | | | | | | | | | | | | | | | | | Display via eglGetDisplay(..) NVIDIA 331.38 (Linux X11) EGL impl. only supports _one_ EGL Display via eglGetDisplay. - Subsequent eglGetDisplay(..) calls fail. - Using the same 'global' egl-display does work though Remedy: Add 'GLRendererQuirks.SingletonEGLDisplayOnly' Detection of quirk is done as usual in GLContextImpl.setRendererQuirks(..), and EGLDrawableFactory passes the quirk, if detected, down to EGLDisplayUtil. The latter implements the singleton eglDisplay handle. EGLDisplayUtil: Cleaned up .. - EGLDisplayRef employs the reference handling incl. eglInitialize(..) and eglTerminate(), as well as the new singleton quirk. - Mark all internal methods 'private', to remove possible [untested] sideffects.
* Bug 950 - Recognize full FBO capabilities for ES 3.0 - ↵Sven Gothel2014-01-241-1/+1
| | | | | | | | [GLContext|GL].hasFullFBOSupport() == true OpenGL ES 3.0 supports full framebuffer operations, incl. multiple color-attachments and multisample. Hence [GLContext|GL].hasFullFBOSupport() shall returns true w/ a ES 3.0 context.
* EGLDisplayUtil.eglCreateEGLGraphicsDevice(..): Don't open() device implicit; ↵Sven Gothel2014-01-235-42/+52
| | | | EGLDrawableFactory.mapAvailableEGLESConfig(..): Clarify
* GLBufferObjectTracker: Fix copyright notice (drop Sun Microsystems since ↵Sven Gothel2014-01-211-33/+21
| | | | this is a rewrite of previous GLBufferSizeTracker)
* Better shared GLAutoDrawable synchronization: Block slave instances to also ↵Sven Gothel2014-01-212-1/+19
| | | | | | | | | | | | | | | | | | | | block until all master's GLEventListener.init(..) methods have been called Better shared GLAutoDrawable synchronization. Block slave instances to also block until all master's GLEventListener.init(..) methods have been called - GLSharedContextSetter: Add areAllGLEventListenerInitialized() - GLCanvas (SWT, AWT) - GLJPanel - GLAutoDrawableBase (GLWindow, ..) - GLDrawableHelper's isSharedGLContextPending(..) takes 'areAllGLEventListenerInitialized()' into consideration allowing to block the slave creation until master is completed. This solves teh use case, where the master creates resources in it's GLEventListener initialization (buffers), which are shared with it's slaves.
* Bug 942: GLBufferObjectTracker: Tracking GLBufferStorage accurately, ↵Sven Gothel2014-01-216-273/+650
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | synchronized and secure [1/2] GLBufferSizeTracker becomes GLBufferObjectTracker and tracks the buffer's data store, GLBufferStorage, accurately, synchronized and secure. Synchronization is required, since the GLBufferStorage can be shared across many GLContext on multiple threads. This requires all GLBufferStorage lifecycle affecting GL functions to utilize synchronized GLBufferObjectTracker methods while passing a native GL-func callback. These GL functions are: - glBufferData, glBufferStorage (GL 4.4), glNamedBufferDataEXT Creating the GLBufferStorage object - glMapBuffer, glMapBufferRange, and their *Named*EXT variants - glUnmapBuffer, glUnmapNamedBufferEXT 'glDeleteBuffers' can simply notify the GLBufferObjectTracker No more HashMap is required to associate the mapped buffer address to the mapped ByteBuffer. GLBufferObjectTracker simply utilizes a buffer-name (int) -> GLBufferStorage map. +++ The security aspect shall be implemented by validating all arguments whether they match the required GL constraints, as well as validating tracked states like 'size'. The following functions will throw an GLException accordingly: - glBufferData, glNamedBufferDataEXT * @throws GLException if size is less-than zero * @throws GLException if a native GL-Error occurs - glBufferStorage (GL 4.4) * @throws GLException if size is less-or-eqaul zero * @throws GLException if a native GL-Error occurs - glMapBuffer, and it's *Named*EXT variant * @throws GLException if buffer is not bound to target * @throws GLException if buffer is not tracked * @throws GLException if buffer is already mapped * @throws GLException if buffer has invalid store size, i.e. less-than zero - glMapBufferRange, and it's *Named*EXT variant * @throws GLException if buffer is not bound to target * @throws GLException if buffer is not tracked * @throws GLException if buffer is already mapped * @throws GLException if buffer has invalid store size, i.e. less-than zero * @throws GLException if buffer mapping range does not fit, incl. offset - glMapBufferRange, and it's *Named*EXT variant Only clear mapped buffer reference of GLBufferStorage if native unmap was successful. Further more special error handling shall be applied to: - glMapBuffer, and it's *Named*EXT variant, glMapBuffer, and it's *Named*EXT variant - A zero GLBufferStorage size will avoid a native call and returns null - A null native mapping result indicating an error will not cause a GLException but returns null This allows the user to handle this case.
* Bug 943 - GLBufferStateTracker shall support tracking all possible buffer ↵Sven Gothel2014-01-151-12/+27
| | | | targets
* Bug 942: Bug 942 - Review GLBuffer[State|Size]Tracker and NIO mapped buffersSven Gothel2014-01-144-92/+73
| | | | | | | | | | | | | | | | | | | | | | | | | Commit f8a74c9831c65725a699320c27e62161a0378241 reverted commit 7c5483d5b20aed9c87c5ce3f6bc840b6546edcd1 due to the fact that the buffer binding itself is _not_ shared across shared GLContext! Apply uncritical changes of 7c5483d5b20aed9c87c5ce3f6bc840b6546edcd1: +++ Simplify GLBufferSizeTracker creation @ GLContextImpl ctor, make it final. +++ Clear the GLBufferSizeTracker (@destruction) only if no more created shares are left! +++ Refine API doc. +++
* Revert "Bug 942 - Share GLBufferStateTracker ; Unify GLBufferStateTracker ↵Sven Gothel2014-01-144-187/+260
| | | | | | and GLBufferSizeTracker (simplification)" This reverts commit 7c5483d5b20aed9c87c5ce3f6bc840b6546edcd1.
* Bug 942 - Share GLBufferStateTracker ; Unify GLBufferStateTracker and ↵Sven Gothel2014-01-144-260/+187
| | | | | | | | | | | | | | | | | GLBufferSizeTracker (simplification) Due to future mapped buffer tracking, the GLBufferStateTracker instance shall be shared across shared GLContextImpl instances similar to GLSizeStateTracker! This allows us to merge GLSizeStateTracker code into GLBufferStateTracker to simplify the implementation. +++ Clear the GLBufferStateTracker (@destruction) only if no more created shares are left! +++
* Bug 938 - MemoryObject.java has no more equals() methodSven Gothel2014-01-141-6/+22
| | | | | | Re-adding 'equals(..)' method erroneously removed with commit 8457bf35fee253d9af29ff1150a9671f6896fc17. 'equals(..)' is important to allow the HashMap<> for glMapBuffer(..) work properly!
* Fix GLDrawableHelper.resizeOffscreenDrawable(..): Do nothing if ↵Sven Gothel2014-01-111-4/+7
| | | | | | | | !drawable.isRealized() - similar to it's recreateDrawable() and test only _after_ having the surface lock! Only after the surface lock we are thread safe. In case drawable has been pulled, do nothing ..
* Misc Cleanup: JAWTWindow: Reusing visible in HIERARCHY listener; Remove ↵Sven Gothel2014-01-112-7/+7
| | | | obsolete 'getPrivateGraphicsConfiguration()'
* JOGL Assets: Replace test-ntsc01-160x90.png w/ test-ntsc01-57x32.png (Save ↵Sven Gothel2013-12-281-1/+1
| | | | ~2 kB)
* Bug 930 - OSX: Using 'Apple Software Renderer' GLRendererQuirks Quirk ↵Sven Gothel2013-12-231-4/+8
| | | | | | | | | | | | | | | 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.
* Bug 929 - Reflect ES3 Compatibility with ES2Sven Gothel2013-12-213-24/+22
| | | | | | | | | | | | | | | | | | | | | - 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.
* Bug 925 - Refine GLContextImpl.setGLFunctionAvailability(..)'s ES version ↵Sven Gothel2013-12-211-4/+16
| | | | | | | | | | | | | | | | | validation Refine GLContextImpl.setGLFunctionAvailability(..)'s ES version validation: + // - fail if ES major-version mismatch: + // - request 1, >= 3 must be equal + // - request 2 must be [2..3] i.e. the following is accepted, otherwise fails: request has 1 1 2 2,3 3 3 4 4 ...
* Bug 925 - Accept an ES3 Context, if reported via GL-Version-String w/o ↵Sven Gothel2013-12-215-32/+95
| | | | | | | | | | | | | | | | | | | EGL_OPENGL_ES3_BIT_KHR Add Quirk 'GLES3ViaEGLES2Config': ES3 Context is used via EGL_OPENGL_ES2_BIT and 'version 2' for create context attributes. - GLContextImpl.setGLFunctionAvailability(..)'s ES version validation only fails if requested major version == 1 and doesn't match. Hence requesting major==2 and having version 3 is tolerated. - GLContextImpl.setGLFunctionAvailability(..)'s Quirks: requested-major < has-major -> Adding GLES3ViaEGLES2Config - EGLDrawableFactory.mapAvailableEGLESConfig(..): Reflects has-major version, i.e. GLES3ViaEGLES2Config situation where an ES2 request leads to an ES3 version. Note: All workarounds can be found via lookup of GLES3ViaEGLES2Config (as usual when using quirks).
* Bug 925: Use proper common profile and test compatibility for ↵Sven Gothel2013-12-211-8/+11
| | | | GLContextImpl's default VAO.
* FFMPEGMediaPlayer: Add missing indentation of commit ↵v2.1.4_rc01Sven Gothel2013-12-181-7/+7
| | | | 8a032a2c1f247819bdb08382fbebcc4cd896b3f2
* ALAudioSink GLMediaPlayerImpl FFMPEGMediaPlayer: Verbosity only w/ DEBUG flag.Xerxes Rånby2013-12-183-3/+7
| | | | Signed-off-by: Xerxes Rånby <[email protected]>
* Bug 918: Fix EOS Regression: Only use pts>duration for EOS if duration > 0 ↵Sven Gothel2013-12-111-2/+2
| | | | | | (camera or other sources may not have duration) Regression of commit 8a8ed735f6631b2da7bf605c5c3dda4e0fc13905
* ALAudioSink: Fix stop and flush of OpenAL sourceSven Gothel2013-12-111-115/+125
| | | | | | | | | | - stopImpl() shall always issue alSourceStop(..) if state is not STOPPED - Remove 'flush' hint for dequeueBuffer(..), we perform proper flush in respective method, see below - flush() needs to issue: - stopImpl() - which should already dequeue all buffers - Explicitly dequeue all buffers: via 'alSourcei(alSource[0], AL.AL_BUFFER, 0)' - Then dequeue manually processed buffers: dequeueBuffer( false /* wait */ ); - And dequeue _all_ buffers: dequeueForceAll();
* Bug 918 (2/2): Determine StreamWorker usage after stream-init ; Fix seek(..) ↵Sven Gothel2013-12-111-87/+174
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ; 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
* Bug 918: GLMediaPlayer: Fix Deadlock if EOS happens after pause/resume ↵Sven Gothel2013-12-111-10/+18
| | | | | | | | | (seek) - Tested w/ seeking 'Audio Only' and Matroska Test stream was default of MovieSimple: http://video.webmfiles.org/big-buck-bunny_trailer.webm while disabling video (-vid -2)
* Bug 918 (1/2): Use StreamWorker in 'Audio Only' mode, since no ↵Sven Gothel2013-12-111-1/+1
| | | | | | | | 'getNextTexture(..)' is issued here! Thanks to Xerxes to analyze this issue thoroughly. TODO: Implement EOS for 'Audio Only' and test seek, pause, etc .. - Apply manual tests in MovieSimple
* Bug 904: 'User Vertical Flip' for GLJPanel w/o vertical flip must be ↵Sven Gothel2013-12-101-5/+16
| | | | considered in AWTTilePainter: 'Origin of GL image is still on Bottom'
* GLDrawableFactory: destroy() -> shutdownImpl() - Add DEBUG output in ↵Sven Gothel2013-11-284-6/+17
| | | | implementation
* Fix Bug 902: FFMPEGMediaPlayer uses IOUtil.decodeURIIfFilePath(uri) to ↵Sven Gothel2013-11-281-2/+7
| | | | decode proper file-scheme if applicable - otherwise encoded ASCII URI.
* Bug 890 - GLContextImpl's Version Validation: Only validate Integer based ↵Sven Gothel2013-11-181-7/+17
| | | | | | Version if requested context or string-version is >= 3.0 .. otherwise, spec doesn't require integer based version to work!
* EGLGraphicsConfiguration: Add deauled DEBUG output for failed EGL-Config QueriesSven Gothel2013-11-181-4/+41
|
* WindowsWGLGraphicsConfigurationFactory: Fix chosenPFDID -> recommendedIndex ↵Sven Gothel2013-11-071-20/+33
| | | | | | | | (!skipCapsChooser mode) Regression of commit cf1163fc88976e7087d3a17524a49139e35a4708: Commit dropped seeking recommendedIndex of chosenPFDID within cleaned-up availableCaps when in !skipCapsChooser mode.
* WGLGLCapabilities: Print pfdID as decimal (convention)Sven Gothel2013-11-071-1/+1
|
* Bug 890 - Fix GLES3 Profile Mapping, i.e. GL2ES2 queries and mappings; ↵Sven Gothel2013-11-077-34/+47
| | | | | | | | | | | | | | | | | | | | Validate isGLES*() usage and definition ; Add and use ShaderCode.createExtensionDirective(..) - Fix GLES3 Profile Mapping, i.e. GL2ES2 queries and mappings - GLProfile: Add GL2ES2 -> ES3 mapping - EGLContext: Reuqest major '3' for ES3 - EGLGLCapabilities/EGLGraphicsConfiguration: Consider EGLExt.EGL_OPENGL_ES3_BIT_KHR - Validate isGLES*() usage and definition - Fix BuildComposablePipeline's isGLES() code - For GLSL related queries use isGLES() instead of isGLES2(), which would exclude ES3 - Add and use ShaderCode.createExtensionDirective(..) - Supporting creating GLSL extension directives while reusing strings from GLExtensions - Minor cleanup of GLContextImpl.setGLFuncAvail(..)
* Bug 894 - GLDrawableFactory* [dummy|offscreen] Surface creation w/ own ↵Sven Gothel2013-11-064-36/+28
| | | | device does _not_ require locking on global shared device.
* Bug 888 - Validate CPU Runtime Performance: Only use one HashMap to collect ↵Sven Gothel2013-11-051-30/+38
| | | | | | | | unified gl- and glx-extension strings. - HashMap is more efficient than HashSet - No need to use sub HashSet's .. we can use global HashMap. 'Loosing' duplicate GLX entries due to GL duplicates is acceptable.
* Bug 888 / Bug 891 - Enhance GLCapabilities-Query: Apply changes of commit ↵Sven Gothel2013-11-057-105/+192
| | | | | | | 613e33ee8ffc1f2b9c5db1e1b5bb5253a159ed6d to EGL and WGL. Note: WGL config query is already performed as a bulk operation. Note: OSX does not perform such queries.
* Bug 888 - Validate CPU Runtime Performance: ↵Sven Gothel2013-11-042-61/+129
| | | | | | | | | | | | | | | | | | | | X11GLXGraphicsConfiguration.GLXFBConfig2GLCapabilities(..) X11GLXGraphicsConfiguration.GLXFBConfig2GLCapabilities(..) ran over all FB configs and for each it grabbed native config values separately. Fetching them in bulk mode saves around 7% of this function's cost. Also reuse XRenderPictFormat instance for 'XRenderDirectFormat XRenderFindVisualFormat(..)' call, saving a few NIO creation cycles w/ StructAccessor. Biggest savior is X11GLXGraphicsConfigurationFactory.chooseGraphicsConfigurationFBConfig()'s fast path w/o chooser and usable 1st FBConfig. Here we only issue 'GLXFBConfig2GLCapabilities(..)' on the first valid entry. Test w/ 50 X11GLXGraphicsConfigurationFactory.chooseGraphicsConfigurationFBConfig() invocations: - pre change: 1.708 ms - post change: 650 ms Time is no spent almost solely on native glXChooseFBConfig (546ms).
* GLContextImpl: Move sharedContextHandle check to makeCurrentWithinLock(..) ↵Sven Gothel2013-11-028-90/+54
| | | | and let it fail there instead of within impl. class, only pass the handle - simplifies and removes redundancy.
* GLRendererQuirks: Add GLSharedContextBuggy ('Mesa Intel 9.2.1' and ↵v2.1.2Sven Gothel2013-11-011-5/+23
| | | | | | | 'Hisilicon Immersion.16') Note: Even though Mesa Intel driver crashes w/ heavy multithreading (Bug 873), it works well w/ our multithreaded GLMediaPlayer.
* Bug 885 - GLMediaPlayer: Allow single threaded mode - Especially where ↵Sven Gothel2013-11-013-55/+133
| | | | | | | | | | | | multiple media textures (Android) or shared GL context are not usable. - GLMediaPlayer: - TEXTURE_COUNT_MIN is the new minimum: '1' - i.e. no multithreading, single threaded player - TEXTURE_COUNT_DEFAULT is '4' - multithreaded - GLMediaPlayerImpl: - Add Single threaded mode, but perform initStreamImpl(..) off-thread. -
* Clarify Bug 692: Unbinding a VAO does _not_ imply unbinding of set VBOs ↵Sven Gothel2013-11-012-11/+30
| | | | | | | | | | | | | | | | | | | | | (spec doesn't mention it, and it does not show results w/ CPU sourced rendering) ; Clean up GLBuffer*Tracker + * Note that VAO initialization does unbind the VBO .. since otherwise they are still bound + * and the CPU_SRC test will fail!<br/> + * The OpenGL spec does not mention that unbinding a VAO will also unbind the bound VBOs + * during their setup.<br/> + * Local tests here on NV and AMD proprietary driver resulted in <i>no ourput image</i> + * when not unbinding said VBOs before the CPU_SRC tests.<br/> + * Hence Bug 692 Comment 5 is invalid, i.e. <https://jogamp.org/bugzilla/show_bug.cgi?id=692#c5>, + * and we should throw an exception to give users a hint! Leaving uncommented code in GLBufferStateTracker .. +++ - Clean up GLBuffer*Tracker - Use final - Use static final keyNotFound value.
* EGLDrawableFactory.createDummySurfaceImpl: fix caps to pbuffer - since we do ↵Sven Gothel2013-10-312-1/+2
| | | | | | | use EGLDummyUpstreamSurfaceHook .. a pbuffer offscreen fixOffscreenBitOnly(..) may yield FBO queries / chosing .. usually doesn't matter (on devices here), but not accurate.
* GLDrawableFactory: createDummy*(..) Pass GLCapabilitiesImmutable + ↵Sven Gothel2013-10-312-10/+9
| | | | GLCapabilitiesChooser instead of GLProfile, allowing using same or similar caps - important for sharing ctx
* AndroidGLMediaPlayerAPI14: Avoid possible NPEsSven Gothel2013-10-311-44/+50
|
* Fix Bug 875 - Cleanup branch using VersionNumber (fix 'Int' check ↵Sven Gothel2013-10-303-59/+89
| | | | | | | | | | | | strictMatch minor) and reuse isES; EGLContext: Use strictMatch for setGLFunctionAvailability() and handle failure; EGLDrawableFactory: Either detect ES3 or ES2. - Cleanup branch using VersionNumber (fix 'Int' check strictMatch minor) and reuse isES - EGLContext: Use strictMatch for setGLFunctionAvailability() and handle failure On ES, we require strictMatch, cleanup if failing. - EGLDrawableFactory: Either detect ES3 or ES2. Both only available with proper EGL context creation for ES profiles (TODO)