Bug 925

Summary: Accept an ES3 Context, if reported via GL-Version-String w/o EGL_OPENGL_ES3_BIT_KHR
Product: [JogAmp] Jogl Reporter: Sven Gothel <sgothel>
Component: coreAssignee: Sven Gothel <sgothel>
Status: RESOLVED FIXED    
Severity: enhancement CC: gouessej, julien.carlos, org.jogamp, rami.santina, sgothel, xerxes
Priority: ---    
Version: 2   
Hardware: All   
OS: all   
Type: DEFECT SCM Refs:
bbb7f94c015fbfefdff672eb2d261fbd230c4e81 972feb4be95d1c16c71b84694729952e91dda668 ddd5eb35b83ca85dbf43039e8199a7ecf011cdd8
Workaround: TRUE

Description Sven Gothel 2013-12-13 22:23:34 CET
Reflect ES3 Compatibility with ES2.

F1 p322 of the OpenGL ES 3.0.2 Spec claims backward compatibility with ES2,
hence return true for 'glES3.isGLES2()' and allow 'glES3.getGLES2()'.

+++

Accept an ES3 context as such if reported via GL-Version-String.
w/o EGL_OPENGL_ES3_BIT_KHR.

Due to the state of 'implementations not 100% compliant'
accepts a GL-ES context to assume ES3 identity 
if it's GL-Version-String reports ES3.

+++
Comment 1 Sven Gothel 2013-12-19 07:44:37 CET
Dropped ' ES3 Compatibility w/ ES2' to remove side-effects and simplify bug-fix,
i.e.:
  false == es3.isGLES2()
  false == es2.isGLES3()

however common profiles match, i.e.:
  true == es3.isGL2ES2()
  true == es2.isGL2ES2()
Comment 2 Sven Gothel 2013-12-21 14:43:29 CET
bbb7f94c015fbfefdff672eb2d261fbd230c4e81
  Use proper common profile and test compatibility for GLContextImpl's default VAO.

972feb4be95d1c16c71b84694729952e91dda668
      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).
Comment 3 Sven Gothel 2013-12-21 15:18:46 CET
(In reply to comment #1)
> Dropped ' ES3 Compatibility w/ ES2' to remove side-effects and simplify
> bug-fix,
> i.e.:
>   false == es3.isGLES2()
>   false == es2.isGLES3()
> 
> however common profiles match, i.e.:
>   true == es3.isGL2ES2()
>   true == es2.isGL2ES2()

Bug 929 will take care of 'Reflect ES3 Compatibility with ES2'
Comment 4 Sven Gothel 2013-12-21 21:39:21 CET
ddd5eb35b83ca85dbf43039e8199a7ecf011cdd8
    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