1Name 2 3 OES_texture_buffer 4 5Name Strings 6 7 GL_OES_texture_buffer 8 9Contact 10 11 Jon Leech (oddhack 'at' sonic.net) 12 Daniel Koch, NVIDIA (dkoch 'at' nvidia.com) 13 14Contributors 15 16 Pat Brown, NVIDIA 17 James Helferty, NVIDIA 18 Graham Connor, Imagination 19 Ben Bowman, Imagination 20 Jonathan Putsman, Imagination 21 Piotr Czubak, Intel 22 Marcin Kantoch, Mobica 23 Contributors to ARB_texture_buffer_object 24 Contributors to ARB_texture_buffer_range 25 26Notice 27 28 Copyright (c) 2008-2013 The Khronos Group Inc. Copyright terms at 29 http://www.khronos.org/registry/speccopyright.html 30 31Specification Update Policy 32 33 Khronos-approved extension specifications are updated in response to 34 issues and bugs prioritized by the Khronos OpenGL ES Working Group. For 35 extensions which have been promoted to a core Specification, fixes will 36 first appear in the latest version of that core Specification, and will 37 eventually be backported to the extension document. This policy is 38 described in more detail at 39 https://www.khronos.org/registry/OpenGL/docs/update_policy.php 40 41 Portions Copyright (c) 2013-2014 NVIDIA Corporation. 42 43Status 44 45 Approved by the OpenGL ES Working Group 46 Ratified by the Khronos Board of Promoters on November 7, 2014 47 48Version 49 50 Last Modified Date: July 14, 2014 51 Revision: 2 52 53Number 54 55 OpenGL ES Extension #216 56 57Dependencies 58 59 OpenGL ES 3.1 and OpenGL ES Shading Language 3.10 are required. 60 61 This specification is written against the OpenGL ES 3.1 (March 17, 62 2014) and OpenGL ES 3.10 Shading Language (March 17, 2014) 63 Specifications. 64 65 This extension interacts with OES_shader_image_atomic. 66 67Overview 68 69 This extension provides a new texture type, called a buffer texture. 70 Buffer textures are one-dimensional arrays of texels whose storage comes 71 from an attached buffer object. When a buffer object is bound to a 72 buffer texture, a format is specified, and the data in the buffer object 73 is treated as an array of texels of the specified format. 74 75 The use of a buffer object to provide storage allows the texture data to 76 be specified in a number of different ways: via buffer object loads 77 (BufferData), direct CPU writes (MapBuffer), or framebuffer readbacks to 78 pixel buffer objects (ReadPixels). A buffer object can also be loaded by 79 transform feedback, which captures 80 selected transformed attributes of vertices processed by the GL. Several 81 of these mechanisms do not require an extra data copy, which would be 82 required when using conventional TexImage-like entry points. 83 84 Buffer textures do not support mipmapping, texture lookups with 85 normalized floating-point texture coordinates, and texture filtering of 86 any sort. 87 They can be accessed via single texel fetch operations in programmable 88 shaders, using a new sampler type and texel fetch function, and 89 access can be controlled using the same memory barrier operations 90 as for other texture types. 91 92 Buffer textures are treated as (potentially large) one-dimensional 93 textures; the maximum texture size supported for buffer textures in the 94 initial implementation of this extension is 2^27 texels (note that this 95 extension only guarantees support for buffer textures with 2^16 texels, 96 but we expect most implementations to exceed that substantially). When a 97 buffer object is attached to a buffer texture, a size is not specified; 98 rather, the number of texels in the texture is taken by dividing the size 99 of the buffer object by the size of each texel. 100 101 This extension also allows a sub-range of the buffer's data store to 102 be attached to a texture. This can be used, for example, to allow multiple 103 buffer textures to be backed by independent sub-ranges of the same buffer 104 object, or for different sub-ranges of a single buffer object to be used 105 for different purposes. 106 107New Procedures and Functions 108 109 void TexBufferOES(enum target, enum internalformat, uint buffer); 110 111 void TexBufferRangeOES(enum target, enum internalformat, uint buffer, 112 intptr offset, sizeiptr size); 113 114New Tokens 115 116 Accepted by the <target> parameter of BindBuffer, BufferData, 117 BufferSubData, MapBufferRange, BindTexture, UnmapBuffer, 118 GetBufferParameteriv, GetBufferPointerv, TexBufferOES, and 119 TexBufferRangeOES: 120 121 TEXTURE_BUFFER_OES 0x8C2A 122 123 Accepted by the <pname> parameters of GetBooleanv, GetFloatv, and 124 GetIntegerv: 125 126 TEXTURE_BUFFER_BINDING_OES 0x8C2A 127 (note that this token name is an alias for TEXTURE_BUFFER_OES, 128 and is used for naming consistency with queries for the buffers 129 bound to other buffer binding points). 130 MAX_TEXTURE_BUFFER_SIZE_OES 0x8C2B 131 TEXTURE_BINDING_BUFFER_OES 0x8C2C 132 TEXTURE_BUFFER_OFFSET_ALIGNMENT_OES 0x919F 133 134 Returned in the <type> parameter of GetActiveUniform, the <params> 135 parameter of GetActiveUniformsiv, and the <params> parameter of 136 GetProgramResourceiv when the TYPE property is queried on the 137 UNIFORM interface: 138 139 SAMPLER_BUFFER_OES 0x8DC2 140 INT_SAMPLER_BUFFER_OES 0x8DD0 141 UNSIGNED_INT_SAMPLER_BUFFER_OES 0x8DD8 142 IMAGE_BUFFER_OES 0x9051 143 INT_IMAGE_BUFFER_OES 0x905C 144 UNSIGNED_INT_IMAGE_BUFFER_OES 0x9067 145 146 Accepted by the <pname> parameter of GetTexLevelParameter: 147 148 TEXTURE_BUFFER_DATA_STORE_BINDING_OES 0x8C2D 149 TEXTURE_BUFFER_OFFSET_OES 0x919D 150 TEXTURE_BUFFER_SIZE_OES 0x919E 151 152Additions to the OpenGL ES 3.1 Specification 153 154 Modify section 6.1 "Creating and Binding Buffer Objects" 155 156 Add to table 6.1 "Buffer object binding targets": 157 158 Target Name Purpose Described in section(s) 159 ------------------ ------------------- ----------------------- 160 TEXTURE_BUFFER_OES Texture data buffer 8.8tbo 161 162 163 Modify section 7.3 "Program Objects" 164 165 Add to table 7.3 "OpenGL ES Shading Language type tokens...": 166 167 Type Name Token Keyword 168 --------------------------------------- --------------------------- 169 SAMPLER_BUFFER_OES samplerBuffer 170 INT_SAMPLER_BUFFER_OES isamplerBuffer 171 UNSIGNED_INT_SAMPLER_BUFFER_OES usamplerBuffer 172 IMAGE_BUFFER_OES imageBuffer 173 INT_IMAGE_BUFFER_OES iimageBuffer 174 UNSIGNED_INT_IMAGE_BUFFER_OES uimageBuffer 175 176 177 Modify section 7.11 "Shader Memory Access" 178 179 Change the description of TEXTURE_FETCH_BARRIER_BIT for MemoryBarrier on 180 p. 116: 181 182 * TEXTURE_FETCH_BARRIER_BIT: Texture fetches from shaders, including 183 fetches from buffer object memory via buffer textures, after the 184 barrier will reflect data written by shaders prior to the barrier. 185 186 187 Modify chapter 8 "Textures and Samplers" 188 189 Add to the fourth paragraph of the section, on p. 128: 190 191 ... six faces of the cube. Buffer textures are special one-dimensional 192 textures whose texel arrays are stored in separate buffer objects. 193 194 195 Modify section 8.1 "Texture Objects" 196 197 Change the first paragraph of the section on p. 129: 198 199 ... The default texture object is bound to each of the TEXTURE_2D, 200 TEXTURE_3D, TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP, TEXTURE_2D_MULTISAMPLE, 201 and TEXTURE_BUFFER_OES targets ... 202 203 204 Change the paragaph following the description of IsTexture on p. 131: 205 206 The texture object name space, including the initial two-, and three- 207 dimensional, two-dimensional array, cube map, two-dimensional 208 multisample, and buffer texture objects, is shared among all texture 209 units. ... 210 211 212 Add new section 8.8tbo following section 8.8 "Multisample Textures": 213 214 8.8tbo Buffer Textures 215 216 In addition to the types of textures described in previous sections, one 217 additional type of texture is supported. A <buffer texture> is a 218 one-dimensional texture, consisting of a one-dimensional texel array. 219 Unlike other texture types, the texel array is not stored as part of the 220 texture. Instead, a buffer object is attached to a buffer texture and 221 the texel array is taken from that buffer object's data store. When the 222 contents of a buffer object's data store are modified, those changes are 223 reflected in the contents of any buffer texture to which the buffer 224 object is attached. Buffer textures do not have multiple image levels; 225 only a single data store is available. 226 227 The command 228 229 void TexBufferRangeOES(enum target, enum internalformat, uint buffer, 230 intptr offset, sizeiptr size); 231 232 attaches the range of the storage for the buffer object named <buffer> 233 for <size> basic machine units, starting at <offset> (also in basic 234 machine units) to the active buffer texture, and specifies an internal 235 format for the texel array found in the range of the attached buffer 236 object. If <buffer> is zero, then any buffer object attached to the 237 buffer texture is detached, the values <offset> and <size> are ignored 238 and the state for <offset> and <size> for the buffer texture are reset 239 to zero. <target> must be TEXTURE_BUFFER_OES. <internalformat> specifies 240 the storage format and must be one of the sized internal formats found 241 in Table texbo.1. 242 243 Errors 244 245 An INVALID_ENUM error is generated if <target> is not 246 TEXTURE_BUFFER_OES. 247 248 An INVALID_ENUM error is generated if <internalformat> is not one of the 249 sized internal formats found in Table texbo.1. 250 251 An INVALID_OPERATION error is generated if <buffer> is non-zero, but is 252 not the name of an existing buffer object. 253 254 An INVALID_VALUE error is generated if <offset> is negative, if <size> 255 is less than or equal to zero, or if <offset> + <size> is greater than 256 the value of BUFFER_SIZE for the buffer bound to <target>. 257 258 An INVALID_VALUE error is generated if <offset> is not an integer 259 multiple of the value of TEXTURE_BUFFER_OFFSET_ALIGNMENT_OES. 260 261 262 The command 263 264 void TexBufferOES(enum target, enum internalformat, uint buffer); 265 266 is equivalent to 267 268 TexBufferRangeOES(target, internalformat, buffer, 0, size); 269 270 with <size> set to the value of BUFFER_SIZE for <buffer>. 271 272 When a range of the storage of a buffer object is attached to a buffer 273 texture, the range of the buffer's data store is taken as the texture's 274 texel array. The number of texels in the buffer texture's texel array is 275 given by 276 277 floor(<size> / (<components> * sizeof(<base_type>)), 278 279 where <components> and <base_type> are the element count and base data 280 type for elements, as specified in Table texbo.1. 281 282 The number of texels in the texel array is then clamped to the value of 283 the implementation-dependent limit MAX_TEXTURE_BUFFER_SIZE_OES. When a 284 buffer texture is accessed in a shader, the results of a texel fetch are 285 undefined if the specified texel coordinate is negative, or greater than 286 or equal to the clamped number of texels in the texel array. 287 288 When a buffer texture is accessed in a shader, an integer is provided to 289 indicate the texel coordinate being accessed. If no buffer object is 290 bound to the buffer texture, the results of the texel access are 291 undefined. Otherwise, the attached buffer object's data store is 292 interpreted as an array of elements of the GL data type corresponding to 293 <internalformat>. Each texel consists of one to four elements that are 294 mapped to texture components (R, G, B, and A). Element <m> of the texel 295 numbered <n> is taken from element <n> * <components> + <m> of the 296 attached buffer object's data store. Elements and texels are both 297 numbered starting with zero. For texture formats with signed or unsigned 298 normalized fixed-point components, the extracted values are converted to 299 floating-point values using equations 2.2 or 2.1 respectively. The 300 components of the texture are then converted to an (R,G,B,A) vector 301 according to Table texbo.1, and returned to the shader as a 302 four-component result vector with components of the appropriate data 303 type for the texture's internal format. The base data type, component 304 count, normalized component information, and mapping of data store 305 elements to texture components is specified in Table texbo.1. 306 307 Component 308 Sized Internal Format Base Type Components Norm 0 1 2 3 309 --------------------- --------- ---------- ---- --------- 310 R8 ubyte 1 Yes R 0 0 1 311 R16F half 1 No R 0 0 1 312 R32F float 1 No R 0 0 1 313 R8I byte 1 No R 0 0 1 314 R16I short 1 No R 0 0 1 315 R32I int 1 No R 0 0 1 316 R8UI ubyte 1 No R 0 0 1 317 R16UI ushort 1 No R 0 0 1 318 R32UI uint 1 No R 0 0 1 319 RG8 ubyte 2 Yes R G 0 1 320 RG16F half 2 No R G 0 1 321 RG32F float 2 No R G 0 1 322 RG8I byte 2 No R G 0 1 323 RG16I short 2 No R G 0 1 324 RG32I int 2 No R G 0 1 325 RG8UI ubyte 2 No R G 0 1 326 RG16UI ushort 2 No R G 0 1 327 RG32UI uint 2 No R G 0 1 328 RGB32F float 3 No R G B 1 329 RGB32I int 3 No R G B 1 330 RGB32UI uint 3 No R G B 1 331 RGBA8 ubyte 4 Yes R G B A 332 RGBA16F half 4 No R G B A 333 RGBA32F float 4 No R G B A 334 RGBA8I byte 4 No R G B A 335 RGBA16I short 4 No R G B A 336 RGBA32I int 4 No R G B A 337 RGBA8UI ubyte 4 No R G B A 338 RGBA16UI ushort 4 No R G B A 339 RGBA32UI uint 4 No R G B A 340 Table texbo.1, Internal Formats for Buffer Textures. For each 341 format, the data type of each element is indicated in the "Base 342 Type" column and the element count is in the "Components" column. 343 The "Norm" column indicates whether components should be treated as 344 normalized floating-point values. The "Component 0, 1, 2, and 3" 345 columns indicate the mapping of each element of a texel to texture 346 components. 347 348 In addition to attaching buffer objects to textures, buffer objects can 349 be bound to the buffer object target named TEXTURE_BUFFER_OES, in order 350 to specify, modify, or read the buffer object's data store. The buffer 351 object bound to TEXTURE_BUFFER_OES has no effect on rendering. A buffer 352 object is bound to TEXTURE_BUFFER_OES by calling BindBuffer with 353 <target> set to TEXTURE_BUFFER_OES, as described in chapter 6. 354 355 356 Modify section 8.10.3 "Texture Level Parameter Queries" 357 358 Modify the second and third paragraphs in the description of 359 GetTexLevelParameter*, on p. 173: 360 361 "<target> may be ... TEXTURE_2D_ARRAY, TEXTURE_BUFFER_OES, one of the 362 cube map face ... indicating the ... two-dimensional array texture, 363 buffer texture, one of the six distinct ... 364 365 <lod> determines which level-of-detail's state is returned. If <target> 366 is TEXTURE_BUFFER_OES, <lod> must be zero." 367 368 369 Modify section 8.18 "Texture State" 370 371 Change the first paragraph of the section on p. 191: 372 373 ... Each array has associated with it a width, height (except for buffer 374 textures), and depth ... a boolean describing whether the image is 375 compressed or not, an integer size of a compressed image, and an integer 376 containing the name of a buffer object bound as the data store of the 377 image. 378 379 Each inital texel array is null ... the compressed flag set to FALSE, a 380 zero compressed size, and the bound buffer object name is zero. 381 382 Buffer textures also contain two pointer sized integers containing the 383 offset and range of the buffer object's data store. 384 385 386 Modify section 8.22 "Texture Image Loads and Stores" 387 388 On p. 197 in the errors section for BindImageTexture, replace the 389 last error with the following: 390 391 An INVALID_OPERATION error is generated if <texture> is neither the 392 name of a buffer texture, nor the name of an immutable texture object. 393 394 Add to table 8.26 "Mapping of image load, store..." 395 396 Texture target face/ 397 i j k layer 398 -------------------------- -- -- -- ----- 399 TEXTURE_BUFFER_OES x - - - 400 401 402New State 403 404 Add to table 20.8 "Textures (selector, state per texture unit)" 405 406 Initial 407 Get Value Type Get Command Value Description Sec. 408 ---------------------------------- -------- ----------- ---------- ---------------------------- ----- 409 TEXTURE_BINDING_BUFFER_OES 48* x Z+ GetIntegerv 0 Texture object bound 8.1 410 to TEXTURE_BUFFER_OES 411 412 Add to table 20.10 "Textures (state per texture image)" 413 414 Initial 415 Get Value Type Get Command Value Description Sec. 416 ------------------------------------- ----- -------------------- ------- --------------------------- -------- 417 TEXTURE_BUFFER_DATA_STORE_BINDING_OES Z+ GetTexLevelParameter 0 Buffer object bound to the 8.8tbo 418 data store for the active 419 image unit's buffer texture 420 TEXTURE_BUFFER_OFFSET_OES n x Z GetTexLevelParameter 0 Offset into buffer's data 8.8tbo 421 store used for the active 422 image unit's buffer texture 423 TEXTURE_BUFFER_SIZE_OES n x Z GetTexLevelParameter 0 Size of the buffer's data 8.8tbo 424 store used for the active 425 image unit's buffer texture 426 427 Modify the TEXTURE_INTERNAL_FORMAT entry in table 20.10 428 429 Initial 430 Get Value Type Get Command Value Description Sec. 431 ---------------------- ---- -------------------- ------- --------------------------- ------ 432 TEXTURE_INTERNAL_FORMAT E GetTexLevelParameter RGBA Internal format[fn1] 8 433 or R8 434 [fn1] The initial internal format is R8 for texture buffer object 435 images, RGBA for all other texture images. 436 437 438 Add to table 20.50 "Miscellaneous" 439 440 Initial 441 Get Value Type Get Command Value Description Sec. 442 -------------------------- ---- ----------- ------- --------------------------- ---- 443 TEXTURE_BUFFER_BINDING_OES Z+ GetIntegerv 0 Buffer object bound to 6.1 444 generic buffer texture 445 binding point 446 447 448New Implementation Dependent State 449 450 Add to table 20.41 "Implementation Dependent Values (cont.)" 451 452 Minimum 453 Get Value Type Get Command Value Description Sec. 454 ----------------------------------- ---- ----------- ------- --------------------- -------- 455 MAX_TEXTURE_BUFFER_SIZE_OES Z+ GetIntegerv 65536 No. of addressable 8.8tbo 456 texels for buffer 457 textures 458 TEXTURE_BUFFER_OFFSET_ALIGNMENT_OES Z+ GetIntegerv 256 (**) Minimum required 8.8tbo 459 alignment for texture 460 buffer offsets 461 462 (**) the value of TEXTURE_BUFFER_OFFSET_ALIGNMENT_OES is the largest 463 allowed value. Smaller values are permitted. 464 465Modifications to the OpenGL ES Shading Language Specification, Version 3.10 466 467 #extension GL_OES_texture_buffer: <behavior> 468 469 The above line is needed to control the GLSL features described in 470 this section. 471 472 473 A new preprocessor #define is added to the OpenGL ES Shading Language: 474 475 #define GL_OES_texture_buffer 1 476 477 478 Add the following keywords to section 3.7 "Keywords" on p. 14 and 479 remove them from the list of reserved keywords on p. 15: 480 481 samplerBuffer 482 isamplerBuffer 483 usamplerBuffer 484 imageBuffer 485 iimageBuffer 486 uimageBuffer 487 488 489 Add to section 4.1 "Basic Types" 490 491 Add to table "Floating Point Sampler Types (opaque)" on p. 20: 492 493 Type Meaning 494 ---------------------- --------------------------------------- 495 samplerBuffer a handle for accessing a buffer texture 496 imageBuffer 497 498 Add to table "Signed Integer Sampler Types (opaque)" on p. 21: 499 500 Type Meaning 501 ----------------------- ---------------------------------------- 502 isamplerBuffer a handle for accessing an integer buffer 503 iimageBuffer texture 504 505 Add to table "Unsigned Integer Sampler Types (opaque)" on p. 21: 506 507 Type Meaning 508 ----------------------- ------------------------------------------ 509 usamplerBuffer a handle for accessing an unsigned integer 510 uimageBuffer buffer texture 511 512 513 Modify section 4.7.4 "Default Precision Qualifiers" 514 515 Add the following types to the list of types which have no default 516 precision qualifiers at the top of p. 65: 517 518 samplerBuffer 519 isamplerBuffer 520 usamplerBuffer 521 imageBuffer 522 iimageBuffer 523 uimageBuffer 524 525 526 Modify section 8.9 "Texture Functions" 527 528 Add at the end of the paragraph starting "In all functions below" on p. 529 119: 530 531 ... performing the texture access operation. No <bias> or <lod> 532 parameters for multisample textures or texture buffers are supported, 533 because mipmaps are not allowed for these types of textures. 534 535 536 Add to the table of Texture Query Functions in section 8.9.1 on p. 120: 537 538 highp int textureSize(gsamplerBuffer sampler) 539 540 541 Add to the table of Texel Lookup Functions in section 8.9.2 on p. 121: 542 543 gvec4 texelFetch(gsamplerBuffer sampler, int P) 544 545 546 Modify section 8.14 "Image Functions": 547 548 Add to the description of the IMAGE_INFO placeholder in the fourth 549 paragraph of the section, on p. 132: 550 551 The "IMAGE_INFO" in the prototypes below is a placeholder ... 552 553 gimage2DArray image, ivec3 coord 554 gimageBuffer image, int P 555 556 557 Add to the table of image functions on p. 133: 558 559 highp int imageSize(readonly writeonly gimageBuffer image) 560 561 562 Change the introduction of section 8.16 "Shader Memory Control 563 Functions": 564 565 Shaders of all types may read and write the contents of textures and 566 buffer objects using image variables. While the order of reads ... 567 568 569Dependencies on OES_shader_image_atomic 570 571 When OES_shader_image_atomic is supported, all the imageAtomic* functions 572 are supported on image buffers. 573 574 575Issues 576 577 Note: These issues apply specifically to the definition of the 578 OES_texture_buffer specification, which is based on the OpenGL 579 extension ARB_texture_buffer_object as updated in OpenGL 4.x. Resolved 580 issues from ARB_texture_buffer_object have been removed (with the 581 exception of issue 6, which is copied from issue 12 of the ARB 582 extension), but remain largely applicable to this extension. 583 ARB_texture_buffer_object can be found in the OpenGL Registry. 584 585 (1) What functionality was removed from ARB_texture_buffer_object? 586 587 - Support for sized buffer formats R16, RG16, and RGBA16, and for 588 MapBuffer and GetBufferSubData is removed since they do not exist 589 in ES 3.0. 590 - Support for ALPHA and LUMINANCE buffer textures is removed since 591 they are legacy formats in ES 3.0, and there are no sized ALPHA or 592 LUMINANCE formats. 593 - GL 4.4 extended support for buffer textures to the 594 GetInternalformativ query <target>, but that command in ES 3.0 is 595 restricted to returning multisampling information, which is 596 irrelevant to buffer textures. 597 - Support for TEXTURE_BUFFER_FORMAT is removed. Use the 598 GetTexLevelParameter* TEXTURE_INTERNAL_FORMAT query instead. 599 600 (2) What functionality was changed and added relative to 601 ARB_texture_buffer_object? 602 603 - OES_texture_buffer more closely matches OpenGL 4.4 language, 604 rather than ARB_texture_buffer_object language. 605 * Support for querying buffer texture state with 606 GetTexLevelParameter* is added 607 * Support for sized R, RG, and RGB formats is added. Per issue (2) 608 of ARB_texture_buffer_object, some formats supported by ES 3.0 but 609 which may present hardware difficulties are not supported, 610 including R*8_SNORM and all RGB formats other than RGB32*. 611 - Interactions were added with OpenGL ES 3.1 and other OES extension 612 functionality, primarily shader memory access as well as texture 613 level parameter queries. 614 - incorporates the ability to bind a sub-range of a buffer from 615 ARB_texture_buffer_range. 616 617 (3) What should the rules on GLSL suffixing be? 618 619 RESOLVED: The new sampler and image types are reserved keywords in 620 ESSL 3.00 so they can be use without prefix/suffixes. 621 622 (4) Do we want the ARB_texture_buffer_range functionality present in GL 623 4.4? This adds useful functionality (backing the buffer texture with 624 a selected part of a buffer object) at low increase in complexity of 625 the spec. 626 627 RESOLVED: Yes, this functionality is included in this extension. 628 629 (5) How is the various buffer texture-related state queried? 630 631 There are three pieces of state that can be queried: 632 (a) the texture object bound to buffer texture binding point for 633 the active texture image unit (TEXTURE_BINDING_BUFFER_OES). 634 (b) the buffer object whose data store was used by that texture 635 object (TEXTURE_BUFFER_DATA_STORE_BINDING_OES). 636 (c) the buffer object bound to the TEXTURE_BUFFER_OES binding 637 point (TEXTURE_BUFFER_BINDING_OES). 638 639 The first and last are queried with GetIntegerv, but the second is 640 queried with GetTexLevelParameter. Note that for (a) and (b), the 641 texture queried is the one bound to TEXTURE_BUFFER_EXT on the active 642 texture image unit. 643 644 (6) Should the R16, RG16 and RGBA16 texture formats be supported? 645 646 RESOLVED. No. OpenGL ES 3.0 does not support these formats. They were 647 considered for late addition to OpenGL ES 3.1 in Bug 11366, but didn't 648 make the cut. In the absence of another extension to add them, they 649 are not supported here either. 650 651 (7) OpenGL ES 3.1 does not allow images to be created from mutable 652 textures (ie those created with TexImage). How does this affect 653 this extension? 654 655 RESOLVED. Buffer textures would technically be considered mutable 656 since they are not defined by a TexStorage command and it is possible 657 to redefine the buffer storage which backs them. However there is 658 currently no ES API for creating immutable buffers 659 (ARB_buffer_storage does this for GL) and thus we must allow mutable 660 buffers to back buffer textures. 661 662 (8) This extension is called OES_texture_buffer, but the desktop name 663 is {EXT,ARB}_texture_buffer_object. Is the name change intentional? 664 665 RESOLVED. Yes. We want to avoid extensions in ES and GL that have the 666 same name, but not the same functionality (except as a subset). 667 668 OES_texture_buffer includes the functionality of ARB_texture_buffer_object, 669 ARB_texture_buffer_range, and ARB_texture_buffer_rgb32, along with some 670 changes that were made with how those operate GL 4.4. It would have been 671 too messy and confusing to try to incorporate all these into the existing 672 EXT_texture_buffer_object spec from GL as interactions with ES. 673 674 675Revision History 676 677 Rev. Date Author Changes 678 ---- ---------- --------- ------------------------------------------------- 679 2 07/14/2014 dkoch Clarify that TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 680 is queried with GetTexLevelParameter not 681 GetIntegerv (Bug 12343). Fix types in unsigned 682 sampler types table (Bug 12356) 683 684 1 06/18/2014 dkoch Initial OES version based on EXT. 685 No functional changes. 686