| Name |
| |
| EXT_color_buffer_float |
| |
| Name Strings |
| |
| GL_EXT_color_buffer_float |
| |
| Contributors |
| |
| OpenGL ES Working Group members |
| |
| Contact |
| |
| Mark Callow, HI Corp. (khronos 'at' callow.im) |
| |
| Notice |
| |
| ©2012 The Khronos Group Inc. |
| |
| Status |
| |
| Complete |
| |
| IP Status |
| |
| Graphics Properties Holdings (GPH, formerly SGI) owns US Patent |
| #6,650,327, issued November 18, 2003. GPH believes this patent |
| contains necessary IP for graphics systems implementing floating |
| point (FP) rasterization and FP framebuffer capabilities. |
| |
| GPH will not grant Khronos royalty-free use of this IP for use |
| in OpenGL ES, but will discuss licensing on RAND terms, on an |
| individual basis with companies wishing to use this IP in the |
| context of conformant OpenGL ES implementations. GPH does not |
| plan to make any special exemption for open source |
| implementations. |
| |
| See |
| https://www.khronos.org/files/ip-disclosures/opengl/SGI%20IP%20Disclosure%20Mar05_clean.pdf |
| for the full disclosure. |
| |
| Version |
| |
| Date: March 26th, 2015 |
| Revision: 10 |
| |
| Number |
| |
| OpenGL ES Extension #137 |
| |
| Dependencies |
| |
| Requires OpenGL ES 3.0. |
| |
| Written based on the wording of the OpenGL ES 3.0.3 specification |
| (December 18th, 2013). |
| |
| Specifies interactions with OpenGL ES 3.1 based on the wording of |
| the OpenGL ES 3.1 specification (March 17th, 2014). Edits are |
| specified using the ordering of the OpenGL ES 3.0 specification. |
| OpenGL ES 3.1 sections are given in parentheses. |
| |
| Overview |
| |
| This extension allows a variety of floating point formats to be |
| rendered to via framebuffer objects. |
| |
| New Procedures and Functions |
| |
| None |
| |
| New Tokens |
| |
| None |
| |
| Additions to |
| Chapter 3 of the OpenGL ES 3.0 Specification (Rasterization) |
| Chapter 8 of the OpenGL ES 3.1 Specification (Textures and Samplers) |
| |
| (changed lines marked with *; added lines marked with +) |
| |
| 3.8.3 Texture Image Specification, unnumbered subsection "Required |
| Texture Formats", pp. 127 & 128 (applies to ES 3.0 only; no |
| equivalent list in ES 3.1) |
| |
| Change the first two bullet items to the following: |
| |
| - Texture and renderbuffer color formats (see section 4.4.2). |
| - RGBA32F, RGBA32I, RGBA32UI, RGBA16F, RGBA16I, RGBA16UI, |
| RGBA8, RGBA8I, RGBA8UI, SRGB8_ALPHA8, RGB10_A2, RGB10_- |
| A2UI, RGBA4, and RGB5_A1. |
| - RGB8 and RGB565. |
| - R11F G11F B10F. |
| - RG32F, RG32I, RG32UI, RG16F, RG16I, RG16UI, RG8, RG8I, and |
| RG8UI. |
| - R32F, R32I, R32UI, R16F, R16I, R16UI, R8, R8I, and R8UI. |
| |
| - Texture-only color formats: |
| - RGBA8_SNORM. |
| - RGB32F, RGB32I, and RGB32UI. |
| - RGB16F, RGB16I, and RGB16UI. |
| - RGB8_SNORM, RGB8I, RGB8UI, and SRGB8. |
| - RGB9_E5. |
| - RG8_SNORM. |
| - R8_SNORM. |
| |
| Table 3.13, pp.129, 130 & 131 (table 8.13, pp.152, 153 & 154 in |
| ES 3.1) |
| |
| Convert the dash under 'Color-renderable' (spaces under 'CR' and |
| 'Req. rend.' in ES 3.1) to a 'check' for the following internal |
| formats: R16F, RG16F, RGBA16F, R32F, RG32F, RGBA32F and |
| R11F_G11F_B10F. |
| |
| 3.8.5 Alternate Texture Image Specification Commands, p.138 |
| (section 8.6, p.157 in ES 3.1) |
| |
| |
| OpenGL ES 3.0 |
| In the first paragraph, change the sentence beginning "The error |
| INVALID_OPERATION is generated ..." to |
| |
| * The error INVALID_OPERATION is generated if signed integer RGBA |
| data is required and the format of the current color buffer is not |
| signed integer; if unsigned integer RGBA data is required and the |
| format of the current color buffer is not unsigned integer; or if |
| * floating- or fixed-point RGBA data is required and the format of |
| * the current color buffer is signed or unsigned integer. |
| |
| OpenGL ES 3.1 |
| |
| In the error list continuation on p.162, modify the first bullet, |
| inserting "floating-point |
| |
| * o if floating-point, signed integer, unsigned integer or ... |
| ^^^^^^^^^^^^^^^^ |
| ---- |
| |
| Insert the following bullet into the rules for determining the |
| effective internal format before the "Otherwise" rule on p.140 |
| (p.160 in ES 3.1) |
| |
| o If the source buffer contains any floating point components |
| the effective internalformat is taken from the first (highest) |
| row in table 3.17 for which the values of FRAMEBUFFER_RED_SIZE, |
| FRAMEBUFFER_GREEN_SIZE, FRAMEBUFFER_BLUE_SIZE, and |
| FRAMEBUFFER_ALPHA_SIZE are consistent. If the sizes are not |
| consistent for any rows in the table then an INVALID_OPERATION |
| error is generated. |
| |
| Insert new table 3.17 on p.141 (table 8.17 on p.161 in ES 3.1) and |
| renumber other tables and references accordingly. |
| |
| Destination | | | | | Effective |
| Internal | Source | Source | Source | Source | Internal |
| Format | Red Size | Green Size | Blue Size | Alpha Size | Format |
| ------------|--------------|--------------|--------------|--------------|--------- |
| any sized | 1 <= R <= 16 | G = 0 | B = 0 | A = 0 | R16F |
| any sized | 1 <= R <= 16 | 1 <= G <= 16 | B = 0 | A = 0 | RG16F |
| any sized | 16 < R | G = 0 | B = 0 | A = 0 | R32F |
| any sized | 16 < R | 16 < G | B = 0 | A = 0 | RG32F |
| any sized | 1 <= R <= 16 | 1 <= G <= 16 | 1 <= B <= 16 | A = 0 | RGB16F |
| any sized | 1 <= R <= 16 | 1 <= G <= 16 | 1 <= B <= 16 | 1 <= A <= 16 | RGBA16F |
| any sized | 16 < R | 16 < G | 16 < B | A = 0 | RGB32F |
| any sized | 16 < R | 16 < G | 16 < B | 16 < A | RGBA32F |
| ---------------------------------------------------------------------------------- |
| |
| Table 3.17(8.17 in ES 3.1): Effective internal format for float-point framebuffers |
| |
| |
| Additions to |
| Chapter 4 of the OpenGL ES 3.0 Specification (Per-Fragment |
| Operations and the Framebuffer) |
| Chapter 9 of the OpenGL ES 3.1 Specification (Framebuffers and |
| Framebuffer Objects) |
| Chapter 15 of the OpenGL ES 3.1 Specification (Writing Fragments and |
| Samples to the Framebuffer) |
| Chapter 16 of the OpenGL ES 3.1 Specification (Reading and Copying |
| Pixels)) |
| |
| Chapter 4 Introduction, p.170 (section 9.1 Framebuffer Overview in |
| ES 3.1) |
| |
| Paragraph 5, sentence 3, p.171, (p.203 in ES 3.1) insert |
| "floating point" as shown: |
| "R, G, B, and A components may be represented as unsigned |
| * normalized fixed-point, floating point or signed or unsigned |
| integer values; ..." ^^^^^^^^^^^^^^ |
| |
| 4.1.7 Blending, p.177 (section 15.1.7 p.315 in ES 3.1) |
| |
| Modify paragraphs 3 & 4: |
| |
| * "If the color buffer is fixed-point, the components of the |
| source and destination values and blend factors are clamped |
| * to [0; 1] prior to evaluating the blend equation. If the color |
| + buffer is floating-point, no clamping occurs. The resulting four |
| + values are sent to the next operation. |
| |
| Blending applies only if the color buffer has a fixed-point or |
| * or floating-point format. If the color buffer has an integer |
| * format, proceed to the next operation. Furthermore, an |
| + INVALID_OPERATION error is generated by DrawArrays and the other |
| + drawing commands defined in section 2.8.3 (10.5 in ES 3.1) if |
| + blending is enabled (see below) and any draw buffer has 32-bit |
| + floating-point format components." |
| |
| 4.2.3 Clearing the Buffers, p.186 (section 15.2.3, p.325 in ES |
| 3.1) |
| |
| Modify second paragraph (p.326 in ES 3.1), inserting |
| "floating point": |
| |
| " void ClearColor(float r, float g, float b, float a); |
| |
| * sets the clear value for fixed- and floating-point color buffers. |
| ..." ^^^^^^^^^^^^^^^^^^ |
| |
| 4.3.2 Reading Pixels, p.190 (section 16.1.2 ReadPixels, p.333 in |
| ES 3.1) |
| |
| In paragraph 4 (paragraph 3 in ES 3.1), beginning "Only two |
| combinations of format and type are accepted ...", after the |
| sentence ending "... type UNSIGNED_BYTE is accepted." insert the |
| following sentence: |
| "For floating-point rendering surfaces, the combination |
| format RGBA and type FLOAT is accepted." |
| |
| 4.3.2 unnumbered subsection "Obtaining Pixels from the |
| Framebuffer", p.192 (section 16.1.3, p.334 in ES 3.1) |
| |
| OpenGL ES 3.0 |
| Modify penultimate paragraph, p.192, If format is an integer ..." |
| |
| OpenGL ES 3.1 |
| Modify penultimate paragraph, p.334, An INVALID_OPERATION error is |
| generated ..." |
| |
| "An INVALID_OPERATION error is generated if format is an integer |
| format and the color buffer is not an integer format; if the color |
| buffer is an integer format and format is not an integer format; |
| * if format is an integer format and type is FLOAT, HALF_FLOAT, or |
| + UNSIGNED_INT_10F_11F_11F_REV; or if the color buffer is a |
| + floating-point format and type is not FLOAT, HALF FLOAT, or |
| + UNSIGNED_INT_10F_11F_11F_REV. |
| |
| 4.3.2 unnumbered subsection "Conversion of RGBA values", p.193 |
| (section 16.1.4, p.335 in ES 3.1) |
| |
| Sole paragraph, sentence 3, insert "or floating point" as shown: |
| * "For an integer or floating point color buffer, the elements |
| are unmodified."^^^^^^^^^^^^^^^^^ |
| |
| 4.3.3 Copying Pixels, p.195 (section 16.2 p.337 in ES 3.1) |
| |
| Modify first error condition, at bottom of p196, "The read buffer |
| contains ..." to encompass floating-point buffers. (In ES 3.1, |
| first bullet on p.340 under the last INVALID_OPERATION error in |
| the error list that starts on p339.) |
| |
| * "- The read buffer contains fixed-point or floating-point values |
| * and any draw buffer contains neither fixed-point nor |
| * floating-point values." |
| |
| 4.4.2 Attaching Images to Framebuffer Objects, p. 201, unnumbered |
| subsection "Required Renderbuffer Formats", pp. 203, 204 (section |
| 9.2.5, p.215 in ES 3.1) |
| |
| OpenGL ES 3.0 |
| In the last paragraph beginning "Implementations must support |
| creation ...", modify the final phrase to |
| |
| * "with the exception of signed and unsigned integer, RGBA16F, |
| + R32F, RG32F and RGBA32F formats. |
| |
| OpenGL ES 3.1 |
| Amend the last paragraph |
| |
| * "... with the exceptions of the signed and unsigned integer |
| * formats, for which they are only required to support creation of |
| * renderbuffers with up to the value of MAX_INTEGER_SAMPLES |
| * multisamples, which must be at least one, and the RGBA16F, R32F, |
| * RG32F and RGBA32F formats, for which they are only required to |
| * support creation of single sample renderbuffers. |
| --- |
| |
| Additions to |
| Chapter 6 of the OpenGL ES 3.0 specification (State and State |
| Requests) |
| Chapter 19 of the OpenGL ES 3.1 specification (Context State |
| Queries) |
| |
| 6.1.15 Internal Format Queries, p. 241 (section 19.3.1, p.350 in ES |
| 3.1) |
| |
| OpenGL ES 3.0 |
| In paragraph 8 after "Since multisampling is not supported |
| for signed and unsigned integer internal formats, the value of |
| NUM_SAMPLE_COUNTS will be zero for such formats.", insert new |
| one-sentence paragraph: |
| |
| "If <internalformat> is RGBA16F, R32F, RG32F, or RGBA32F, the |
| value of NUM_SAMPLE_COUNTS may be zero, or else the maximum |
| value in SAMPLES may be less than the value of MAX_SAMPLES." |
| |
| OpenGL ES3.1 |
| Append a bullet to the list under "NUM_SAMPLE_COUNTS: ..." |
| |
| - If /internalformat/ is RGBA16F, R32F, RG32F, or RGBA32F, the |
| value of NUM_SAMPLE_COUNTS may be zero. |
| |
| Append a bullet to the list under "The maximum value in SAMPLES... |
| |
| o The value may be less than the value of MAX_SAMPLES if |
| /internalformat/ is RGBA16F, R32F, RG32F, or RGBA32F. |
| ---- |
| |
| New Implementation Dependent State |
| |
| None |
| |
| Issues |
| |
| Revision History |
| |
| Rev. Date Author Changes |
| ---- -------- --------- ----------------------------------------- |
| 1 10/16/12 markc Initial version. |
| 2 10/18/12 markc Referenced preliminary version of OpenGL |
| ES 3.0.1 specification and updated page |
| numbers. |
| 3 11/21/12 markc Corrected IP status. |
| 4 01/09/13 markc Changed date of referenced OpenGL ES |
| 3.0.1 specification. Made minor language |
| simplification. |
| 5 01/11/13 markc Changed date to release version of |
| OpenGL ES 3.0.1 specification. |
| Clarified change to "Required |
| renderbuffer formats" section. |
| 6 12/18/13 markc Update to match the substantial |
| clarifications regarding "effective |
| internal format" in OpenGL ES 3.0.3 |
| 7 03/17/14 markc Add interactions with OpenGL ES 3.1. |
| 8 03/19/14 markc Minor language simplifications. |
| 9 05/21/14 markc Fix grammar in amendment to OpenGL ES |
| 3.1 section 9.2.5. |
| 10 03/26/15 markc Clarify blending restriction so it can't |
| be interpreted to include R11F_G11F_B10F. |
| |
| # vim:ai:ts=4:sts=4:sw=4:expandtab:textwidth=70 |