Name

    NV_light_max_exponent

Name Strings

    GL_NV_light_max_exponent

Contact

    Mark J. Kilgard, NVIDIA Corporation (mjk 'at' nvidia.com)

Notice

    Copyright NVIDIA Corporation, 1999, 2000.

Status

    Shipping (version 1.0)

Version

    May 20, 2000
    $Date$ $Revision$

Number

    189

Dependencies

    None

Overview

    Default OpenGL does not permit a shininess or spot exponent over
    128.0.  This extension permits implementations to support and
    advertise a maximum shininess and spot exponent beyond 128.0.

    Note that extremely high exponents for shininess and/or spot light
    cutoff will require sufficiently high tessellation for acceptable
    lighting results.

    Paul Deifenbach's thesis suggests that higher exponents are
    necessary to approximate BRDFs with per-vertex ligthing and
    multiple passes.

New Procedures and Functions

    None

New Tokens

    Accepted by the <pname> parameters of GetBooleanv, GetIntegerv,
    GetFloatv, and GetDoublev:

        MAX_SHININESS_NV                  0x8504
        MAX_SPOT_EXPONENT_NV              0x8505

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

    In Table 2.7, change the srm range entry to read:

    "(range: [0.0, value of MAX_SHININESS_NV])"

    In Table 2.7, change the srli range entry to read:

    "(range: [0.0, value of MAX_SPOT_EXPONENT_NV])"

    Add to the end of the second paragraph in Section 2.13.2:

    "The values of MAX_SHININESS_NV and MAX_SPOT_EXPONENT_NV are
    implementation dependent, but must be equal or greater than 128."

Additions to Chapter 3 of the GL Specification (Rasterization)

    None

Additions to Chapter 4 of the GL Specification (Per-Fragment Operations
and the Framebuffer)

    None.

Additions to Chapter 5 of the GL Specification (Special Functions)

    None

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

    None

Additions to the GLX Specification

    None

GLX Protocol

    None

Errors

    INVALID_VALUE is generated by Material if enum is SHININESS and the
    shininess param is greater than the MAX_SHININESS_NV.

    INVALID_VALUE is generated by Material if enum is SPOT_EXPONENT and
    the shininess param is greater than the MAX_SPOT_EXPONENT_NV.

New State

    None.

New Implementation Dependent State

(table 6.24, p214) add the following entries:

    Get Value                     Type    Get Command   Minimum Value   Description         Sec     Attribute
    ---------------------------   ----    -----------   -------------   -----------------   ------  --------------
    MAX_SHININESS_NV              Z+      GetIntegerv   128             Maximum             2.13.2  -
                                                                        shininess for
                                                                        specular lighting
    MAX_SPOT_EXPONENT_NV          Z+      GetIntegerv   128             Maximum             2.13.2  -
                                                                        exponent for
                                                                        spot lights

NVIDIA Implementation Details

    NVIDIA's Release 4 drivers incorrectly and accidently advertised this
    extension with an "EXT" prefix instead of an "NV" prefix.  Release 5
    and later drivers correctly advertise this extension with an "NV"
    extension.

Revision History

    5/20/00 - earlier versions of this specification had the incorrect
    enumerant values which did not match NVIDIA's driver implementation.
