| Name |
| |
| SGIX_texture_range |
| |
| Name Strings |
| |
| GL_SGIX_texture_range |
| |
| Version |
| |
| $Date: 1999/06/24 02:20:36 $ $Revision: 1.4 $ |
| |
| Number |
| |
| 181 |
| |
| Dependencies |
| |
| OpenGL 1.2 is required. |
| SGI_color_range is required |
| SGIS_texture4D affects the definition of this extension |
| |
| Overview |
| |
| This extension defines new internal formats for the storage of signed |
| texture images, as well as extended range and precision texture images. |
| |
| IP Status |
| |
| Silicon Graphics has filed for patent protection for some of the |
| techniques described in this extension document. |
| |
| Issues |
| |
| * Should the fact that the numeric type is different create new base |
| formats to better classify this difference? Also this might make |
| sense if there were more than one internal extended-range component |
| resolutions or types in a given system. |
| |
| - Yes. New base formats added to spec. |
| |
| * Don't want to get extended-range when we don't want it |
| |
| - With new base formats, the user explicitly requests extended-range |
| or signed internal formats, either sized or not. |
| |
| * TLUT clamping (clamped to [0, 1]) |
| |
| - Since the texture color lookup section says that it acts as in |
| section 3.6.3, for color table lookups, and since that section says |
| that the color is first clamped to [0, 1], then everything should be |
| fine. |
| |
| * Do we want to make the fact that there are floating-point formats |
| visible at the API level? |
| |
| - Not in this spec. In any future spec that defines the |
| floating-point formats and their API, we probably should add a query |
| for exp, mant, sign bits per internal format. |
| |
| * Since Bali won't have 4D textures, should we take out references to it |
| in this spec? |
| |
| - No. |
| |
| * OK to add tokens for formats not supported by Bali, for completeness? |
| |
| - Moot point, since we have none. We'll add them as we decide to |
| implement hardware that uses them. |
| |
| * Since we're not defining the explicit bit representation of the |
| format, does it still make sense to define sized formats? Or should |
| we wait until the floating-point formats are defined to put out sized |
| enumerants? |
| |
| - Keep the sized formats in this spec. |
| |
| * It is often assumed in OpenGL that texture values are in the range |
| [0, 1]. For instance, in the detail texture extension, the filtered |
| detail texture color values are scaled by 2 and then have 1 subtracted |
| to generate a number in the [-1, 1] range. What should happen when |
| the texture format can support values in the [-1, 1] range, then? |
| Should the GL still do the scale and bias, or should it just pass the |
| texture value through? |
| |
| - Still do the scale and bias. This avoids either a) breaking |
| previous applications by changing their behavior or b) creating |
| hardware that does calculations both with and without the scale and |
| bias. |
| |
| * Which of the Section 3.8 alterations should be in this spec, as |
| opposed to the color_range? Which color clamping operations should be |
| based upon the texture internal format, versus the framebuffer format? |
| |
| - The color clampings controlled by this spec should be the: |
| a) Clamping of downloaded texture values. |
| b) Clamping of the result of the texture filter operation. |
| |
| Both are clampings based upon the texture internal format. All |
| other color clamps are based upon the framebuffer format, including |
| incoming and outgoing colors of the texture environment operation. |
| |
| * Texture environment clamping is made stickier with multitexturing. |
| Should the environment function clamp its input values? Its output |
| values? Should it clamp based upon its associated texture's internal |
| format, or based upon the framebuffer format? |
| |
| - See above. All incoming colors, fragment color, texture color, |
| etc., and the outgoing color, are clamped based upon the framebuffer |
| format. |
| |
| * For queries of the min & max component values, what should be returned |
| if the component doesn't exist in the texture, e.g., MIN_RED_SGIS in |
| an intensity texture or MAX_INTENSITY_SGIS in an RGBA texture. And |
| what about alpha, should it be treated differently since it's implied |
| in non-alpha textures? Should we have the new INTENSITY and LUMINANCE |
| tokens at all, or should we query the red and/or alpha components' min |
| and max values? |
| |
| - If a queried component doesn't exist in the format, both the min and |
| max are returned as 0, and no error condition is set. Because of |
| this, we need the INTENSITY and LUMINANCE tokens. |
| |
| * What about ALPHA, in textures that don't have it, since it ususally |
| is an implied 1, instead of an implied 0? |
| |
| - For now, as above, min & max are returned as 0. Since the user has |
| requested an alpha-free texture format, one would hope they would be |
| smart enought to not then query the available alpha range. One |
| would hope. |
| |
| New Procedures and Functions |
| |
| None |
| |
| New Tokens |
| |
| Accepted by the <internalformat> parameter of TexImage1D, TexImage2D, |
| TexImage3DEXT, TexImage4DSGIS, CopyTexImage1D, and CopyTexImage2D: |
| |
| RGB_SIGNED_SGIX 0x85E0 |
| RGBA_SIGNED_SGIX 0x85E1 |
| ALPHA_SIGNED_SGIX 0x85E2 |
| LUMINANCE_SIGNED_SGIX 0x85E3 |
| INTENSITY_SIGNED_SGIX 0x85E4 |
| LUMINANCE_ALPHA_SIGNED_SGIX 0x85E5 |
| RGB16_SIGNED_SGIX 0x85E6 |
| RGBA16_SIGNED_SGIX 0x85E7 |
| ALPHA16_SIGNED_SGIX 0x85E8 |
| LUMINANCE16_SIGNED_SGIX 0x85E9 |
| INTENSITY16_SIGNED_SGIX 0x85EA |
| LUMINANCE16_ALPHA16_SIGNED_SGIX 0x85EB |
| RGB_EXTENDED_RANGE_SGIX 0x85EC |
| RGBA_EXTENDED_RANGE_SGIX 0x85ED |
| ALPHA_EXTENDED_RANGE_SGIX 0x85EE |
| LUMINANCE_EXTENDED_RANGE_SGIX 0x85EF |
| INTENSITY_EXTENDED_RANGE_SGIX 0x85F0 |
| LUMINANCE_ALPHA_EXTENDED_RANGE_SGIX 0x85F1 |
| RGB16_EXTENDED_RANGE_SGIX 0x85F2 |
| RGBA16_EXTENDED_RANGE_SGIX 0x85F3 |
| ALPHA16_EXTENDED_RANGE_SGIX 0x85F4 |
| LUMINANCE16_EXTENDED_RANGE_SGIX 0x85F5 |
| INTENSITY16_EXTENDED_RANGE_SGIX 0x85F6 |
| LUMINANCE16_ALPHA16_EXTENDED_RANGE_SGIX 0x85F7 |
| |
| Accepted by the <value> parameter of of GetTexLevelParameterfv and |
| GetTexLevelParameteriv: |
| |
| MIN_LUMINANCE_SGIS 0x85F8 |
| MAX_LUMINANCE_SGIS 0x85F9 |
| MIN_INTENSITY_SGIS 0x85FA |
| MAX_INTENSITY_SGIS 0x85FB |
| |
| Additions to Chapter 2 of the 1.2 Specification (OpenGL Operation) |
| |
| None |
| |
| Additions to Chapter 3 of the 1.2 Specification (Rasterization) |
| |
| The following is added to Section 3.8.1: |
| |
| "... just before final conversion. Each R, G, B, and A value so |
| generated is clamped to [min, max]. The minimum is implementation- |
| dependent for extended range and precision internal formats, but at most |
| 0. It is -1 for signed internal formats, and is 0 for all other |
| formats. The maximum is implementation-dependent for extended range and |
| precision formats, but is at least 1, and is 1 for all other formats. |
| |
| |
| The following is added to Table 3.16: |
| |
| Sized Base R G B A L I |
| Internal Format Internal Format Bits Bits Bits Bits Bits Bits |
| --------------- ----------------------------------- ---- ---- ---- ---- ---- ---- |
| RGB16_SIGNED_SGIX RGB_SIGNED_SGIX 16 16 16 |
| RGBA16_SIGNED_SGIX RGBA_SIGNED_SGIX 16 16 16 16 |
| ALPHA16_SIGNED_SGIX ALPHA_SIGNED_SGIX 16 |
| LUMINANCE16_SIGNED_SGIX LUMINANCE_SIGNED_SGIX 16 |
| INTENSITY16_SIGNED_SGIX INTENSITY_SIGNED_SGIX 16 |
| LUMINANCE16_ALPHA16_SIGNED_SGIX LUMINANCE_ALPHA_SIGNED_SGIX 16 16 |
| RGB16_EXTENDED_RANGE_SGIX RGB_EXTENDED_RANGE_SGIX 16 16 16 |
| RGBA16_EXTENDED_RANGE_SGIX RGBA_EXTENDED_RANGE_SGIX 16 16 16 16 |
| ALPHA16_EXTENDED_RANGE_SGIX ALPHA_EXTENDED_RANGE_SGIX 16 |
| LUMINANCE16_EXTENDED_RANGE_SGIX LUMINANCE_EXTENDED_RANGE_SGIX 16 |
| INTENSITY16_EXTENDED_RANGE_SGIX INTENSITY_EXTENDED_RANGE_SGIX 16 |
| LUMINANCE16_ALPHA16_EXTENDED_RANGE_SGIX LUMINANCE_ALPHA_EXTENDED_RANGE_SGIX 16 16 |
| |
| |
| The following is added to Section 3.8.3: |
| |
| "... values to floating point. Each of the four values set by |
| TEXTURE_BORDER_COLOR is clamped to lie in [min, max], where min and max |
| are based upon the internal format of the image in level-of-detail 0, as |
| specified in section 3.8.1" |
| |
| |
| Additions to Chapter 4 of the 1.2 Specification (Per-Fragment Operations |
| and the Frame Buffer) |
| |
| None |
| |
| Additions to Chapter 5 of the 1.2 Specification (Special Functions) |
| |
| None |
| |
| Additions to Chapter 6 of the 1.2 Specification (State and State Requests) |
| |
| The following is added to Section 6.1.3: |
| |
| "...when the image array was defined. Queries of MIN_RED_SGIS, |
| MAX_RED_SGIS, MIN_GREEN_SGIS, MAX_GREEN_SGIS, MIN_BLUE_SGIS, |
| MAX_BLUE_SGIS, MIN_ALPHA_SGIS, MAX_ALPHA_SGIS, MIN_LUMINANCE_SGIS, |
| MAX_LUMINANCE_SGIS, MIN_INTENSITY_SGIS, and MAX_INTENSITY_SGIS |
| return the minimum and maximum expressable values of the internal |
| format of the image. Queries of TEXTURE_WIDTH ..." |
| |
| Additions to the GLX Specification |
| |
| None |
| |
| Dependencies on SGIS_texture4D |
| |
| If SGIS_texture4D is not supported, all references to TexImage4DSGIS, |
| TexSubImage4DSGIS, and CopyTexSubImage4DSGIS are ignored. |
| |
| Errors |
| |
| None |
| |
| New State |
| |
| Get Value Get Command Type Initial Value |
| --------- ----------- ---- ------------- |
| MIN_RED_SGIS GetTexLevelParameterfv R 0.0 |
| MAX_RED_SGIS GetTexLevelParameterfv R+ 1.0 |
| MIN_GREEN_SGIS GetTexLevelParameterfv R 0.0 |
| MAX_GREEN_SGIS GetTexLevelParameterfv R+ 1.0 |
| MIN_BLUE_SGIS GetTexLevelParameterfv R 0.0 |
| MAX_BLUE_SGIS GetTexLevelParameterfv R+ 1.0 |
| MIN_ALPHA_SGIS GetTexLevelParameterfv R 0.0 |
| MAX_ALPHA_SGIS GetTexLevelParameterfv R+ 1.0 |
| MIN_LUMINANCE_SGIS GetTexLevelParameterfv R 0.0 |
| MAX_LUMINANCE_SGIS GetTexLevelParameterfv R+ 1.0 |
| MIN_INTENSITY_SGIS GetTexLevelParameterfv R 0.0 |
| MAX_INTENSITY_SGIS GetTexLevelParameterfv R+ 1.0 |
| |
| New Implementation Dependent State |
| |
| Get Value Get Command Type |
| --------- ----------- ---- |
| TEXTURE_RANGE_SGIX GetBooleanv B |
| |