Name

    OVR_multiview2

Name Strings

    GL_OVR_multiview2

Contact

    Cass Everitt, Oculus (cass.everitt 'at' oculus.com)

Contributors

    John Carmack, Oculus
    Jan Paul van Waveren, Oculus
    Jan-Harald Fredriksen, ARM
    Sam Holmes, Qualcomm
    Daniel Koch, NVIDIA

Status

    Incomplete.

Version

    Last Modified Date:  October 19, 2018
    Author Revision: 0.5

Number

    OpenGL Extension #479
    OpenGL ES Extension #242

Dependencies

    OpenGL 3.0 or OpenGL ES 3.0 is required.

    This extension is written against the OpenGL ES Shading Language 3.00.04
    specification.

    This extension requires OVR_multiview.

Overview

 
	This extension relaxes the restriction in OVR_multiview that only gl_Position
	can depend on ViewID in the vertex shader.  With this change, view-dependent
	outputs like reflection vectors and similar are allowed.

New Tokens

    None.

New Procedures and Functions

    None.

Modifications to The OpenGL ES Shading Language Specification, Version 3.00.04

	Including the following line in a shader can be used to control the language
	features described in this extension:

      #extension GL_OVR_multiview2 : <behavior>

    where <behavior> is as specified in section 3.5.

    A new preprocessor #define is added to the OpenGL ES Shading Language:

      #define GL_OVR_multiview2 1

    If the OVR_multiview2 extension is enabled, the OVR_multiview extension
    is also implicitly enabled.

    Modifications to Section 7.1 "Built-in Language Variables" (as modified by
    OVR_multiview):

    Delete the paragraph which states:

    It is a compile- or link-time error if any output variable other
    than gl_Position is statically dependent on gl_ViewID_OVR. If an
    output variable other than gl_Position is dynamically dependent on
    gl_ViewID_OVR, the values are undefined.

Errors

    None.

Issues

    (1) Does enabling GL_OVR_multiview2 automatically enable GL_OVR_multiview?

    RESOLVED: Yes. This was not specified in early drafts of the extension,
    but this is the behavior of multiple implementations.

Revision History

      Rev.    Date    Author    Changes
      ----  --------  --------  -----------------------------------------
      0.1   03/18/15  cass      Initial draft
      0.5   10/19/18  dgkoch    Add standard boiler plate shader extension language.
                                Add issue 1 and clarify that this extension
                                implicitly enables OVR_multiview.
