Name

    ANDROID_image_native_buffer

Name Strings

    EGL_ANDROID_image_native_buffer

Contributors

    Mathias Agopian
    Jamie Gennis
    Jesse Hall

Contact

    Jesse Hall, Google Inc. (jessehall 'at' google.com)

Status

    Complete

Version

    Version 1, November 28, 2012

Number

    EGL Extension #49

Dependencies

    EGL 1.2 is required.

    EGL_KHR_image_base is required.

    This extension is written against the wording of the EGL 1.2
    Specification.

Overview

    This extension enables using an Android window buffer (struct
    ANativeWindowBuffer) as an EGLImage source.

New Types

    None.

New Procedures and Functions

    None.

New Tokens

    Accepted by the <target> parameter of eglCreateImageKHR:

    EGL_NATIVE_BUFFER_ANDROID              0x3140

Changes to Chapter 3 of the EGL 1.2 Specification (EGL Functions and Errors)

    Add to section 2.5.1 "EGLImage Specification" (as defined by the
    EGL_KHR_image_base specification), in the description of
    eglCreateImageKHR:

   "Values accepted for <target> are listed in Table aaa, below.

      +----------------------------+-----------------------------------------+
      |  <target>                  |  Notes                                  |
      +----------------------------+-----------------------------------------+
      |  EGL_NATIVE_BUFFER_ANDROID |  Used for ANativeWindowBuffer objects   |
      +----------------------------+-----------------------------------------+
       Table aaa.  Legal values for eglCreateImageKHR <target> parameter

    ...

    If <target> is EGL_NATIVE_BUFFER_ANDROID, <dpy> must be a valid display,
    <ctx> must be EGL_NO_CONTEXT, <buffer> must be a pointer to a valid
    ANativeWindowBuffer object (cast into the type EGLClientBuffer), and
    attributes other than EGL_IMAGE_PRESERVED_KHR are ignored."

    Add to the list of error conditions for eglCreateImageKHR:

      "* If <target> is EGL_NATIVE_BUFFER_ANDROID and <buffer> is not a
         pointer to a valid ANativeWindowBuffer, the error EGL_BAD_PARAMETER
         is generated.

       * If <target> is EGL_NATIVE_BUFFER_ANDROID and <ctx> is not
         EGL_NO_CONTEXT, the error EGL_BAD_CONTEXT is generated.

       * If <target> is EGL_NATIVE_BUFFER_ANDROID and <buffer> was created
         with properties (format, usage, dimensions, etc.) not supported by
         the EGL implementation, the error EGL_BAD_PARAMETER is generated."

Issues

    1. Should this extension define what combinations of ANativeWindowBuffer
    properties implementations are required to support?

    RESOLVED: No.

    The requirements have evolved over time and will continue to change with
    future Android releases. The minimum requirements for a given Android
    version should be documented by that version.

Revision History

#1 (Jesse Hall, November 28, 2012)
    - Initial draft.
