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