| Name |
| |
| ARB_texture_rg |
| |
| Name Strings |
| |
| GL_ARB_texture_rg |
| |
| Contributors |
| |
| Daniel Koch, TransGaming, Inc. |
| Jon Leech, Khronos |
| |
| Contact |
| |
| Daniel Koch, TransGaming, Inc. (daniel 'at' transgaming.com) |
| |
| Notice |
| |
| Copyright (c) 2008-2013 The Khronos Group Inc. Copyright terms at |
| http://www.khronos.org/registry/speccopyright.html |
| |
| Status |
| |
| Approved by the ARB on July 11, 2008 |
| |
| Version |
| |
| Last Modified Date: May 28, 2009 |
| Author Revision: 6 |
| |
| Number |
| |
| ARB Extension #53 |
| |
| Dependencies |
| |
| OpenGL 1.1 is required. |
| |
| This extension is written against the OpenGL 2.1 Specification. |
| |
| EXT_texture_integer affects the definition of this extension. |
| |
| ARB_texture_float affects the definition of this extension. |
| |
| EXT_packed_depth_stencil affects the definition of this extension. |
| |
| This extension interacts with ARB_framebuffer_object and |
| EXT_framebuffer_object. |
| |
| This extension is subsumed by OpenGL 3.0. |
| |
| Overview |
| |
| Historically one- and two- component textures have been specified in OpenGL |
| using the intensity, luminance or luminance-alpha (I/L/LA) formats. |
| With the advent of programmable shaders and render-to-texture capabilites |
| these legacy formats carry some historical artifacts which are no longer |
| useful. |
| |
| For example, when sampling from such textures, the luminance values |
| are replicated across the color components, and the intensity values are |
| replicated across both the color and alpha components. This is no |
| longer necessary with programmable shaders. |
| |
| It is also desirable to be able to render to one- and two- |
| component format textures using capabilities such as framebuffer |
| objects (FBO), but rendering to I/L/LA formats is under-specified |
| (specifically how to map R/G/B/A values to I/L/A texture channels). |
| |
| This extension adds new base internal formats for the one-component RED |
| and two-component RG (red green) texture formats as well as sized |
| internal formats for fixed-point, floating-point and pure integer texture |
| formats. The new texure formats can be used for texturing as well |
| as for rendering into with framebuffer objects. |
| |
| IP Status |
| |
| No known IP claims. |
| |
| New Tokens |
| |
| Accepted by the <internalFormat> parameter of TexImage1D, TexImage2D, |
| TexImage3D, CopyTexImage1D, and CopyTexImage2D: |
| |
| R8 0x8229 |
| R16 0x822A |
| |
| RG8 0x822B |
| RG16 0x822C |
| |
| R16F 0x822D |
| R32F 0x822E |
| |
| RG16F 0x822F |
| RG32F 0x8230 |
| |
| R8I 0x8231 |
| R8UI 0x8232 |
| R16I 0x8233 |
| R16UI 0x8234 |
| R32I 0x8235 |
| R32UI 0x8236 |
| |
| RG8I 0x8237 |
| RG8UI 0x8238 |
| RG16I 0x8239 |
| RG16UI 0x823A |
| RG32I 0x823B |
| RG32UI 0x823C |
| |
| RED 0x1903 |
| RG 0x8227 |
| |
| COMPRESSED_RED 0x8225 |
| COMPRESSED_RG 0x8226 |
| |
| Accepted by the <format> parameter of TexImage1D, TexImage2D, |
| TexImage3D, TexSubImage1D, TexSubImage2D, TexSubImage3D, |
| and ReadPixels: |
| |
| RG 0x8227 |
| RG_INTEGER 0x8228 |
| |
| Accepted by the <format> parameter of DrawPixels: |
| |
| RG 0x8227 |
| |
| Accepted by the <param> parameter of the TexParameter{if}* |
| functions when <pname> is DEPTH_TEXTURE_MODE: |
| |
| RED 0x1903 |
| |
| Accepted by the <format> parameter of GetTexImage: |
| |
| RG 0x8227 |
| RG_INTEGER 0x8228 |
| |
| |
| New Procedures and Functions |
| |
| None |
| |
| Additions to Chapter 2 of the OpenGL 2.1 Specification (OpenGL Operation) |
| |
| None |
| |
| Additions to Chapter 3 of the OpenGL 2.1 Specification (Rasterization) |
| |
| Modify section 3.6.3 "Pixel Transfer Modes", the "Color Table Specification" |
| subsection and in the third paragraph of the definition of ColorTable modify |
| the last sentence to read: |
| |
| "internalformat must be one of the formats in table 3.15 or table 3.16, |
| with the exception of the RED, RG and DEPTH_COMPONENT base and sized |
| internal formats." |
| |
| (Add the following to Table 3.6: "DrawPixels and ReadPixels formats", |
| as modified by EXT_texture_integer) |
| |
| Format Name Element Meaning and Order Target Buffer |
| ----------- ------------------------- ------------- |
| RG R, G Color |
| RG_INTEGER iR, iG Color |
| |
| (Add the following to Table 3.15: "Conversion from RGBA and depth |
| pixel components to internal texture, table, or filter components") |
| |
| Base Internal Format RGBA and Depth Values Internal Components |
| -------------------- --------------------- ------------------- |
| RED R R |
| RG R,G R,G |
| |
| (Add the following to Table 3.16: "Correspondence of sized internal |
| formats to base internal formats, and desired component resolutions |
| for each sized internal format", as modified by ARB_texture_float and |
| ARB_texture_integer) |
| |
| Sized Base R G B A L I D |
| Internal Format Internal Format bits bits bits bits bits bits bits |
| --------------- --------------- ---- ---- ---- ---- ---- ---- ---- |
| R8 RED 8 |
| R16 RED 16 |
| RG8 RG 8 8 |
| RG16 RG 16 16 |
| R16F RED f16 |
| R32F RED f32 |
| RG16F RG f16 f16 |
| RG32F RG f32 f32 |
| R8I RED i8 |
| R8UI RED ui8 |
| R16I RED i16 |
| R16UI RED ui16 |
| R32I RED i32 |
| R32UI RED ui32 |
| RG8I RG i8 i8 |
| RG8UI RG ui8 ui8 |
| RG16I RG i16 i16 |
| RG16UI RG ui16 ui16 |
| RG32I RG i32 i32 |
| RG32UI RG ui32 ui32 |
| |
| (Add the following to Table 3.17: "Generic and specific compressed |
| internal formats") |
| |
| Compressed Internal Format Base Internal Format Type |
| -------------------------- -------------------- --------- |
| COMPRESSED_RED RED Generic |
| COMPRESSED_RG RG Generic |
| |
| (Modify Table 3.18: "Texure parameters and their values") |
| |
| Add RED to the "Legal Values" column for the row containing the |
| definition of DEPTH_TEXTURE_MODE. |
| |
| Modify the first sentence of section 3.8.5 "Depth Component Textures" |
| (as modified by EXT_packed_depth_stencil or ARB_framebuffer_object) to read: |
| |
| "Depth textures and the depth components of depth/stencil textures can |
| be treated as RED, LUMINANCE, INTENSITY or ALPHA textures during texture |
| filtering and application." |
| |
| (Add the following to Table 3.20: "Correspondence of filtered texture |
| components to texture source components.") |
| |
| Texture Base Texture source color |
| Internal Format C_s A_s |
| --------------- ------------- ------ |
| RED (R_t, 0, 0) 1 |
| RG (R_t, G_t, 0) 1 |
| |
| (Modify Table 3.21: "Texture functions REPLACE, MODULATE and DECAL.") |
| |
| Add RED and RG to the "Texture Base Internal Format" column for the |
| row which defines the behaviour for RGB (or 3). |
| |
| (Modify Table 3.22: "Texture functions BLEND and ADD.") |
| |
| Add RED and RG to the "Texture Base Internal Format" column for the |
| row which defines the behaviour for RGB (or 3). |
| |
| Modify Section 3.8.14 "Texture Comparision Modes", the "Depth Texture |
| Comparision Mode" subsection, and change the second to last paragraph |
| to read: |
| |
| "The resulting r is assigned to R_t, L_t, I_t, or A_t if the value of the |
| DEPTH_TEXTURE_MODE is respectively RED, LUMINANCE, INTENSITY, or ALPHA." |
| |
| Additions to Chapter 4 of the OpenGL 2.1 Specification (Per-Fragment Operations |
| and the Framebuffer) |
| |
| In section 4.3.2 "Reading Pixels" the subsection "Obtaining Pixels from |
| the framebuffer", modify the first sentence of the 3rd paragraph in the |
| definition of ReadBuffer to read: |
| |
| "If the GL is in RGBA mode, and format is one of RED, GREEN, BLUE, ALPHA, |
| RG, RGB, RGBA, BGR, BGRA, LUMINANCE, or LUMINANCE_ALPHA, then red, |
| green, blue, and alpha values are obtained from the selected buffer at |
| each pixel location." |
| |
| In subsection "Placement in Pixel Pack Buffer or Client Memory," modify |
| the second to last sentence to read: |
| |
| "Likewise if the format is RG, LUMINANCE_ALPHA, RGB, BGR, only the |
| corresponding two or three elements are written." |
| |
| In section 4.4.4 "Framebuffer Completeness" as added by |
| EXT_framebuffer_object or ARB_framebuffer_object, modify the first bullet |
| point and add RED and RG to the list of base internal formats which |
| are color-renderable. |
| |
| Additions to Chapter 5 of the OpenGL 2.1 Specification (Special Functions) |
| |
| None |
| |
| Additions to Chapter 6 of the OpenGL 2.1 Specification (State and State Requests) |
| |
| Modify section 6.1.4 "Texture Queries". Change the second sentence of the |
| second paragraph to read: |
| |
| "Calling GetTexImage with a color format (one of RED, GREEN, BLUE, ALPHA, |
| RG, RGB, BGR, RGBA, BGRA, LUMINANCE, LUMINANCE_ALPHA, or one of the |
| *_INTEGER variants) when the base internal format of the texture image is |
| not a color format; with a format of DEPTH_COMPONENT when the base internal |
| format is not DEPTH_COMPONENT or DEPTH_STENCIL; with a format of |
| DEPTH_STENCIL when the base internal format is not DEPTH_STENCIL; with an |
| *_INTEGER format when the base internal format is not one of the integral |
| types; or with non-integer format when the base internal is an integral |
| type, causes the error INVALID_OPERATION." |
| |
| (Add the following to Table 6.1: "Texture, table, and filter return values") |
| |
| Base Internal Format R G B A |
| -------------------- ---- ----- --- --- |
| RED R_i 0 0 1 |
| RG R_i G_i 0 1 |
| |
| Dependencies on EXT_packed_depth_stencil |
| |
| If EXT_packed_depth_stencil is not supported then delete any reference to |
| depth/stencil textures (unless ARB_framebuffer_objects is supported). |
| |
| Dependencies on EXT_framebuffer_object |
| |
| If EXT_framebuffer_object is not supported then delete any reference to |
| framebuffer objects (unless ARB_framebuffer_objects is supported). |
| |
| Dependencies on ARB_framebuffer_object |
| |
| If ARB_framebuffer_object is not supported: |
| * delete any reference to depth/stencil textures |
| (unless EXT_packed_depth_stencil is supported). |
| * delete any reference to framebuffer objects |
| (unless EXT_framebuffer_object is supported). |
| |
| Dependencies on EXT_texture_integer |
| |
| If EXT_texture_integer is not supported: |
| * delete any reference to the R*I*, R*UI* and *INTEGER* formats. |
| |
| Dependencies on ARB_texture_float |
| |
| If ARB_texture_float is not supported: |
| * delete any reference to the R*F* formats. |
| |
| Issues |
| |
| 1) What should this extension be called? ARB_rg_formats, ARB_rg_texture, |
| ARB_texture_rg, etc |
| |
| DECIDED. Using ARB_texture_rg. |
| |
| 2) Why use RED token used instead of just "R"? |
| |
| a) there is already some precedent for using RED for single-component |
| images |
| b) the "R" token is already used for texcoord generation, and it is |
| less confusing if we don't reuse it. |
| |
| 3) Why use RG instead of REDGREEN? |
| |
| The list {RED, RG, RGB, RGBA} is more visually appealing than |
| {RED, REDGREEN, RGB, RGBA}. |
| |
| 4) Why don't the new tokens and entry points in this extension have |
| "ARB" suffixes like other ARB extensions? |
| |
| RESOLVED: Unlike most ARB extensions, this is a strict subset of |
| functionality already approved in OpenGL 3.0. This extension |
| exists only to support that functionality on older hardware that |
| cannot implement a full OpenGL 3.0 driver. Since there are no |
| possible behavior changes between the ARB extension and core |
| features, source code compatibility is improved by not using |
| suffixes on the extension. |
| |
| 5) What are the default values for the unspecified channels if you sampled |
| from an R or RG texture? Is it (r,0,0,1) or (r,1,1,1). |
| |
| CLARIFICATION: As per OpenGL defaults as specified in Table 3.20 |
| (as modified by this extension) the default values for unspecified |
| components are (r,0,0,1). Note that this does differ from D3D where |
| unspecified values would be filled in as (r,1,1,1). |
| |
| 6) Are the RG formats accepted by the imaging subset of functions? |
| |
| RESOLUTION: NO. This extension does not add RG support to the functions |
| defined in the imaging subset (that is: [Get]Color[Sub]Table, |
| [Get]ConvolutionFilter, [Get]SeparableFilter, GetHistogram, GetMinMax) |
| as it is felt that there is little benefit in doing so. This could be |
| added as a separate extension if desired. |
| |
| Revision History |
| |
| #6 May 28, 2008, jleech |
| - Remove extraneous *_INTEGER formats from table 6.1 |
| #5 April 8, 2008, dgkoch |
| - Address issues raised in Bug 4163 |
| - clarify that RG_INTEGER is not allowed for DrawPixels |
| - added issue 6) and clarify that support for RED and RG formats |
| is not added to the imaging subset |
| - GetTexImage supports RG (but no conversion) |
| #4 November 14, 2008, dgkoch |
| - marked issue 1) as resolved. |
| - add issue 5) as clarification |
| - Better compatibility with GL 3.0 spec |
| - allow unsized RED and RG formats as internal formats (Bug 4161) |
| - add enums for COMPRESSED_RED/RG and allow as internal formats (Bug 4162) |
| #3 August 7, 2008, jleech |
| - Remove ARB suffixes. |
| #2 June 9, 2008, dgkoch |
| - add COMPRESSED_RED/RG generic formats. |
| - add CopyTexImage1/2D to list of functions accepting the new |
| internalformats. |
| #1 June 8, 2008, dgkoch |
| - initial version extracted from GL3 core. |