| Name |
| |
| OES_texture_buffer |
| |
| Name Strings |
| |
| GL_OES_texture_buffer |
| |
| Contact |
| |
| Jon Leech (oddhack 'at' sonic.net) |
| Daniel Koch, NVIDIA (dkoch 'at' nvidia.com) |
| |
| Contributors |
| |
| Pat Brown, NVIDIA |
| James Helferty, NVIDIA |
| Graham Connor, Imagination |
| Ben Bowman, Imagination |
| Jonathan Putsman, Imagination |
| Piotr Czubak, Intel |
| Marcin Kantoch, Mobica |
| Contributors to ARB_texture_buffer_object |
| Contributors to ARB_texture_buffer_range |
| |
| Notice |
| |
| Copyright (c) 2008-2013 The Khronos Group Inc. Copyright terms at |
| http://www.khronos.org/registry/speccopyright.html |
| |
| Portions Copyright (c) 2013-2014 NVIDIA Corporation. |
| |
| Status |
| |
| Approved by the OpenGL ES Working Group |
| Ratified by the Khronos Board of Promoters on November 7, 2014 |
| |
| Version |
| |
| Last Modified Date: July 14, 2014 |
| Revision: 2 |
| |
| Number |
| |
| OpenGL ES Extension #216 |
| |
| Dependencies |
| |
| OpenGL ES 3.1 and OpenGL ES Shading Language 3.10 are required. |
| |
| This specification is written against the OpenGL ES 3.1 (March 17, |
| 2014) and OpenGL ES 3.10 Shading Language (March 17, 2014) |
| Specifications. |
| |
| This extension interacts with OES_shader_image_atomic. |
| |
| Overview |
| |
| This extension provides a new texture type, called a buffer texture. |
| Buffer textures are one-dimensional arrays of texels whose storage comes |
| from an attached buffer object. When a buffer object is bound to a |
| buffer texture, a format is specified, and the data in the buffer object |
| is treated as an array of texels of the specified format. |
| |
| The use of a buffer object to provide storage allows the texture data to |
| be specified in a number of different ways: via buffer object loads |
| (BufferData), direct CPU writes (MapBuffer), or framebuffer readbacks to |
| pixel buffer objects (ReadPixels). A buffer object can also be loaded by |
| transform feedback, which captures |
| selected transformed attributes of vertices processed by the GL. Several |
| of these mechanisms do not require an extra data copy, which would be |
| required when using conventional TexImage-like entry points. |
| |
| Buffer textures do not support mipmapping, texture lookups with |
| normalized floating-point texture coordinates, and texture filtering of |
| any sort. |
| They can be accessed via single texel fetch operations in programmable |
| shaders, using a new sampler type and texel fetch function, and |
| access can be controlled using the same memory barrier operations |
| as for other texture types. |
| |
| Buffer textures are treated as (potentially large) one-dimensional |
| textures; the maximum texture size supported for buffer textures in the |
| initial implementation of this extension is 2^27 texels (note that this |
| extension only guarantees support for buffer textures with 2^16 texels, |
| but we expect most implementations to exceed that substantially). When a |
| buffer object is attached to a buffer texture, a size is not specified; |
| rather, the number of texels in the texture is taken by dividing the size |
| of the buffer object by the size of each texel. |
| |
| This extension also allows a sub-range of the buffer's data store to |
| be attached to a texture. This can be used, for example, to allow multiple |
| buffer textures to be backed by independent sub-ranges of the same buffer |
| object, or for different sub-ranges of a single buffer object to be used |
| for different purposes. |
| |
| New Procedures and Functions |
| |
| void TexBufferOES(enum target, enum internalformat, uint buffer); |
| |
| void TexBufferRangeOES(enum target, enum internalformat, uint buffer, |
| intptr offset, sizeiptr size); |
| |
| New Tokens |
| |
| Accepted by the <target> parameter of BindBuffer, BufferData, |
| BufferSubData, MapBufferRange, BindTexture, UnmapBuffer, |
| GetBufferParameteriv, GetBufferPointerv, TexBufferOES, and |
| TexBufferRangeOES: |
| |
| TEXTURE_BUFFER_OES 0x8C2A |
| |
| Accepted by the <pname> parameters of GetBooleanv, GetFloatv, and |
| GetIntegerv: |
| |
| TEXTURE_BUFFER_BINDING_OES 0x8C2A |
| (note that this token name is an alias for TEXTURE_BUFFER_OES, |
| and is used for naming consistency with queries for the buffers |
| bound to other buffer binding points). |
| MAX_TEXTURE_BUFFER_SIZE_OES 0x8C2B |
| TEXTURE_BINDING_BUFFER_OES 0x8C2C |
| TEXTURE_BUFFER_OFFSET_ALIGNMENT_OES 0x919F |
| |
| Returned in the <type> parameter of GetActiveUniform, the <params> |
| parameter of GetActiveUniformsiv, and the <params> parameter of |
| GetProgramResourceiv when the TYPE property is queried on the |
| UNIFORM interface: |
| |
| SAMPLER_BUFFER_OES 0x8DC2 |
| INT_SAMPLER_BUFFER_OES 0x8DD0 |
| UNSIGNED_INT_SAMPLER_BUFFER_OES 0x8DD8 |
| IMAGE_BUFFER_OES 0x9051 |
| INT_IMAGE_BUFFER_OES 0x905C |
| UNSIGNED_INT_IMAGE_BUFFER_OES 0x9067 |
| |
| Accepted by the <pname> parameter of GetTexLevelParameter: |
| |
| TEXTURE_BUFFER_DATA_STORE_BINDING_OES 0x8C2D |
| TEXTURE_BUFFER_OFFSET_OES 0x919D |
| TEXTURE_BUFFER_SIZE_OES 0x919E |
| |
| Additions to the OpenGL ES 3.1 Specification |
| |
| Modify section 6.1 "Creating and Binding Buffer Objects" |
| |
| Add to table 6.1 "Buffer object binding targets": |
| |
| Target Name Purpose Described in section(s) |
| ------------------ ------------------- ----------------------- |
| TEXTURE_BUFFER_OES Texture data buffer 8.8tbo |
| |
| |
| Modify section 7.3 "Program Objects" |
| |
| Add to table 7.3 "OpenGL ES Shading Language type tokens...": |
| |
| Type Name Token Keyword |
| --------------------------------------- --------------------------- |
| SAMPLER_BUFFER_OES samplerBuffer |
| INT_SAMPLER_BUFFER_OES isamplerBuffer |
| UNSIGNED_INT_SAMPLER_BUFFER_OES usamplerBuffer |
| IMAGE_BUFFER_OES imageBuffer |
| INT_IMAGE_BUFFER_OES iimageBuffer |
| UNSIGNED_INT_IMAGE_BUFFER_OES uimageBuffer |
| |
| |
| Modify section 7.11 "Shader Memory Access" |
| |
| Change the description of TEXTURE_FETCH_BARRIER_BIT for MemoryBarrier on |
| p. 116: |
| |
| * TEXTURE_FETCH_BARRIER_BIT: Texture fetches from shaders, including |
| fetches from buffer object memory via buffer textures, after the |
| barrier will reflect data written by shaders prior to the barrier. |
| |
| |
| Modify chapter 8 "Textures and Samplers" |
| |
| Add to the fourth paragraph of the section, on p. 128: |
| |
| ... six faces of the cube. Buffer textures are special one-dimensional |
| textures whose texel arrays are stored in separate buffer objects. |
| |
| |
| Modify section 8.1 "Texture Objects" |
| |
| Change the first paragraph of the section on p. 129: |
| |
| ... The default texture object is bound to each of the TEXTURE_2D, |
| TEXTURE_3D, TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP, TEXTURE_2D_MULTISAMPLE, |
| and TEXTURE_BUFFER_OES targets ... |
| |
| |
| Change the paragaph following the description of IsTexture on p. 131: |
| |
| The texture object name space, including the initial two-, and three- |
| dimensional, two-dimensional array, cube map, two-dimensional |
| multisample, and buffer texture objects, is shared among all texture |
| units. ... |
| |
| |
| Add new section 8.8tbo following section 8.8 "Multisample Textures": |
| |
| 8.8tbo Buffer Textures |
| |
| In addition to the types of textures described in previous sections, one |
| additional type of texture is supported. A <buffer texture> is a |
| one-dimensional texture, consisting of a one-dimensional texel array. |
| Unlike other texture types, the texel array is not stored as part of the |
| texture. Instead, a buffer object is attached to a buffer texture and |
| the texel array is taken from that buffer object's data store. When the |
| contents of a buffer object's data store are modified, those changes are |
| reflected in the contents of any buffer texture to which the buffer |
| object is attached. Buffer textures do not have multiple image levels; |
| only a single data store is available. |
| |
| The command |
| |
| void TexBufferRangeOES(enum target, enum internalformat, uint buffer, |
| intptr offset, sizeiptr size); |
| |
| attaches the range of the storage for the buffer object named <buffer> |
| for <size> basic machine units, starting at <offset> (also in basic |
| machine units) to the active buffer texture, and specifies an internal |
| format for the texel array found in the range of the attached buffer |
| object. If <buffer> is zero, then any buffer object attached to the |
| buffer texture is detached, the values <offset> and <size> are ignored |
| and the state for <offset> and <size> for the buffer texture are reset |
| to zero. <target> must be TEXTURE_BUFFER_OES. <internalformat> specifies |
| the storage format and must be one of the sized internal formats found |
| in Table texbo.1. |
| |
| Errors |
| |
| An INVALID_ENUM error is generated if <target> is not |
| TEXTURE_BUFFER_OES. |
| |
| An INVALID_ENUM error is generated if <internalformat> is not one of the |
| sized internal formats found in Table texbo.1. |
| |
| An INVALID_OPERATION error is generated if <buffer> is non-zero, but is |
| not the name of an existing buffer object. |
| |
| An INVALID_VALUE error is generated if <offset> is negative, if <size> |
| is less than or equal to zero, or if <offset> + <size> is greater than |
| the value of BUFFER_SIZE for the buffer bound to <target>. |
| |
| An INVALID_VALUE error is generated if <offset> is not an integer |
| multiple of the value of TEXTURE_BUFFER_OFFSET_ALIGNMENT_OES. |
| |
| |
| The command |
| |
| void TexBufferOES(enum target, enum internalformat, uint buffer); |
| |
| is equivalent to |
| |
| TexBufferRangeOES(target, internalformat, buffer, 0, size); |
| |
| with <size> set to the value of BUFFER_SIZE for <buffer>. |
| |
| When a range of the storage of a buffer object is attached to a buffer |
| texture, the range of the buffer's data store is taken as the texture's |
| texel array. The number of texels in the buffer texture's texel array is |
| given by |
| |
| floor(<size> / (<components> * sizeof(<base_type>)), |
| |
| where <components> and <base_type> are the element count and base data |
| type for elements, as specified in Table texbo.1. |
| |
| The number of texels in the texel array is then clamped to the value of |
| the implementation-dependent limit MAX_TEXTURE_BUFFER_SIZE_OES. When a |
| buffer texture is accessed in a shader, the results of a texel fetch are |
| undefined if the specified texel coordinate is negative, or greater than |
| or equal to the clamped number of texels in the texel array. |
| |
| When a buffer texture is accessed in a shader, an integer is provided to |
| indicate the texel coordinate being accessed. If no buffer object is |
| bound to the buffer texture, the results of the texel access are |
| undefined. Otherwise, the attached buffer object's data store is |
| interpreted as an array of elements of the GL data type corresponding to |
| <internalformat>. Each texel consists of one to four elements that are |
| mapped to texture components (R, G, B, and A). Element <m> of the texel |
| numbered <n> is taken from element <n> * <components> + <m> of the |
| attached buffer object's data store. Elements and texels are both |
| numbered starting with zero. For texture formats with signed or unsigned |
| normalized fixed-point components, the extracted values are converted to |
| floating-point values using equations 2.2 or 2.1 respectively. The |
| components of the texture are then converted to an (R,G,B,A) vector |
| according to Table texbo.1, and returned to the shader as a |
| four-component result vector with components of the appropriate data |
| type for the texture's internal format. The base data type, component |
| count, normalized component information, and mapping of data store |
| elements to texture components is specified in Table texbo.1. |
| |
| Component |
| Sized Internal Format Base Type Components Norm 0 1 2 3 |
| --------------------- --------- ---------- ---- --------- |
| R8 ubyte 1 Yes R 0 0 1 |
| R16F half 1 No R 0 0 1 |
| R32F float 1 No R 0 0 1 |
| R8I byte 1 No R 0 0 1 |
| R16I short 1 No R 0 0 1 |
| R32I int 1 No R 0 0 1 |
| R8UI ubyte 1 No R 0 0 1 |
| R16UI ushort 1 No R 0 0 1 |
| R32UI uint 1 No R 0 0 1 |
| RG8 ubyte 2 Yes R G 0 1 |
| RG16F half 2 No R G 0 1 |
| RG32F float 2 No R G 0 1 |
| RG8I byte 2 No R G 0 1 |
| RG16I short 2 No R G 0 1 |
| RG32I int 2 No R G 0 1 |
| RG8UI ubyte 2 No R G 0 1 |
| RG16UI ushort 2 No R G 0 1 |
| RG32UI uint 2 No R G 0 1 |
| RGB32F float 3 No R G B 1 |
| RGB32I int 3 No R G B 1 |
| RGB32UI uint 3 No R G B 1 |
| RGBA8 ubyte 4 Yes R G B A |
| RGBA16F half 4 No R G B A |
| RGBA32F float 4 No R G B A |
| RGBA8I byte 4 No R G B A |
| RGBA16I short 4 No R G B A |
| RGBA32I int 4 No R G B A |
| RGBA8UI ubyte 4 No R G B A |
| RGBA16UI ushort 4 No R G B A |
| RGBA32UI uint 4 No R G B A |
| Table texbo.1, Internal Formats for Buffer Textures. For each |
| format, the data type of each element is indicated in the "Base |
| Type" column and the element count is in the "Components" column. |
| The "Norm" column indicates whether components should be treated as |
| normalized floating-point values. The "Component 0, 1, 2, and 3" |
| columns indicate the mapping of each element of a texel to texture |
| components. |
| |
| In addition to attaching buffer objects to textures, buffer objects can |
| be bound to the buffer object target named TEXTURE_BUFFER_OES, in order |
| to specify, modify, or read the buffer object's data store. The buffer |
| object bound to TEXTURE_BUFFER_OES has no effect on rendering. A buffer |
| object is bound to TEXTURE_BUFFER_OES by calling BindBuffer with |
| <target> set to TEXTURE_BUFFER_OES, as described in chapter 6. |
| |
| |
| Modify section 8.10.3 "Texture Level Parameter Queries" |
| |
| Modify the second and third paragraphs in the description of |
| GetTexLevelParameter*, on p. 173: |
| |
| "<target> may be ... TEXTURE_2D_ARRAY, TEXTURE_BUFFER_OES, one of the |
| cube map face ... indicating the ... two-dimensional array texture, |
| buffer texture, one of the six distinct ... |
| |
| <lod> determines which level-of-detail's state is returned. If <target> |
| is TEXTURE_BUFFER_OES, <lod> must be zero." |
| |
| |
| Modify section 8.18 "Texture State" |
| |
| Change the first paragraph of the section on p. 191: |
| |
| ... Each array has associated with it a width, height (except for buffer |
| textures), and depth ... a boolean describing whether the image is |
| compressed or not, an integer size of a compressed image, and an integer |
| containing the name of a buffer object bound as the data store of the |
| image. |
| |
| Each inital texel array is null ... the compressed flag set to FALSE, a |
| zero compressed size, and the bound buffer object name is zero. |
| |
| Buffer textures also contain two pointer sized integers containing the |
| offset and range of the buffer object's data store. |
| |
| |
| Modify section 8.22 "Texture Image Loads and Stores" |
| |
| On p. 197 in the errors section for BindImageTexture, replace the |
| last error with the following: |
| |
| An INVALID_OPERATION error is generated if <texture> is neither the |
| name of a buffer texture, nor the name of an immutable texture object. |
| |
| Add to table 8.26 "Mapping of image load, store..." |
| |
| Texture target face/ |
| i j k layer |
| -------------------------- -- -- -- ----- |
| TEXTURE_BUFFER_OES x - - - |
| |
| |
| New State |
| |
| Add to table 20.8 "Textures (selector, state per texture unit)" |
| |
| Initial |
| Get Value Type Get Command Value Description Sec. |
| ---------------------------------- -------- ----------- ---------- ---------------------------- ----- |
| TEXTURE_BINDING_BUFFER_OES 48* x Z+ GetIntegerv 0 Texture object bound 8.1 |
| to TEXTURE_BUFFER_OES |
| |
| Add to table 20.10 "Textures (state per texture image)" |
| |
| Initial |
| Get Value Type Get Command Value Description Sec. |
| ------------------------------------- ----- -------------------- ------- --------------------------- -------- |
| TEXTURE_BUFFER_DATA_STORE_BINDING_OES Z+ GetTexLevelParameter 0 Buffer object bound to the 8.8tbo |
| data store for the active |
| image unit's buffer texture |
| TEXTURE_BUFFER_OFFSET_OES n x Z GetTexLevelParameter 0 Offset into buffer's data 8.8tbo |
| store used for the active |
| image unit's buffer texture |
| TEXTURE_BUFFER_SIZE_OES n x Z GetTexLevelParameter 0 Size of the buffer's data 8.8tbo |
| store used for the active |
| image unit's buffer texture |
| |
| Modify the TEXTURE_INTERNAL_FORMAT entry in table 20.10 |
| |
| Initial |
| Get Value Type Get Command Value Description Sec. |
| ---------------------- ---- -------------------- ------- --------------------------- ------ |
| TEXTURE_INTERNAL_FORMAT E GetTexLevelParameter RGBA Internal format[fn1] 8 |
| or R8 |
| [fn1] The initial internal format is R8 for texture buffer object |
| images, RGBA for all other texture images. |
| |
| |
| Add to table 20.50 "Miscellaneous" |
| |
| Initial |
| Get Value Type Get Command Value Description Sec. |
| -------------------------- ---- ----------- ------- --------------------------- ---- |
| TEXTURE_BUFFER_BINDING_OES Z+ GetIntegerv 0 Buffer object bound to 6.1 |
| generic buffer texture |
| binding point |
| |
| |
| New Implementation Dependent State |
| |
| Add to table 20.41 "Implementation Dependent Values (cont.)" |
| |
| Minimum |
| Get Value Type Get Command Value Description Sec. |
| ----------------------------------- ---- ----------- ------- --------------------- -------- |
| MAX_TEXTURE_BUFFER_SIZE_OES Z+ GetIntegerv 65536 No. of addressable 8.8tbo |
| texels for buffer |
| textures |
| TEXTURE_BUFFER_OFFSET_ALIGNMENT_OES Z+ GetIntegerv 256 (**) Minimum required 8.8tbo |
| alignment for texture |
| buffer offsets |
| |
| (**) the value of TEXTURE_BUFFER_OFFSET_ALIGNMENT_OES is the largest |
| allowed value. Smaller values are permitted. |
| |
| Modifications to the OpenGL ES Shading Language Specification, Version 3.10 |
| |
| #extension GL_OES_texture_buffer: <behavior> |
| |
| The above line is needed to control the GLSL features described in |
| this section. |
| |
| |
| A new preprocessor #define is added to the OpenGL ES Shading Language: |
| |
| #define GL_OES_texture_buffer 1 |
| |
| |
| Add the following keywords to section 3.7 "Keywords" on p. 14 and |
| remove them from the list of reserved keywords on p. 15: |
| |
| samplerBuffer |
| isamplerBuffer |
| usamplerBuffer |
| imageBuffer |
| iimageBuffer |
| uimageBuffer |
| |
| |
| Add to section 4.1 "Basic Types" |
| |
| Add to table "Floating Point Sampler Types (opaque)" on p. 20: |
| |
| Type Meaning |
| ---------------------- --------------------------------------- |
| samplerBuffer a handle for accessing a buffer texture |
| imageBuffer |
| |
| Add to table "Signed Integer Sampler Types (opaque)" on p. 21: |
| |
| Type Meaning |
| ----------------------- ---------------------------------------- |
| isamplerBuffer a handle for accessing an integer buffer |
| iimageBuffer texture |
| |
| Add to table "Unsigned Integer Sampler Types (opaque)" on p. 21: |
| |
| Type Meaning |
| ----------------------- ------------------------------------------ |
| usamplerBuffer a handle for accessing an unsigned integer |
| uimageBuffer buffer texture |
| |
| |
| Modify section 4.7.4 "Default Precision Qualifiers" |
| |
| Add the following types to the list of types which have no default |
| precision qualifiers at the top of p. 65: |
| |
| samplerBuffer |
| isamplerBuffer |
| usamplerBuffer |
| imageBuffer |
| iimageBuffer |
| uimageBuffer |
| |
| |
| Modify section 8.9 "Texture Functions" |
| |
| Add at the end of the paragraph starting "In all functions below" on p. |
| 119: |
| |
| ... performing the texture access operation. No <bias> or <lod> |
| parameters for multisample textures or texture buffers are supported, |
| because mipmaps are not allowed for these types of textures. |
| |
| |
| Add to the table of Texture Query Functions in section 8.9.1 on p. 120: |
| |
| highp int textureSize(gsamplerBuffer sampler) |
| |
| |
| Add to the table of Texel Lookup Functions in section 8.9.2 on p. 121: |
| |
| gvec4 texelFetch(gsamplerBuffer sampler, int P) |
| |
| |
| Modify section 8.14 "Image Functions": |
| |
| Add to the description of the IMAGE_INFO placeholder in the fourth |
| paragraph of the section, on p. 132: |
| |
| The "IMAGE_INFO" in the prototypes below is a placeholder ... |
| |
| gimage2DArray image, ivec3 coord |
| gimageBuffer image, int P |
| |
| |
| Add to the table of image functions on p. 133: |
| |
| highp int imageSize(readonly writeonly gimageBuffer image) |
| |
| |
| Change the introduction of section 8.16 "Shader Memory Control |
| Functions": |
| |
| Shaders of all types may read and write the contents of textures and |
| buffer objects using image variables. While the order of reads ... |
| |
| |
| Dependencies on OES_shader_image_atomic |
| |
| When OES_shader_image_atomic is supported, all the imageAtomic* functions |
| are supported on image buffers. |
| |
| |
| Issues |
| |
| Note: These issues apply specifically to the definition of the |
| OES_texture_buffer specification, which is based on the OpenGL |
| extension ARB_texture_buffer_object as updated in OpenGL 4.x. Resolved |
| issues from ARB_texture_buffer_object have been removed (with the |
| exception of issue 6, which is copied from issue 12 of the ARB |
| extension), but remain largely applicable to this extension. |
| ARB_texture_buffer_object can be found in the OpenGL Registry. |
| |
| (1) What functionality was removed from ARB_texture_buffer_object? |
| |
| - Support for sized buffer formats R16, RG16, and RGBA16, and for |
| MapBuffer and GetBufferSubData is removed since they do not exist |
| in ES 3.0. |
| - Support for ALPHA and LUMINANCE buffer textures is removed since |
| they are legacy formats in ES 3.0, and there are no sized ALPHA or |
| LUMINANCE formats. |
| - GL 4.4 extended support for buffer textures to the |
| GetInternalformativ query <target>, but that command in ES 3.0 is |
| restricted to returning multisampling information, which is |
| irrelevant to buffer textures. |
| - Support for TEXTURE_BUFFER_FORMAT is removed. Use the |
| GetTexLevelParameter* TEXTURE_INTERNAL_FORMAT query instead. |
| |
| (2) What functionality was changed and added relative to |
| ARB_texture_buffer_object? |
| |
| - OES_texture_buffer more closely matches OpenGL 4.4 language, |
| rather than ARB_texture_buffer_object language. |
| * Support for querying buffer texture state with |
| GetTexLevelParameter* is added |
| * Support for sized R, RG, and RGB formats is added. Per issue (2) |
| of ARB_texture_buffer_object, some formats supported by ES 3.0 but |
| which may present hardware difficulties are not supported, |
| including R*8_SNORM and all RGB formats other than RGB32*. |
| - Interactions were added with OpenGL ES 3.1 and other OES extension |
| functionality, primarily shader memory access as well as texture |
| level parameter queries. |
| - incorporates the ability to bind a sub-range of a buffer from |
| ARB_texture_buffer_range. |
| |
| (3) What should the rules on GLSL suffixing be? |
| |
| RESOLVED: The new sampler and image types are reserved keywords in |
| ESSL 3.00 so they can be use without prefix/suffixes. |
| |
| (4) Do we want the ARB_texture_buffer_range functionality present in GL |
| 4.4? This adds useful functionality (backing the buffer texture with |
| a selected part of a buffer object) at low increase in complexity of |
| the spec. |
| |
| RESOLVED: Yes, this functionality is included in this extension. |
| |
| (5) How is the various buffer texture-related state queried? |
| |
| There are three pieces of state that can be queried: |
| (a) the texture object bound to buffer texture binding point for |
| the active texture image unit (TEXTURE_BINDING_BUFFER_OES). |
| (b) the buffer object whose data store was used by that texture |
| object (TEXTURE_BUFFER_DATA_STORE_BINDING_OES). |
| (c) the buffer object bound to the TEXTURE_BUFFER_OES binding |
| point (TEXTURE_BUFFER_BINDING_OES). |
| |
| The first and last are queried with GetIntegerv, but the second is |
| queried with GetTexLevelParameter. Note that for (a) and (b), the |
| texture queried is the one bound to TEXTURE_BUFFER_EXT on the active |
| texture image unit. |
| |
| (6) Should the R16, RG16 and RGBA16 texture formats be supported? |
| |
| RESOLVED. No. OpenGL ES 3.0 does not support these formats. They were |
| considered for late addition to OpenGL ES 3.1 in Bug 11366, but didn't |
| make the cut. In the absence of another extension to add them, they |
| are not supported here either. |
| |
| (7) OpenGL ES 3.1 does not allow images to be created from mutable |
| textures (ie those created with TexImage). How does this affect |
| this extension? |
| |
| RESOLVED. Buffer textures would technically be considered mutable |
| since they are not defined by a TexStorage command and it is possible |
| to redefine the buffer storage which backs them. However there is |
| currently no ES API for creating immutable buffers |
| (ARB_buffer_storage does this for GL) and thus we must allow mutable |
| buffers to back buffer textures. |
| |
| (8) This extension is called OES_texture_buffer, but the desktop name |
| is {EXT,ARB}_texture_buffer_object. Is the name change intentional? |
| |
| RESOLVED. Yes. We want to avoid extensions in ES and GL that have the |
| same name, but not the same functionality (except as a subset). |
| |
| OES_texture_buffer includes the functionality of ARB_texture_buffer_object, |
| ARB_texture_buffer_range, and ARB_texture_buffer_rgb32, along with some |
| changes that were made with how those operate GL 4.4. It would have been |
| too messy and confusing to try to incorporate all these into the existing |
| EXT_texture_buffer_object spec from GL as interactions with ES. |
| |
| |
| Revision History |
| |
| Rev. Date Author Changes |
| ---- ---------- --------- ------------------------------------------------- |
| 2 07/14/2014 dkoch Clarify that TEXTURE_BUFFER_DATA_STORE_BINDING_EXT |
| is queried with GetTexLevelParameter not |
| GetIntegerv (Bug 12343). Fix types in unsigned |
| sampler types table (Bug 12356) |
| |
| 1 06/18/2014 dkoch Initial OES version based on EXT. |
| No functional changes. |