| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- New FBObject implementation handling FBO and it's attachments *** API CHANGE: Util -> Core ***
while it's size and sample-count can be reconfigured on the fly.
- com.jogamp.opengl.util.FBObject -> com.jogamp.opengl.FBObject
- agnostic to texture unit
- separate attachments using OO hierarchy reflecting FBO
- handling MSAA and blitting
- no FBO destruction for reconfig (attach/detach)
- New GLFBODrawableImpl impl. an FBObject based GLDrawable
- Instantiated by a dummy native surface (onscreen and invisible)
hooked up to a dummy GLDrawable, which is the delegation for context creation.
- Utilizies ProxySurface.UpstreamSurfaceHook for dummy surface
avoiding specialization for native platforms.
- TODO: Allow to utilize common surface interface as a
dummy-surface to supporting API seperation of
windowing/GL. The latter allows impl. of createGLDrawable(NativeSurface)
with FBO.
- New OffscreenAutoDrawable (extends GLAutoDrawableDelegate)
for all offscreen drawables. Shall replace GLPbuffer.
- New GLCapabilities*.isFBO() / setFBO(boolean) to request FBO offscreen,
similar to isPBuffer(). Rule: if both are requested, FBO shall be favored.
- GLContext adds raw FBO availability query (min. FBO avail),
FBObject contains fine grained queries (TODO: Move parts to GLContext for efficiency).
- Add framebuffer tracking, allowing fast querying:
- GLBase/GLContext:
public int getBoundFramebuffer(int target);
public int getDefaultDrawFramebuffer();
public int getDefaultReadFramebuffer();
- GLContextImpl
public final void setBoundFramebuffer(int target, int framebufferName)
.. called by GL impl bind framebuffer
- GL: getDefaultDrawFramebuffer(), getDefaultReadFramebuffer()
Adding default framebuffer queries being issued by
GL.glBindFramebuffer(target, 0) w/ a default framebuffer, o.e. zero.
This allows a transparent use of a custom FBO even in case the applications
attempts to reset FBO to zero.
Value flow: GL <- GLContext <- GLDrawable,
- GLCapabilities handle fbo/pbuffer seperate, don't disable the other
- GLContext/GL track read/write framebuffer to be queried by FBObject
to determine whether to bind/unbind a framebuffer
- Test cases for multiple FBO w/ and w/o MSAA
Other Features:
- New interface ProxySurface.UpstreamSurfaceHook,
allowing to hook an upstream surface of unknown type
providing lifecycle and information (size, ..) callbacks.
Used for all new dummy NativeSurface impl and SWT GLCanvas.
- GLContext -> GLDrawable propagation context/drawable lifecycle
via ProxySurface.UpstreamSurfaceHook allowing dynamic resources
to react (create, init, ..)
- contextRealized()
- contextMadeCurrent()
- SurfaceChangeable -> MutableSurface
currently only contains setting the surface handle.
TODO: May need to move ProxySurface.UpstreamSurfaceHook -> MutableSurface.UpstreamSurfaceHook,
allowing other impl. classes (NEWT OffscreenWindow) to utilize the new
upstream hookup mechanism - will allow FBO/Dummy window to work.
- SWT GLCanvas using ProxySurface.UpstreamSurfaceHook for proper size
propagation.
- New GLAutoDrawable::getUpstreamWidget(), allowing GLEventListener
to fetch the owning Java side UI element (NEWT, SWT, AWT, ..).
- GLDrawableFactory: Removed createOffscreenSurface() - unused and not GL related
- EGLDrawableFactory handles device/profile avail. mapping
while actually creating context/drawable.
This allows us to learn whether the ES context is software/hardware as well as FBO avail.
- EGLDrawable: Removed secret buckets of EGL configs :)
Employ native surface (X11, WGL, ..) to EGL 'mapping' in
EGLDrawableFactory utilizing new EGLUpstreamSurfaceHook (implements ProxySurface.UpstreamSurfaceHook).
Other Bugs:
- Add CTX_OPTION_DEBUG to ctx/extension cache key since only a debug ctx
may expose the ARB debug capability.
This bug caused lack of ARB/AMD debug functionality.
- Fix GLProfile deadlock (debug mode, w/ EGL/ES, no X11),
dump availability information _after_ lock.
- ImmModeSink draw(): Use GL's glDrawElements(..), don't cast for GL2ES1.
Fixes use for GL2ES2.
- Fix KeyEvent.getKeyChar() comment (-> only stable for keyTyped(..))
Misc:
- Refined alot of API doc
- New GLExtensions holds commonly used GL extension strings,
allows better referencing and usage lookup.
- Move GL (interface) decl. to GLBase
- GLBuffers: Cleanup API doc (format, types)
- TextureIO: Add PAM and PPM static suffix identifier
- GLCapabilities getNumSamples() returns 0 if sampleBuffers is disabled, this seems to be more natural.
- finalized a lot
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
GLProfile and GLContext*
GLProfile: Enhance bootsrapping performance of loading GL*Impl class
- Offthread classloading of all GL*Impl via reflection at startup
reduces startup time here around 12% (800ms down to 700ms).
GLContext*: Enhance bootsrapping performance of querying available GL profiles
- Add PROFILE_ALIASING mode, defaults to true - can be disabled w/ property 'jogl.debug.GLContext.NoProfileAliasing'
- PROFILE_ALIASING:
If true (default), bootstrapping the available GL profiles
will use the highest compatible GL context for each profile,
hence skipping querying lower profiles if a compatible higher one is found.
Linux x86_64 - Nvidia: 28%, 700ms down to 500ms
Linux x86_64 - AMD : 40%, 1500ms down to 900ms
- GL*Impl:
- make fields final: glProfile, _context, buffer*Tracker and glStateTracker
- allow null _context/glProfile in initialization (bootstrapping)
- JoglVersion.getDefaultOpenGLInfo(..)
- add arg: 'boolean withCapabilitiesInfo', allowing to suppres the list of caps
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
GL[Auto]Drawable/GLContext re-association (switch) incl. unit test.
- GLContext adds FBO availability to profile mapping
- GLContext added 'GLDrawable setGLDrawable(GLDrawable readWrite, boolean setWriteOnly)'
allowing to set the write GLDrawable. This method enables switching context/drawable.
Fix GL[Auto]Drawable/GLContext re-association (switch) incl. unit test
Commit eed8508ae1132e5f45f788e9cb3f3d5a1050ac70 impl. of GLAutoDrawable's setContext(..)
enabled proper setting of the GLAutoDrawable context incl. updating the context's drawables.
Test covers:
- remove/set (GLContext, GLEventListener) of GL[Auto]Drawable
- switch (GLContext, GLEventListener) of 2 GLAutoDrawables
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- GLAutoDrawable (compat change - recompile):
- 'void invoke(boolean wait, GLRunnable glRunnable)' -> 'boolean invoke(boolean wait, GLRunnable glRunnable)'
Allows notifying caller whether the task has been executed or at least enqueued.
- GLAutoDrawable add 'GLEventListener removeGLEventListener(int index)'
- This allow one to remove a specific GLEventListener and reusing it (return value).
- GLDrawableImpl remove 'destroy()' to favor 'setRealized(false)'
- Using more common code of GLAutoDrawableBase, i.e. GLPbufferImpl can use defaultDestroyOp().
- Removes redundancy of methods
- GLAutoDrawableBase/Delegate
- better 'default' names to emphasize it's purpose, adding API doc
- includes more generic functionality
- defaultWindowDestroyNotify()
- defaultDestroyOp()
- TestGLAutoDrawableDelegateNEWT demonstrates a simple example w/ all window events handled.
- Fix TestParenting01cSwingAWT's threading use (gl disturbance thread)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(GLWindow, ..); Add new GLAutoDrawableDelegate.
- Refine API doc
- 'void setContext(GLContext)' -> 'GLContext setContext(GLContext)'
- Add note to createContext(GLContext) override
-Use new abstract impl. GLAutoDrawableBase, used by:
- GLWindow
- GLAutoDrawableDelegate
- GLPbufferImpl
- Add new GLAutoDrawableDelegate incl. unit test
|
|
|
|
|
|
|
| |
- Gears w/ 640x480 size and proper aspect ratio frustum
- query type of drawable.getNativeSurface() instead of auto-drawable itself
- RedSquareES2 allow setting no-rotation and aspect-ratio for frustum
- TestInitConcurrentNEWT: Don't use vsync
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
setSwapInterval() deadlock; Reuse JAWT instance; Cleanup
- Fixes
- OSXUtil.CreateCALayer*(..): Pass layer target size (if known).
This fixes Bug #589
- MacOSXWindowSystemInterface-pbuffer.m:
- ALL: displayLink NULL check
- setSwapInterval(..): lock only for variable setting,
could deadlock when start/stop CVDisplayLink
- JAWTWindow.destroy(): use 'surfaceLock' instead of 'synchronized'
- Cleanup / Performance
- JAWTWindow.lockSurface(): Reuse JAWT instance
- MacOSXJAWTWindow: AttachJAWTSurfaceLayer0(..) -> SetJAWTRootSurfaceLayer0(..)
Reflects semantic better.
- DEBUG
- JAWTWindow.updateBounds(..) notify of bounds change
|
|
|
|
| |
onscreen/offscreen-layer resize test.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
locking ; Revise threading code; Proper name for SWT unit tests.
SWT GLCanvas:
- Fix destroy()
drawable.setRealized(false); is being called within dispose() method
- Remove local concurrency hack
[MT-0] The hack: 'final GLContext ctx = getContext(); a = null != ctx ? ctx.something() : 0;'
is thread safe locally, however, w/o covering the hole use case of the caller
it makes no sense to add thread safe code here - would be only an illusion.
In case any of the methods are called outside of a locked state
extra care should be added. Maybe we shall expose locking facilities to the user.
However, since the user shall stick to the GLEventListener model while utilizing
GLAutoDrawable implementations, she is safe due to the implicit locked state.
- Removing out-of-process locking
[MT-1] Claiming the recursive lock in the dispose/display/.. methods
and _then_ issuing a complex off-thread GL task could lead to deadlock.
The GL task could involve calling GLEventListener methods, which itself
could try to manipulate the GLCanvas -> deadlock.
Similar to [MT-0] we may need to either find a proper locking mechanism
or simply ignore it and reduce functionality.
TBH .. the number of scenarious of the mentioned deadlock are very limited
and exotic.
- Revise threading code
[MT-2] Besides the other MT-* remarks, the logic whether to spawn off
the GL task and determination which thread to use is too complex and redundant.
(See isRenderThread(), runInGLThread() and runInDesignatedGLThread())
- Proper name for SWT unit tests.
Reflect the semantics.
|
| |
|
|
|
|
|
|
| |
directory instead of tempdir, so they get archived (CI/jenkins).
Multisample/TestGLReadBufferUtilTextureIOWrite01NEWT: Add offscreen test
|
|
|
|
| |
'List<? extends CapabilitiesImmutable> l'
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Android implementation.
Note: Currently only w/ Android implementation.
Note: On Android there is no way to reliably be notified of the current keyboard state.
It would be best, if your code does not rely on this information
Window adds:
- setKeyboardVisible(boolean)
- isKeyboardVisible() // unreliable on Android
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(TestPNGTextureFromFile[AWT/NEWT])
Properly test combinations of TextureIO usage w/
- NEWT / AWT usage
- GL2 / ES2 usage
- PNG implementations: PNGJ (internal) and AWT
- adding screenshots of result for later analysis
Misc:
- IOUtil.getResource(..) usage
CLASS.class.getClassLoader() -> this.getClass().getClassLoader()
|
|
|
|
| |
'launcher'
|
|
|
|
| |
'com.jogamp.opengl.test.junit.jogl.util.texture'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
specific classes for non Android platforms.
Adapt to GlueGen commits: b3c9951006f9bd863244f1db3d54ac7866d66f0a, 86c1df6fdca183454ff544857f4236b646c4730d
Ensure same Java JAR content regardless of build target (fix).
Separate Android compilation results: jogl.all-android.jar and jogl.test-android.jar
avoiding generating different content w/ non android builds.
Adding ${android.abi} to APK target name (jogl.all-android.apk -> jogl.all-android-armeabi-v7a.apk)
if not generic.
|
|
|
|
| |
w/o GLEventListener
|
|
|
|
| |
allowing custom pixelformat caps.
|
| |
|
|
|
|
| |
.. also adding missing (c) of other graph unit test.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1. Drawable, 2. GLContext
Remove deadlock situation where thread-1 (Animator Thread) holds the GLContext-Lock
and acquires the Surface-Lock, while thread-2 (UI/Main/EDT) holds the Surface-Lock
and attempts to create the GLContext and hence acquires the GLContext-Lock.
A GLContext-Lock and hence makeing the GLContext current requires to hold
the Surface-Lock. The prev. code acquired the locks in reverse order and
allowed the deadlock as described above.
This fix acquires the locks in the proper natural order
1 - Surface-Lock
2 - GLContext-Lock
This fix also renders the use of the non-synchronized behavior invalid,
since it is bogus not to wait for the GLContext lock where it waits for the
Surface lock. It also seems nonsense not to wait for any of both locks
and our code always waited for both (synchronized := true).
The GLContext [set/is]Synchronized(..) methods are removed
and waiting for the lock per default is the correct behavior.
|
|
|
|
| |
one holding the surfaceLock acquiring ctxLock where ctx acquires the surfaceLock
|
|
|
|
| |
cbc77718f01a8190e1a8aa0e9afdc2a3a3403358)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
ProjectFloat Matrix Multiplication of gluUnProject(..) impl.
ProjectFloat's previous gluMultMatricesf(..) used row-major order,
but the replacement multMatrixf(..) uses column-major order (like OpenGL, ..).
Note: The replaced 'gluMultMatrixVecf' by multMatrixVecf() already
used column-major order.
Fix: Reverse the arguments of matrix multiplication
m1 x m2 -> m2 x m1
Added proper API documentation in FloatUtil -> Column Major Order of Linear Matrix Layout
|
|
|
|
| |
commit a058e0a2f465a9bff3e32727edb55592f55c7b38)
|
| |
|
|
|
|
| |
recreation (detach window) on OSX (FF, Safari)
|
|
|
|
| |
instead of static final int values.
|
|
|
|
| |
ReparentOperation' in test.
|
| |
|
| |
|
|
|
|
| |
.. also reverse AWT rotation sign, since NEWT uses the reverse oriantation.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Based on Andres Colubri's initiative and commit 218d67fc0222d7709b21c45792d44501351939c4.
- Reading real screen refresh rate ('stolen' from NEWT)
- Properly handling swap-interval and vsync-to in native code
- Increasing accuracy vsync-to to microseconds
Tested manually w/ TestGearsES2AWT.
|
|
|
|
| |
and custom lib path; MovieCube: '-wait' to wait for debugger.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
General enhancments.
For details about TextureSequence/GLMediaPlayer shader collaboration w/ your own shader source,
see TextureSequence and TexCubeES2 / MovieSimple demo.
TextureSequence allows implementations to provide their own texture lookup function
which may provide color space conversion (YUV) .. or other runtime hw-accel features.
Have a look at the next commit, which provides an Libav/FFMpeg implementation w/ YUV/RGB shader conversion.
MovieCube adds keyboard control (Android: firm touch on display to launch keyboard, don't break it though :)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
translation. Minor fixes for mouse as well.
- AndroidNewtEventFactory
- Android -> NEWT KeyCodes, leave out control keys like HOME, BACK, .. TBD ..
- We don't consume the key event, in case we cannot map it,
so the Android OS has a chance to handle the control keys.
- Key-Release generates a Key Typed event.
- Key/Mouse translate Android time-base (upTime) to Unix.
- AndroidWindow
- set our onKeyListener, using above tranlator
- setFocusable(true) and setFocusableInTouchMode(true) on our SurfaceView,
otherwise no key event will be delivered.
Note: 'requestFocus()' must also be called on the view for key input!
- Test: NEWTGearsES2Activity, which launches the soft key via:
InputMethodManager mgr = (InputMethodManager) win.getAndroidView().getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); // shows keyboard ..
and requests the focus of the view for input.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
generalize shader source storage type to CharSequence[]
Benefits:
- Allows code injection and general shader source editing (before compilation)
- Uses mutable StringBuilder only if editing is intended, hence reduces memory footprint
and String conversion at compilation in such case.
- ShaderCode.create(..) factory methods add nw attribute 'mutableStringBuilder'
if true method returns a mutable StringBuilder instance
which can be edited later on at the costs of a String conversion when passing to
'glShaderSource(int, int, String[], IntBuffer)'.
If <code>false</code> method returns an immutable <code>String</code> instance,
which can be passed to {@link GL2ES2#glShaderSource(int, int, String[], IntBuffer)}
at no additional costs.
- New 'edit' methods in ShaderCode: '
- int insertShaderSource(int shaderIdx, String tag, int fromIndex, CharSequence data);
- int insertShaderSource(int shaderIdx, int position, CharSequence data);
|
|
|
|
| |
prepare for shader code injection.
|
|
|
|
| |
Capabilities/GLContext API 'toString(StringBuilder)'
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Texture
- Add TextureSequence, base interface of GLMediaPlayer to genralize texture streams
- TextureSequence / GLMediaPlayer: Use inner classes for event and texture data
- getLastTexture() shall never return 'null', initialization of TextureSequence (initGLStream(..), etc)
shall provide a TextureFrame w/ the stream's dimension.
- GLMediaPlayerImpl.createTexImageImpl() y-flip defaults to 'false'
impl. shall define y-flip, if required.
- Added MovieCube demo
- Fix Texture: initialize aspectRation for 'wrapping' ctor
-
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
isProgramExecStatusValid()
isProgramValid() was testing whether the linkx status is valid
and whether the executable environment is valid for the shader, see glValidateProgram().
glValidateProgram() may fail on some implementations in some circumstances (APX2500 and Tegra2)
and indeed require all resources are set for execution of the shader program (glDraw*).
This is not a requirement for issueing useProgram(), hence removed this test
and made it available explicit for debugging purposes: isProgramExecStatusValid().
|