Name

  EXT_separate_specular_color

Name Strings

  GL_EXT_separate_specular_color

Version

  $Date: 1997/10/05 00:16:23 $ $Revision: 1.3 $

Number

  144

Dependencies

  None

Overview

  This extension adds a second color to rasterization when lighting is 
  enabled.  Its purpose is to produce textured objects with specular 
  highlights which are the color of the lights.  It applies only to 
  rgba lighting.

  The two colors are computed at the vertexes.  They are both clamped, 
  flat-shaded, clipped, and converted to fixed-point just like the 
  current rgba color (see Figure 2.8).  Rasterization interpolates 
  both colors to fragments.  If texture is enabled, the first (or 
  primary) color is the input to the texture environment; the fragment 
  color is the sum of the second color and the color resulting from 
  texture application.  If texture is not enabled, the fragment color 
  is the sum of the two colors.

  A new control to LightModel*, LIGHT_MODEL_COLOR_CONTROL_EXT, manages 
  the values of the two colors.  It takes values: SINGLE_COLOR_EXT, a 
  compatibility mode, and SEPARATE_SPECULAR_COLOR_EXT, the object of 
  this extension.  In single color mode, the primary color is the 
  current final color and the secondary color is 0.0.  In separate 
  specular mode, the primary color is the sum of the ambient, diffuse, 
  and emissive terms of final color and the secondary color is the 
  specular term.

  There is much concern that this extension may not be compatible with
  the future direction of OpenGL with regards to better lighting and
  shading models.  Until those impacts are resolved, serious
  consideration should be given before adding to the interface
  specified herein (for example, allowing the user to specify a
  second input color).

Issues

  * Where is emissive included? 

    RESOLVED - Emissive is included with the ambient and diffuse 
    terms.  Grouping emissive with specular (the "proper" thing) could 
    be implemented with a new value for the color control.

* Should there be two colors when not lighting or with index 
  lighting?

    RESOLVED - The answer is probably yes--there should be two colors 
    when lighting is disabled and there could be an incorporation of 
    two colors with index lighting; but these are beyond the scope of 
    this extension.  Further, attempts to accomplish these may not be
    compatible with the future direction of OpenGL with respect to
    high quality lighting and shading models.

  * What happens when texture is disabled?

    RESOLVED - The extension specifies to add the two colors when 
    texture is disabled.  This is compatible with the philosophy of 
    "if texture is disabled, this mode does not apply".

New Procedures and Functions

  None.

