Name

    OES_single_precision

Name Strings

    GL_OES_single_precision

Contact

    David Blythe (blythe 'at' bluevoid.com)

Notice

    Copyright (c) 2003-2013 The Khronos Group Inc. Copyright terms at
        http://www.khronos.org/registry/speccopyright.html

Specification Update Policy

    Khronos-approved extension specifications are updated in response to
    issues and bugs prioritized by the Khronos OpenGL ES Working Group. For
    extensions which have been promoted to a core Specification, fixes will
    first appear in the latest version of that core Specification, and will
    eventually be backported to the extension document. This policy is
    described in more detail at
        https://www.khronos.org/registry/OpenGL/docs/update_policy.php

Status

    Ratified by the Khronos BOP, July 23, 2003.
    Ratified by the Khronos BOP, Aug 5, 2004.

Version

    Version 1, September 18, 2014

Number

    OpenGL ES Extension #18 (formerly OpenGL Extension #293)

Dependencies

    None
    The extension is written against the OpenGL 1.3 Specification.

Overview

    This extension adds commands with single-precision floating-point
    parameters corresponding to the commands that only variants that
    accept double-precision floating-point input.  This allows an
    application to avoid using double-precision floating-point
    data types.  New commands are added with an 'f' prefix.


IP Status

    None

Issues

*   An alternative is to suggest platforms define GLfloat and
    GLdouble to be the same type, since it is unlikely that both
    single- and double-precision are required at the same time.

    Resolved: This might create additional confusion, so it is
    better to define new commands.

New Procedures and Functions

    void DepthRangefOES(clampf n, clampf f);
    void FrustumfOES(float l, float r, float b, float t, float n, float f);
    void OrthofOES(float l, float r, float b, float t, float n, float f);

    void ClipPlanefOES(enum plane, const float* equation);
    void GetClipPlanefOES(enum plane, float* equation);

    void glClearDepthfOES(clampf depth);

New Tokens

    None

Additions to Chapter 2 of the OpenGL 1.3 Specification (OpenGL Operation)

    Section 2.10 Coordinate Transformations

      Revise to include 'f' suffix.
      Add alternate suffixed versions of DepthRange (2.10.1).
      Add alternate suffixed versions of Ortho and Frustum (2.10.2).

    Section 2.11 Clipping

      Add alternate suffixed version of ClipPlane.

Additions to Chapter 3 of the OpenGL 1.3 Specification (Rasterization)

    None
        
Additions to Chapter 4 of the OpenGL 1.3 Specification (Per-Fragment
Operations and the Frame Buffer)

    Section 4.2.3 Clearing the Buffers

      Add alternate suffixed version of ClearDepth.

Additions to Chapter 5 of the OpenGL 1.3 Specification (Special Functions)

    None

Additions to Chapter 6 of the OpenGL 1.3 Specification (State and
State Requests)

    None

Additions to Appendix A of the OpenGL 1.3 Specification (Invariance)

    None

Additions to the AGL/GLX/WGL Specifications

    None

Additions to the WGL Specification

    None

Additions to the AGL Specification

    None

Additions to Chapter 2 of the GLX 1.3 Specification (GLX Operation)

    The data representation is client-side only.  The GLX layer
    performs translation between float and double representations.

Additions to Chapter 3 of the GLX 1.3 Specification (Functions and Errors)

Additions to Chapter 4 of the GLX 1.3 Specification (Encoding on the X
Byte Stream)

Additions to Chapter 5 of the GLX 1.3 Specification (Extending OpenGL)

Additions to Chapter 6 of the GLX 1.3 Specification (GLX Versions)

GLX Protocol

    Five new GL rendering commands are added. The following commands
    are sent to the server as part of a glXRender request:

        ClearDepthfOES
            2           8               rendering command length
            2           4308            rendering command opcode
            4           FLOAT32         z

        DepthRangefOES
            2           12              rendering command length
            2           4309            rendering command opcode
            4           FLOAT32         n
            4           FLOAT32         f

        FrustumfOES
            2           28              rendering command length
            2           4310            rendering command opcode
            4           FLOAT32         l
            4           FLOAT32         r
            4           FLOAT32         b
            4           FLOAT32         t
            4           FLOAT32         n
            4           FLOAT32         f

        OrthofOES
            2           28              rendering command length
            2           4311            rendering command opcode
            4           FLOAT32         l
            4           FLOAT32         r
            4           FLOAT32         b
            4           FLOAT32         t
            4           FLOAT32         n
            4           FLOAT32         f

        ClipPlanefOES
            2           24              rendering command length
            2           4312            rendering command opcode
            4           ENUM            plane
            4           FLOAT32         v[0]
            4           FLOAT32         v[1]
            4           FLOAT32         v[2]
            4           FLOAT32         v[3]


    The remaining commands are non-rendering commands.  These commands are
    sent separately (i.e., not as part of a glXRender or glXRenderLarge
    request), using the glXVendorPrivateWithReply request:

        GetClipPlanefOES
            1           CARD8           opcode (X assigned)
            1           17              GLX opcode (glXVendorPrivateWithReply)
            2           4               request length
            4           1421            vendor specific opcode
            4           GLX_CONTEXT_TAG context tag
            4           ENUM            plane
          =>
            1           1               reply
            1                           unused
            2           CARD16          sequence number
            4           0               reply length
            4           FLOAT32         v[0]
            4           FLOAT32         v[1]
            4           FLOAT32         v[2]
            4           FLOAT32         v[3]
            8                           unused

Errors

    None

New State

    None

New Implementation Dependent State

    None

Revision History

    03/27/2003    0.1
        - First draft created.

    07/08/2003    0.2
        - Delete unused Dependencies on section
        - Added extension number

    07/09/2003    0.3
        - Added missing ClearDepthfOES
        - Removed '_'s from names.

    07/22/2003    0.4
        - Added GLX protocol (Thomas Roell)

    06/28/2004    0.5
        - Added ClipPlanef function (Aaftab Munshi)

    04/22/2007    0.6
        - Fixed 'void void' typo (Jon Leech)

    09/18/2014    1
        - Fixed 'clampd' type to 'clampf' in ClearDepthfOES (Bug 12656).
