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 2, June 4, 2019

Number

    OpenGL Extension #540
    OpenGL ES Extension #302

Dependencies

    OpenGL ES 3.1 or OpenGL 4.3 is required, for FramebufferParameteri.

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

    None

New Types

    None

New Tokens

    Accepted by the <pname> argument of FramebufferParameteri and
    GetFramebufferParameteriv:

        GL_FRAMEBUFFER_FLIP_Y_MESA                      0x8BBB

Errors

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



Revision History

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

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