diff options
author | Sven Gothel <[email protected]> | 2013-11-07 08:36:46 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2013-11-07 08:36:46 +0100 |
commit | 2dce639c479f820d1a1e701f5eddffc4b02f5e0f (patch) | |
tree | 272c5912c8ad6577f6c6d24b469fff1299efb5d0 /src/jogl/classes/jogamp/opengl/egl | |
parent | 0a06ca59520c611a3d67fe0f0ddbdcfef7ae3870 (diff) |
Bug 890 - Fix GLES3 Profile Mapping, i.e. GL2ES2 queries and mappings; 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(..)
Diffstat (limited to 'src/jogl/classes/jogamp/opengl/egl')
5 files changed, 25 insertions, 18 deletions
diff --git a/src/jogl/classes/jogamp/opengl/egl/EGLContext.java b/src/jogl/classes/jogamp/opengl/egl/EGLContext.java index 903a4c461..b2f06dce6 100644 --- a/src/jogl/classes/jogamp/opengl/egl/EGLContext.java +++ b/src/jogl/classes/jogamp/opengl/egl/EGLContext.java @@ -135,13 +135,7 @@ public class EGLContext extends GLContextImpl { @Override protected void destroyImpl() throws GLException { - if (!EGL.eglDestroyContext(drawable.getNativeSurface().getDisplayHandle(), contextHandle)) { - final int eglError = EGL.eglGetError(); - if(EGL.EGL_SUCCESS != eglError) { /* oops, Mesa EGL impl. may return false, but has no EGL error */ - throw new GLException("Error destroying OpenGL context " + toHexString(contextHandle) + - ": error code " + toHexString(eglError)); - } - } + destroyContextARBImpl(contextHandle); } @Override @@ -151,7 +145,13 @@ public class EGLContext extends GLContextImpl { @Override protected void destroyContextARBImpl(long _context) { - // FIXME + if (!EGL.eglDestroyContext(drawable.getNativeSurface().getDisplayHandle(), _context)) { + final int eglError = EGL.eglGetError(); + if(EGL.EGL_SUCCESS != eglError) { /* oops, Mesa EGL impl. may return false, but has no EGL error */ + throw new GLException("Error destroying OpenGL context " + toHexString(_context) + + ": error code " + toHexString(eglError)); + } + } } @Override @@ -180,12 +180,14 @@ public class EGLContext extends GLContextImpl { } } + // Cannot check extension 'EGL_KHR_create_context' before having one current! + final IntBuffer contextAttrsNIO; final int contextVersionReq, contextVersionAttr; { if ( glProfile.usesNativeGLES3() ) { contextVersionReq = 3; - contextVersionAttr = 2; + contextVersionAttr = 3; } else if ( glProfile.usesNativeGLES2() ) { contextVersionReq = 2; contextVersionAttr = 2; @@ -195,6 +197,7 @@ public class EGLContext extends GLContextImpl { } else { throw new GLException("Error creating OpenGL context - invalid GLProfile: "+glProfile); } + // EGLExt.EGL_CONTEXT_MAJOR_VERSION_KHR == EGL.EGL_CONTEXT_CLIENT_VERSION final int[] contextAttrs = new int[] { EGL.EGL_CONTEXT_CLIENT_VERSION, contextVersionAttr, EGL.EGL_NONE }; contextAttrsNIO = Buffers.newDirectIntBuffer(contextAttrs); } diff --git a/src/jogl/classes/jogamp/opengl/egl/EGLDrawable.java b/src/jogl/classes/jogamp/opengl/egl/EGLDrawable.java index ab28fb3fb..f184edae3 100644 --- a/src/jogl/classes/jogamp/opengl/egl/EGLDrawable.java +++ b/src/jogl/classes/jogamp/opengl/egl/EGLDrawable.java @@ -166,7 +166,9 @@ public abstract class EGLDrawable extends GLDrawableImpl { @Override public GLDynamicLookupHelper getGLDynamicLookupHelper() { - if (getGLProfile().usesNativeGLES2()) { + if (getGLProfile().usesNativeGLES3()) { + return getFactoryImpl().getGLDynamicLookupHelper(3); + } else if (getGLProfile().usesNativeGLES2()) { return getFactoryImpl().getGLDynamicLookupHelper(2); } else if (getGLProfile().usesNativeGLES1()) { return getFactoryImpl().getGLDynamicLookupHelper(1); diff --git a/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java b/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java index 4202c7454..1438107fe 100644 --- a/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java +++ b/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java @@ -615,12 +615,7 @@ public class EGLDrawableFactory extends GLDrawableFactoryImpl { } if( null != eglES2DynamicLookupHelper ) { madeCurrentES3 = mapAvailableEGLESConfig(adevice, 3, hasPBufferES3ES2, rendererQuirksES3ES2, ctpES3ES2); - if( madeCurrentES3 ) { - // Only support highest - FIXME: Proper ES2/ES3 profile selection - madeCurrentES2 = false; - } else { - madeCurrentES2 = mapAvailableEGLESConfig(adevice, 2, hasPBufferES3ES2, rendererQuirksES3ES2, ctpES3ES2); - } + madeCurrentES2 = mapAvailableEGLESConfig(adevice, 2, hasPBufferES3ES2, rendererQuirksES3ES2, ctpES3ES2); } else { madeCurrentES2 = false; madeCurrentES3 = false; @@ -668,7 +663,7 @@ public class EGLDrawableFactory extends GLDrawableFactoryImpl { @Override public GLDynamicLookupHelper getGLDynamicLookupHelper(int esProfile) { - if (2==esProfile) { + if ( 2==esProfile || 3==esProfile ) { return eglES2DynamicLookupHelper; } else if (1==esProfile) { return eglES1DynamicLookupHelper; diff --git a/src/jogl/classes/jogamp/opengl/egl/EGLGLCapabilities.java b/src/jogl/classes/jogamp/opengl/egl/EGLGLCapabilities.java index b61624d79..e28b53235 100644 --- a/src/jogl/classes/jogamp/opengl/egl/EGLGLCapabilities.java +++ b/src/jogl/classes/jogamp/opengl/egl/EGLGLCapabilities.java @@ -101,7 +101,6 @@ public class EGLGLCapabilities extends GLCapabilities { if(null == glp) { return true; } - /** FIXME: EGLExt.EGL_OPENGL_ES3_BIT_KHR OK ? */ if(0 != (renderableType & EGLExt.EGL_OPENGL_ES3_BIT_KHR) && glp.usesNativeGLES3()) { return true; } @@ -118,6 +117,9 @@ public class EGLGLCapabilities extends GLCapabilities { } public static GLProfile getCompatible(EGLGraphicsDevice device, int renderableType) { + if(0 != (renderableType & EGLExt.EGL_OPENGL_ES3_BIT_KHR) && GLProfile.isAvailable(device, GLProfile.GLES3)) { + return GLProfile.get(device, GLProfile.GLES3); + } if(0 != (renderableType & EGL.EGL_OPENGL_ES2_BIT) && GLProfile.isAvailable(device, GLProfile.GLES2)) { return GLProfile.get(device, GLProfile.GLES2); } @@ -145,6 +147,9 @@ public class EGLGLCapabilities extends GLCapabilities { if(0 != (renderableType & EGL.EGL_OPENGL_ES2_BIT)) { if(!first) sink.append(", "); sink.append("GLES2"); first=false; } + if(0 != (renderableType & EGLExt.EGL_OPENGL_ES3_BIT_KHR)) { + if(!first) sink.append(", "); sink.append("GLES3"); first=false; + } if(0 != (renderableType & EGL.EGL_OPENVG_API)) { if(!first) sink.append(", "); sink.append("VG"); first=false; } diff --git a/src/jogl/classes/jogamp/opengl/egl/EGLGraphicsConfiguration.java b/src/jogl/classes/jogamp/opengl/egl/EGLGraphicsConfiguration.java index dd7bf99cb..789168b68 100644 --- a/src/jogl/classes/jogamp/opengl/egl/EGLGraphicsConfiguration.java +++ b/src/jogl/classes/jogamp/opengl/egl/EGLGraphicsConfiguration.java @@ -415,6 +415,8 @@ public class EGLGraphicsConfiguration extends MutableGraphicsConfiguration imple attrs.put(idx++, EGL.EGL_OPENGL_ES_BIT); } else if(caps.getGLProfile().usesNativeGLES2()) { attrs.put(idx++, EGL.EGL_OPENGL_ES2_BIT); + } else if(caps.getGLProfile().usesNativeGLES3()) { + attrs.put(idx++, EGLExt.EGL_OPENGL_ES3_BIT_KHR); } else { attrs.put(idx++, EGL.EGL_OPENGL_BIT); } |