Name

    IMG_user_clip_plane 

Name Strings

    GL_IMG_user_clip_plane 

Notice

    Copyright Imagination Technologies Limited, 2005.

Contact

    Imagination Technologies

Status

    FINAL

Version

    1.0, 11 May 2009

Number

    OpenGL ES Extension #57

Dependencies

    The extension is written against the OpenGLES 1.0 Specification.
 
Overview

    The OpenGL ES 1.0 Specification does not support user clip planes. This extension
    adds the support for clip planes. This extension was superceded by OpenGL ES 1.1

IP Status

    None

Issues

    None

New Procedures and Functions

    For the COMMON profile:
        void ClipPlanefIMG( GLenum p, GLfloat eqn[4] );

    For the COMMON_LITE profile:
        void ClipPlanexIMG( GLenum p, GLfixed eqn[4] );



New Tokens

    Accepted by the <pname> parameter of GetIntegerv function: 

        MAX_CLIP_PLANES_IMG               0x0D32

    Accepted by the <pname> parameter of ClipPlanef, ClipPlanex, Enable and Disable:

        CLIP_PLANE0_IMG                   0x3000
        CLIP_PLANE1_IMG                   0x3001
        CLIP_PLANE2_IMG                   0x3002
        CLIP_PLANE3_IMG                   0x3003
        CLIP_PLANE4_IMG                   0x3004
        CLIP_PLANE5_IMG                   0x3005



Additions to OpenGLES 1.0 Specification 

    Additions to Chapter 2.11 of the OpenGL ES 1.0 Specification (Clipping)    

	(append after the last paragraph, after: "User-specified clipping [...]")
        In the presence of IMG_user_clip_plane a number of 6 clip planes will be
        exported to the user. The clip planes will restrict the view volume by defining
        half spaces. The intersection between those half spaces and the view volume
        defined by the back and front clipping plane represents the space where the
        geometry will be clipped. To define a clip plane the application must provide
        a plane equation by calling:

            ClipPlanefIMG(enum p, float eqn[4])
            ClipPlanexIMG(enum p, fixed eqn[4])

        where p describes which clip plane is currently set, CLIP_PLANEi, and eqn are 4
        floating point values, in COMMON profile and 4 fixed values in COMMON_LITE
        profile. The equation is represented by 4 values p1, p2, p3 and p4 which are
        multiplied by the inverse of the modelview matrix transforming them into
        eye space. 

            ( p1' p2' p3' p4' ) = ( p1 p2 p3 p4 ) M^-1

        Any vertex in eye space that satisfies the mathematical inequality will not be
        clipped, becuase they are located in the positive half space of the clip plane:

            ( p1' p2' p3' p4' )  ( x y z w )^T >= 0

        Clip planes need to be enabled in order to be used and this is done using

            Enable(enum p)

        where p is one of the clip planes enumerants, CLIP_PLANEi. If geometry is drawn
        with a specific clip plane enabled without specifing the clip plane equation
        the clipping results are undefined.

        To disable a clip plane, which is to disable clipping by that plane an application
        must call

            Disable(enum p)

        where p is one of the clip planes enumerants, CLIP_PLANEi.

        Even though this extension specifies a number of 6 clip planes more can be exported
        by different implementations. To find the maximum number of clip planes exported
        an application must call

            GetIntegerv(enum p, int *params)

        Where p is MAX_CLIP_PLANES_IMG. After a call to this function <params> will contain
        the number of clip planes exported by that particular extension.

Errors

    INVALID_ENUM is generated by ClipPlanefIMG, ClipPlanexIMG, Enable and Disable if the 
    <pname> parameter is not one of the clip plane defines.

New State

    Get Value			    Get Command    Type    Initial Value    Attribute
    ---------			    -----------    ----    -------------    ---------
    MAX_CLIP_PLANES_IMG      GetIntegerv    N+      6                user clip planes
 

Conformance Testing

    An easy way to test the conformance of user clip planes is to set up an ortographic 
    projection and use all clip planes, together and separate, oriented across the 3 axes
    (negative and positive), and check for correct geometry clipping.

Revision History
    
    0.1, 17/2/2004 vs:  Initial revision.
    0.2, 3/11/2004 bcb: Renamed entrypoints to add IMG suffix.
    0.3, 25/01/2005 nt: Added copyright notice and Number paragraph placeholder.
    1.0, 11/05/2009 bcb: Final cleanup for publication