New Tokens

  Accepted by the <pname> parameter of LightModel*, and also by the 
  <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv, and 
  GetDoublev:

    LIGHT_MODEL_COLOR_CONTROL_EXT	0x81F8

  Accepted by the <param> parameter of LightModel* when <pname> is 
  LIGHT_MODEL_COLOR_CONTROL_EXT:

    SINGLE_COLOR_EXT			0x81F9
    SEPARATE_SPECULAR_COLOR_EXT		0x81FA

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

  - (2.13, p. 40) Rework the second paragraph to acknowledge two
    colors:

    "Next, lighting, if enabled, produces either a color index or 
    primary and secondary colors.  If lighting is disabled, the 
    current color index or color is used in further processing (the 
    current color is the primary color and the secondary color is 0).  
    After lighting, colors are clamped..."

  - (Figure 2.8, p. 41) Change RGBA to primary RGBA and secondary RGB:

    Ideally, there might be an RGB2 underneath RGBA (both places).  
    Alternatively, a note in the caption could clarify that RGBA 
    referred to the primary RGBA and a secondary RGB.  (Speaking of 
    the caption, the part about "m is the number of bits an R, G, B, 
    or A component" could be removed as m doesn't appear in the 
    diagram.)

  - (2.13.1, p. 42) Rework the opening of this section to not imply a 
    single color:

    In the first sentence, change "a color" to "colors".  Rephrase the 
    itemization of the two lighting states to:

    "1. Lighting Off. In this state, the current color is assigned to 
        the vertex primary color.  The vertex secondary color is 0.

     2. Lighting On.  In this state, the vertex primary and secondary 
        colors are computed from the current lighting parameters."

  - (Table 2.7, p.44) Add new entry (at the bottom):

    Parameter  Type  Default Value     Description
    ---------  ----  ----------------  ------------------------------
    c_es       enum  SINGLE_COLOR_EXT  controls computation of colors

  - (p. 45, top of page) Rephrase the first line and equation:

    "Lighting produces two colors at a vertex: a primary color c_1 and 
    a secondary color c_2.  The values of c_1 and c_2 depend on the 
    light model color control, c_es (note: c_es should be in italics 
    and c_1 and c_2 in bold, so this really won't be as confusing as 
    it seems).  If c_es = SINGLE_COLOR_EXT, then the equations to 
    compute c_1 and c_2 are (note: the equation for c_1 is the current 
    equation for c):

      c_1 = e_cm
          + a_cm * a_cs
          + SUM(att_i * spot_i * (a_cm * a_cli
                               + dot(n, VP_pli) * d_cm * d_cli
                               + f_i * dot(n, h_i)^s_rm * s_cm * s_cli)
      c_2 = 0

    If c_es = SEPARATE_SPECULAR_COLOR_EXT, then:

      c_1 = e_cm
          + a_cm * a_cs
          + SUM (att_i * spot_i * (a_cm * a_cli
                                + (n dot VP_pli) * d_cm * d_cli)

      c_2 = SUM(att_i * spot_i * (f_i * (n dot h_i)^s_rm * s_cm * s_cli)

  - (p. 45, second paragraph from bottom) Clarify that A is in the 
    primary color:

    After the sentence "The value of A produced by lighting is the 
    alpha value associated with d_cm", add "A is always associated 
    with the primary color c_1; c_2 has no alpha component."

  - (Table 2.8, p. 48) Add a new entry (at the bottom):

    Parameter  Name                           Number of values
    ---------  -----------------------------  ---------------- 
    c_es       LIGHT_MODEL_COLOR_CONTROL_EXT         1

  - (2.13.6, p. 51) Clarify that both primary and secondary colors are 
    clamped:

    Replace "RGBA" in the first line of the section with "both primary 
    and secondary".

  - (2.13.7, p. 52) Clarify what happens to primary and secondary 
    colors when flat shading--reword the first paragraph:

    "A primitive may be flatshaded, meaning that all vertices of the 
    primitive are assigned the same color index or primary and 
    secondary colors.  These come from the vertex that spawned the 
    primitive.  For a point, these are the colors associated with the 
    point.  For a line segment, they are the colors of the second 
    (final) vertex of the segment.  For a polygon, they come from a 
    selected vertex depending on how the polygon was generated.  Table 
    2.9 summarizes the possibilities."

  - (2.13.8, p. 52) Rework to not imply a single color:

    In the second sentence, change "If the color is" to "Those" and ", 
    it is" to "are".  In the first sentence of the next paragraph, 
    change "the color" to "two colors".

Additions to Chapter 3 of the 1.0 Specification (Rasterization)

  - (Figure 3.1, p. 55) Add a box between texturing and fog called 
    "color sum".

  - (3.8, p. 85) In the first paragraph, second sentence, insert 
    "primary" before RGBA.  Insert after this sentence "Texturing does 
    not affect the secondary color."

  - (new section before 3.9) Insert new section titled "Color Sum":

    "At the beginning of this stage in RGBA mode, a fragment has two 
    colors: a primary RGBA color (which texture, if enabled, may have 
    modified) and a secondary RGB color.  This stage sums the R, G, 
    and B components of these two colors to produce a single RGBA 
    color.  If the resulting RGB values exceed 1.0, they are clamped 
    to 1.0.

    In color index mode, a fragment only has a single color index and 
    this stage does nothing."

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

  None.

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

  - (5.3, p. 137) Specify that feedback returns the primary color by
    changing the last sentence of the large paragraph in the middle
    of the page to:

    "The colors returned are the primary colors.  These colors and the
    texture coordinates are those resulting from the clipping operations
    as described in section 2.13.8."

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

  - (Table 6.9, p. 157) Add:

    Get Value - LIGHT_MODEL_COLOR_CONTROL_EXT
    Type - Z2
    Get Cmnd - GetIntegerv
    Initial Value - SINGLE_COLOR_EXT
    Description - color control
    Sec. - (whatever it ends up as)
    Attribute - lighting

Additions to the GLX Specification

  None.

GLX Protocol

  None.

Errors

  None.

New State

  (see changes to table 6.9)
