Name

    MESA_framebuffer_flip_y

Name Strings

    GL_MESA_framebuffer_flip_y

Contact

    Fritz Koenig <frkoenig@google.com>

Contributors

    Fritz Koenig, Google
    Kristian Høgsberg, Google
    Chad Versace, Google
    Heinrich Fink, DAQRI

Status

    Proposal

Version

    Version 3, August, 2019

Number

    OpenGL Extension #540
    OpenGL ES Extension #302

Dependencies

    Requires OpenGL ES 3.0, OpenGL 4.3, or ARB_framebuffer_no_attachments.

Overview

    This extension defines a new framebuffer parameter,
    GL_FRAMEBUFFER_FLIP_Y_MESA, that changes the behavior of the reads and
    writes to the framebuffer attachment points. When GL_FRAMEBUFFER_FLIP_Y_MESA
    is GL_TRUE, render commands and pixel transfer operations access the
    backing store of each attachment point with an y-inverted coordinate
    system. This y-inversion is relative to the coordinate system set when
    GL_FRAMEBUFFER_FLIP_Y_MESA is GL_FALSE.

    Access through TexSubImage2D and similar calls will notice the effect of
    the flip when they are not attached to framebuffer objects because
    GL_FRAMEBUFFER_FLIP_Y_MESA is associated with the framebuffer object and
    not the attachment points.

IP Status

    None

Issues

    None

New Procedures and Functions

    OpenGL ES must provide the following functions:

    void FramebufferParameteriMESA(enum target, enum pname, int param);
    void GetFramebufferParameterivMESA(enum target, enum pname, int *params);

New Types

    None

New Tokens

    Accepted by the <pname> argument of FramebufferParameteriMESA and
    GetFramebufferParameterivMESA:

        GL_FRAMEBUFFER_FLIP_Y_MESA                      0x8BBB

Interactions with OpenGL 4.3, OpenGL ES 3.1, ARB_framebuffer_no_attachments
and any other versions and extensions that provide the entry points
FramebufferParameteri and GetFramebufferParameteriv

        Token GL_FRAMEBUFFER_FLIP_Y_MESA is accepted as the <pname> argument of
        FramebufferParameteri and GetFramebufferParameteriv.

Errors

    An INVALID_OPERATION error is generated by GetFramebufferParameteriv or
    GetFramebufferParameterivMESA if the default framebuffer is bound
    to <target> and <pname> is GL_FRAMEBUFFER_FLIP_Y_MESA.



Revision History

    Version 3, August, 2019
        Allow OpenGL ES 3.0 to implement by adding functions
        FramebufferParameteriMESA and GetFramebufferParameterivMESA which were
        previously only available in OpenGL ES 3.1.

    Version 2, June, 2019
        Enable extension for OpenGL 4.3 and beyond

    Version 1, June, 2018
        Initial draft (Fritz Koenig)
