Summary: | Regression of Bug 862 fix: InternalError GLES1ProcAddressTable not matching jogamp.opengl.es3.GLES3 | ||
---|---|---|---|
Product: | [JogAmp] Jogl | Reporter: | Brice Figureau <brice.figureau> |
Component: | embedded | Assignee: | Sven Gothel <sgothel> |
Status: | RESOLVED FIXED | ||
Severity: | critical | ||
Priority: | --- | ||
Version: | 2 | ||
Hardware: | embedded_arm | ||
OS: | other | ||
Type: | --- | SCM Refs: |
85be81387d33224036b3fe2b02d74aab2926e028
9ce3f5f0d47f21a7dc229f0df03ac0fbda295f35
2481774c4a4a5d734dbeb2f7d8963f45d1b2a437
|
Workaround: | --- | ||
Attachments: | jogl 2.1.2 - logcat - failing to find a profile |
Description
Brice Figureau
2013-10-28 21:07:25 CET
The devices that work are all ES2.0, the one that doesn't (Sony Xperia ZL) uses and Adreno 320 and is able of ES3.0. Reading the differences in log between in 2.1.0 and 2.1.2, I see that the contextFQN used to set the proc address table map is not the same between both version when initializing the context for ES1.0. The 2.1.2 gives: > GLContext.setGLFuncAvail.0 validated FQN: .egl_decon_0-0x3000008 - 3.0 (ES profile, hardware) - OpenGL ES-CM 1.1 V@6.0 AU@04.01.02.44.002 the 2.1.0 gives: > GLContext.setGLFuncAvail.0 validated FQN: .egl_decon_0-0x1000008 - 1.0 (ES profile, hardware) - OpenGL ES-CM 1.1 V@6.0 AU@04.01.02.44.002 So my understanding is that later on, when jogl tries to map that to a GLES1 kind of jogl class, it fails with: >EGLDrawableFactory.mapAvailableEGLESConfig: INFO: context create/makeCurrent failed >javax.media.opengl.GLException: Not a GL3ES3 implementation > at jogamp.opengl.es1.GLES1Impl.getGL3ES3(GLES1Impl.java:4935) > at jogamp.opengl.GLContextImpl.makeCurrentWithinLock(GLContextImpl.java:659) > at jogamp.opengl.GLContextImpl.makeCurrent(GLContextImpl.java:562) > at jogamp.opengl.GLContextImpl.makeCurrent(GLContextImpl.java:519) > at jogamp.opengl.egl.EGLDrawableFactory.mapAvailableEGLESConfig(EGLDrawableFactory.java:482) > at jogamp.opengl.egl.EGLDrawableFactory.createEGLSharedResourceImpl(EGLDrawableFactory.java:612) > at jogamp.opengl.egl.EGLDrawableFactory.getOrCreateSharedResourceImpl(EGLDrawableFactory.java:574) > at jogamp.opengl.egl.EGLDrawableFactory.getOrCreateSharedResourceImpl(EGLDrawableFactory.java:84) > at jogamp.opengl.GLDrawableFactoryImpl.getOrCreateSharedResource(GLDrawableFactoryImpl.java:94) > at jogamp.opengl.GLDrawableFactoryImpl.createSharedResourceImpl(GLDrawableFactoryImpl.java:123) > at javax.media.opengl.GLDrawableFactory.createSharedResource(GLDrawableFactory.java:323) > at javax.media.opengl.GLProfile.initProfilesForDeviceCritical(GLProfile.java:1765) > at javax.media.opengl.GLProfile.initProfilesForDevice(GLProfile.java:1698) > at javax.media.opengl.GLProfile.initProfilesForDefaultDevices(GLProfile.java:1666) > at javax.media.opengl.GLProfile.access$100(GLProfile.java:76) > at javax.media.opengl.GLProfile$1.run(GLProfile.java:155) > at java.security.AccessController.doPrivileged(AccessController.java:45) > at javax.media.opengl.GLProfile.initSingleton(GLProfile.java:123) > at javax.media.opengl.GLProfile.getProfileMap(GLProfile.java:2063) > at javax.media.opengl.GLProfile.get(GLProfile.java:906) > at javax.media.opengl.GLProfile.getGL2ES2(GLProfile.java:827) > at com.daysofwonder.tt.android.TTActivity.getGLProfile(TTActivity.java:450) > at com.daysofwonder.tt.android.TTActivity.onCreate(TTActivity.java:197) > at android.app.Activity.performCreate(Activity.java:5008) > at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) > at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2034) > at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2095) > at android.app.ActivityThread.access$600(ActivityThread.java:137) > at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1206) > at android.os.Handler.dispatchMessage(Handler.java:99) > at android.os.Looper.loop(Looper.java:213) > at android.app.ActivityThread.main(ActivityThread.java:4791) > at java.lang.reflect.Method.invokeNative(Native Method) > at java.lang.reflect.Method.invoke(Method.java:511) > at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) > at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) > at dalvik.system.NativeStart.main(Native Method) I'm looking now at the GLContextImpl.setGLFuncAvailability. I pushed a github pull request that fixes the problem on our ES3 and ES2 devices, and that apparently still works on desktop: https://github.com/sgothel/jogl/pull/72 Regression introduced w/ fix for Bug 862 commit 34b35c5a0a379a6b4c0b23b9d347a0b1338f0239 2481774c4a4a5d734dbeb2f7d8963f45d1b2a437 - 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) .. adding prereq. commits - complete now 85be81387d33224036b3fe2b02d74aab2926e028 ES version should be strictly validated 9ce3f5f0d47f21a7dc229f0df03ac0fbda295f35 Safeguard setGLFunctionAvailability(.. strictMatch=false.. ) operation, throw InternalError if failing 2481774c4a4a5d734dbeb2f7d8963f45d1b2a437 See comment 5 |