Skip to content
  • Laszlo Agocs's avatar
    Expose GLES 3.0 and 3.1 functions · 4535c791
    Laszlo Agocs authored
    
    
    Using the approach we already do for some GLES 3.0 functions we can provide a cross-platform,
    cross-GL-GLES wrapper for ES 3.0 and 3.1 functions too.
    
    Applications only have to take extra care about the version requests (context version
    and version directives in shader code), the rest of their code can stay the same across
    desktop/mobile/embedded, even when ES 3 functions are used.
    
    The new functions are placed to a new subclass which is placed between QOpenGLFunctions
    and the internal QOpenGLExtensions. This is necessary because, unlike with QOpenGLFunctions,
    there is no guarantee that these functions are always available in all configurations.
    
    When running on desktop OpenGL, we resolve as usual. If the OpenGL version contains the
    function in question, either in core or as an extension, it will all just work. This is
    handy because it does not rely on 4.x extensions like GL_ARB_ESx_compatibility, and so
    ES 3.0 functions will be functional on OpenGL 3.x systems too by just setting a 3.x version
    number in the QSurfaceFormat.
    
    We will no longer qFatal on broken systems where the driver returns a 3.0 or 3.1 context without
    the corresponding functions present. Instead, we show a warning and gracefully fall back to
    resolving as usual, via eglGetProcAddress or similar. For functions that are available in ES2 as
    an extension this may just work fine.
    
    Added also an example that runs identically both with OpenGL and OpenGL ES 3 and utilizes some
    ES 3.0 features like instanced drawing.
    
    [ChangeLog] Added QOpenGLExtraFunctions providing OpenGL ES 3.0 and 3.1 function wrappers in
    a cross-platform manner.
    
    Task-number: QTBUG-46161
    Change-Id: I9f929eb61946c35c415b178c4d6ab2c1c958684e
    Reviewed-by: default avatarPaul Olav Tvete <paul.tvete@theqtcompany.com>
    4535c791