Name

    CHROMIUM_schedule_overlay_plane

Name Strings

    GL_CHROMIUM_schedule_overlay_plane

Version

    Last Modified Date: April 2, 2014

Dependencies

    OpenGL ES 2.0 is required.

Overview

    This extension allows a client to request a texture be presented as a
    hardware overlay plane along with the framebuffer. The expectation is that
    all the planes scheduled since the last call to glSwapBuffers or
    glPostSubBufferCHROMIUM are displayed atomically with the framebuffer during
    the next call to swap buffers. Scheduled planes are not stateful and need
    to be rescheduled after the buffers were swapped.

    This extension could be used in conjunction with OES_EGL_image_external
    to render into buffers suitable for scanout and present them directly
    via display hardware without further compositing in GLES.

    An example use case would be displaying a video buffer which was decoded by
    dedicated hardware as part of a GLES application.

Issues

    None

New Tokens

    None

New Procedures and Functions

    The command

        glScheduleOverlayPlaneCHROMIUM (GLint plane_z_order,
                                        GLenum plane_transform,
                                        GLuint overlay_texture_id,
                                        GLint bounds_x,
                                        GLint bounds_y,
                                        GLint bounds_width,
                                        GLint bounds_height,
                                        GLfloat uv_x,
                                        GLfloat uv_y,
                                        GLfloat uv_width,
                                        GLfloat uv_height);

    Sets the overlay plane to be presented synchronously along with the primary
    framebuffer during the call to swap buffers.
    <plane_z_order> specifies the stacking order of the plane relative to the
    main framebuffer located at index 0.
    <plane_transform> specifies how the buffer is to be transformed during
    composition.
    <overlay_texture_id> is the buffer to be presented by the overlay.
    <bounds_x>, <bounds_y>, <bounds_width>, <bounds_height> specify where it is
    supposed to be on the screen.
    <uv_x>, <uv_y>, <uv_width>, <uv_height> specify the region within the
    buffer to be placed inside the bounds.

Errors

    None.

New State

    None.
