Name

    CHROMIUM_resize

Name Strings

    GL_CHROMIUM_resize

Version

    Last Modified Date: July 26, 2017

Dependencies

    OpenGL ES 2.0 is required.

Overview

    This extension allows a client to request that the output surface be
    dynamically resized.

Issues

    None

New Tokens

    Accepted by the <color_space> parameter of glResizeCHROMIUM:
    GL_COLOR_SPACE_UNSPECIFIED_CHROMIUM               0x8AF1
    GL_COLOR_SPACE_SCRGB_LINEAR_CHROMIUM              0x8AF2
    GL_COLOR_SPACE_SRGB_CHROMIUM                      0x8AF3
    GL_COLOR_SPACE_DISPLAY_P3_CHROMIUM                0x8AF4

New Procedures and Functions

    The command

        glResizeCHROMIUM(GLint width,
                         GLint height,
                         GLfloat scale_factor,
                         GLenum color_space,
                         GLboolean alpha);

    changes the current output surface to be changed.
    <width> and <height> specify the dimensions for the surface in pixels.
    <scale_factor> specifies the device scale factor for the surface.
    <color_space> specifies the color space in which the pixels of the surface
    should be interpreted by the display system. Note that this value does not
    impact blending. All blending will be done on the raw pixel values.
    The values have the following interpretation:
        GL_COLOR_SPACE_UNSPECIFIED_CHROMIUM: Indicates that the display system
        should use whatever its default interpretation of color values is.
        GL_COLOR_SPACE_SRGB_CHROMIUM: Indicates that the display system should
        interpret output colors as being sRGB values. On EGL-based systems this
        corresponds to using the default value, EGL_GL_COLORSPACE_LINEAR_KHR,
        for the EGL_GL_COLORSPACE_KHR property in EGL_KHR_gl_colorspace. 
        GL_COLOR_SPACE_DISPLAY_P3_CHROMIUM: Indicates that the display system
        should interpret output colors as being in P3 D65 color space. As above,
        this corresponds to the EGL_GL_COLORSPACE_DISPLAY_P3_LINEAR_EXT value
        from EGL_EXT_gl_colorspace_display_p3_linear.
        GL_COLOR_SPACE_SCRGB_LINEAR_CHROMIUM: Indicates that the display system
        should interpret output colors as being in linear-gamma extended scRGB
        color space. On Windows, this will result in HDR being enabled for the
        surface, when possible.
    <alpha> indicates whether or not the surface must allocate an alpha channel

Errors

    A context lost will result when this call fails, either because of an
    invalid parameter value or because of a runtime error such as an out of
    memory condition.

New State

    None.

Revision History

    7/24/2017    Initial checkin. This extension had been in use for several
                 years without documentation prior to this.

