1Name 2 3 ARB_sampler_objects 4 5Name Strings 6 7 GL_ARB_sampler_objects 8 9Contact 10 11 Graham Sellers, AMD (graham.sellers 'at' amd.com) 12 13Contributors 14 15 Graham Sellers, AMD 16 Jaakko Konttinen, AMD 17 Jeff Bolz, NVIDIA 18 Daniel Koch, TransGaming 19 Bruce Merry, ARM 20 21Notice 22 23 Copyright (c) 2010-2013 The Khronos Group Inc. Copyright terms at 24 http://www.khronos.org/registry/speccopyright.html 25 26Specification Update Policy 27 28 Khronos-approved extension specifications are updated in response to 29 issues and bugs prioritized by the Khronos OpenGL Working Group. For 30 extensions which have been promoted to a core Specification, fixes will 31 first appear in the latest version of that core Specification, and will 32 eventually be backported to the extension document. This policy is 33 described in more detail at 34 https://www.khronos.org/registry/OpenGL/docs/update_policy.php 35 36Status 37 38 Complete. Approved by the ARB at the 2010/01/22 F2F meeting. 39 Approved by the Khronos Board of Promoters on March 10, 2010. 40 41Version 42 43 Version 13, November 12, 2014 44 45Number 46 47 ARB Extension #81 48 49Dependencies 50 51 This extension is written against the OpenGL 3.2 (Compatibility 52 Profile) specification. 53 54 This extension interacts with EXT_texture_filter_anisotropic. 55 56 OpenGL 1.0 is required. 57 58Overview 59 60 In unextended OpenGL textures are considered to be sets of image 61 data (mip-chains, arrays, cube-map face sets, etc.) and sampling 62 state (sampling mode, mip-mapping state, coordinate wrapping and 63 clamping rules, etc.) combined into a single object. It is typical 64 for an application to use many textures with a limited set of 65 sampling states that are the same between them. In order to use 66 textures in this way, an application must generate and configure 67 many texture names, adding overhead both to applications and to 68 implementations. Furthermore, should an application wish to sample 69 from a texture in more than one way (with and without mip-mapping, 70 for example) it must either modify the state of the texture or 71 create two textures, each with a copy of the same image data. This 72 can introduce runtime and memory costs to the application. 73 74 This extension separates sampler state from texture image data. A 75 new object type is introduced, the sampler (representing generic 76 sampling parameters). The new sampler objects are represented by a 77 new named type encapsulating the sampling parameters of a 78 traditional texture object. Sampler objects may be bound to texture 79 units to supplant the bound texture's sampling state. A single 80 sampler may be bound to more than one texture unit simultaneously, 81 allowing different textures to be accessed with a single set of 82 shared sampling parameters. Also, by binding different sampler 83 objects to texture units to which the same texture has been bound, 84 the same texture image data may be sampled with different sampling 85 parameters. 86 87IP Status 88 89 No known IP claims. 90 91New Procedures and Functions 92 93 void GenSamplers(sizei count, uint *samplers); 94 void DeleteSamplers(sizei count, const uint * samplers); 95 boolean IsSampler(uint sampler); 96 void BindSampler(uint unit, uint sampler); 97 void SamplerParameteri(uint sampler, enum pname, int param); 98 void SamplerParameterf(uint sampler, enum pname, float param); 99 void SamplerParameteriv(uint sampler, enum pname, const int *params); 100 void SamplerParameterfv(uint sampler, enum pname, const float *params); 101 void SamplerParameterIiv(uint sampler, enum pname, const int *params); 102 void SamplerParameterIuiv(uint sampler, enum pname, const uint *params); 103 void GetSamplerParameteriv(uint sampler, enum pname, int *params); 104 void GetSamplerParameterfv(uint sampler, enum pname, float *params); 105 void GetSamplerParameterIiv(uint sampler, enum pname, int *params); 106 void GetSamplerParameterIuiv(uint sampler, enum pname, uint *params); 107 108New Tokens 109 110 Accepted by the <value> parameter of the GetBooleanv, GetIntegerv, 111 GetInteger64v, GetFloatv and GetDoublev functions: 112 113 SAMPLER_BINDING 0x8919 114 115Additions to Chapter 2 of the OpenGL 3.2 Specification (Compatibility Profile) (OpenGL Operation) 116 117 None. 118 119Additions to Chapter 3 of the OpenGL 3.2 Specification (Compatibility Profile) (Rasterization) 120 121 Additions to Section 3.8.12 Texture Completeness 122 123 Add subheading "Effects of Sampler Objects on Texture Completeness" 124 125 If a sampler object and a texture object are simultaneously bound to 126 the same texture unit, then the sampling state for that unit is 127 taken from the sampler object (see section 3.9.2, "Sampler 128 Objects"). This can have an effect on the effective completeness of 129 the texture. In particular, if the texture is not mipmap complete 130 and the sampler object specifies a MIN_FILTER requiring mipmaps, the 131 texture will be considered incomplete for the purposes of that 132 texture unit. However, if the sampler object does not require 133 mipmaps, the texture object will be considered complete. This means 134 that a texture can be considered both complete and incomplete 135 simultaneously if it is bound to two or more texture units along 136 with sampler objects with different states. 137 138 Additions to Section 3.9 Texturing 139 140 Modify the prologue to Section 3.9 as follows: 141 142 Renumber Section 3.9.14 "Texture Objects" to Section 3.9.1. renumber 143 subsequent sections 144 145 Replace Section 3.9.1 "Texture Objects" 146 147 3.9.1 Texture Objects 148 --------------------- 149 150 Textures in GL are represented by named objects. The name space for 151 texture objects is the unsigned integers, with zero reserved by the 152 GL to represent the default texture object. The default texture 153 object is bound to each of the TEXTURE_1D, TEXTURE_2D, TEXTURE_3D, 154 TEXTURE_1D_ARRAY, TEXTURE_2D_ARRAY, TEXTURE_RECTANGLE, 155 TEXTURE_BUFFER, TEXTURE_CUBE_MAP, TEXTURE_2D_MULTISAMPLE, and 156 TEXTURE_2D_MULTISAMPLE_ARRAY targets during context initialization. 157 158 A new texture object is created by binding an unused name to one of 159 these texture targets. The command 160 161 void GenTextures( sizei n, uint *textures ); 162 163 returns <n> previously unused texture names in <textures>. These 164 names are marked as used, for the purposes of GenTextures only, but 165 they acquire texture state and a dimensionality only when they are 166 first bound, just as if they were unused. The binding is effected by 167 calling 168 169 void BindTexture( enum target, uint texture ); 170 171 with <target> set to the desired texture target and <texture> set to 172 the unused name. The resulting texture object is a new state vector, 173 comprising all the state and with the same initial values listed in 174 section 3.9.13. The new texture object bound to <target> is, and 175 remains a texture of the dimensionality and type specified by 176 <target> until it is deleted. 177 178 BindTexture may also be used to bind an existing texture object to 179 any of these targets. The error INVALID_OPERATION is generated if an 180 attempt is made to bind a texture object of different dimensionality 181 than the specified <target>. If the bind is successful no change is 182 made to the state of the bound texture object, and any previous 183 binding to <target> is broken. 184 185** This error applies only to 3.2 core profile / 3.1 w/o ARB_compatibility / 186** 3.0 deprecated contexts. 187 BindTexture fails and an INVALID_OPERATION error is generated if 188 <texture> is not zero or a name returned from a previous call to 189 GenTextures, or if such a name has since been deleted. While a 190 texture object is bound, GL operations on the target to which it is 191 bound affect the bound object, and queries of the target to which it 192 is bound return state from the bound object. If texture mapping of 193 the dimensionality of the target to which a texture object is bound 194 is enabled, the state of the bound texture object directs the 195 texturing operation. 196 197 Texture objects are deleted by calling 198 199 void DeleteTextures( sizei n, uint *textures ); 200 201 <textures> contains <n> names of texture objects to be deleted. 202 After a texture object is deleted, it has no contents or 203 dimensionality, and its name is again unused. If a texture that is 204 currently bound to any of the target bindings of BindTexture is 205 deleted, it is as though BindTexture had been executed with the same 206 target and texture zero. Additionally, special care must be taken 207 when deleting a texture if any of the images of the texture are 208 attached to a framebuffer object. See section 4.4.2 for details. 209 210 Unused names in <textures> are silently ignored, as is the name zero. 211 212 The texture object name space, including the initial one-, two-, and 213 three- dimensional, one- and two-dimensional array, rectangular, 214 buffer, cube map, two-dimensional multisample, and two-dimensional 215 multisample array texture objects, is shared among all texture 216 units. A texture object may be bound to more than one texture unit 217 simultaneously. After a texture object is bound, any GL operations 218 on that target object affect any other texture units to which the 219 same texture object is bound. 220 221 Texture binding is affected by the setting of the state 222 ACTIVE_TEXTURE. If a texture object is deleted, it as if all texture 223 units which are bound to that texture object are rebound to texture 224 object zero. 225 226 Insert new Section 3.9.2 "Sampler Objects", renumber subsequent 227 sections. 228 229 3.9.2 Sampler Objects 230 --------------------- 231 232 The state necessary for texturing can be divided into two categories 233 as described in Section 3.9.13. An OpenGL texture object represents 234 both sets. The first set represents dimensionality and other image 235 parameters, and the second set represents sampling state. 236 Additionally, a sampler object may be created to encapsulate only 237 the second set, or the sampling state, of a texture object. 238 239 A new sampler object is created by binding an unused name to a 240 texture unit. The command 241 242 void GenSamplers( sizei count, uint *samplers ); 243 244 returns <count> previously unused sampler object names in 245 <samplers>. The name zero is reserved by the GL to represent no 246 sampler being bound to a sampler unit. The names are marked as used, 247 for the purposes of GenSamplers only, but they acquire state only 248 when they are first used as a parameter to BindSampler, 249 SamplerParameter*, GetSamplerParameter*, or IsSampler. When a 250 sampler object is first used in one of these functions, the 251 resulting sampler object is initialized with a new state vector, 252 comprising all the state and with the same initial values listed in 253 table 6.23. 254 255 When a sampler object is bound to a texture unit, its state 256 supersedes that of the texture object bound to that texture unit. If 257 the sampler name zero is bound to a texture unit, the currently 258 bound texture's sampler state becomes active. A single sampler 259 object may be bound to multiple texture units simultaneously. 260 261 A sampler binding is effected by calling 262 263 void BindSampler( uint unit, uint sampler ); 264 265 with <unit> set to the texture unit to which to bind the sampler and 266 <sampler> set to the name of a sampler object returned from a 267 previous call to GenSampler. 268 269 <unit> must be between zero and the value of 270 MAX_TEXTURE_IMAGE_UNITS-1. <sampler> is the name of a sampler object 271 that has previously been reserved by a call to GenSamplers. 272 273 If the bind is successful no change is made to the state of the 274 bound sampler object, and any previous binding to <unit> is broken. 275 276 BindSampler fails and an INVALID_OPERATION error is generated if 277 <sampler> is not zero or a name returned from a previous call to 278 GenSamplers, or if such a name has since been deleted with 279 DeleteSamplers. An INVALID_VALUE error is generated if <unit> is 280 greater than or equal to the value of 281 MAX_COMBINED_TEXTURE_IMAGE_UNITS. 282 283 If state is present in a sampler object bound to a texture unit that 284 would have been rejected by a call to TexParameter for the texture 285 bound to that unit, the behavior of the implementation is as if the 286 texture were incomplete. For example, if TEXTURE_WRAP_S, 287 TEXTURE_WRAP_T or TEXTURE_WRAP_R is set to REPEAT or MIRRORED_REPEAT 288 on the sampler object bound to a texture unit and the texture bound 289 to that unit is a TEXTURE_RECTANGLE, the texture will be considered 290 incomplete. 291 292 The currently bound sampler may be queried by calling GetIntegerv 293 with <pname> set to SAMPLER_BINDING. When a sampler object is 294 unbound from the texture unit (by binding another sampler object, or 295 the sampler object named zero, to that texture unit) the modified 296 state is again replaced with the sampler state associated with the 297 texture object bound to that texture unit. 298 299 The parameters represented by a sampler object are a subset of those 300 described in Section 3.9.6 "Texture Parameters". Each parameter of a 301 sampler object is set by calling 302 303 void SamplerParameter{if}{v}( uint sampler, enum pname, T param ); 304 void SamplerParameterI{u ui}v( uint sampler, enum pname, T *params ); 305 306 <sampler> is the name of a sampler object previously reserved by a 307 call to GenSamplers. <pname> is the name of a parameter to modify 308 and <param> is the new value of that parameter. An INVALID_OPERATION 309 error is generated if <sampler> is not the name of a sampler object 310 previously returned from a call to GenSamplers. The values accepted 311 in the <pname> parameter are TEXTURE_WRAP_S, TEXTURE_WRAP_T, 312 TEXTURE_WRAP_R, TEXTURE_MIN_FILTER, TEXTURE_MAG_FILTER, 313 TEXTURE_BORDER_COLOR, TEXTURE_MIN_LOD, TEXTURE_MAX_LOD, 314 TEXTURE_LOD_BIAS, TEXTURE_COMPARE_MODE, TEXTURE_COMPARE_FUNC and 315 TEXTURE_MAX_ANISOTROPY_EXT. Texture state listed in table 6.22 but 316 not listed here and in the sampler state in table 6.23 is not part 317 of the sampler state, and remains in the texture object. 318 319 If the values for TEXTURE_BORDER_COLOR are specified with a call to 320 SamplerParameterIiv or SamplerParameterIuiv, the values are 321 unmodified and stored with an internal data type of integer. If 322 specified with SamplerParameteriv, they are converted to 323 floating-point using equation 2.2. Otherwise, the values are 324 unmodified and stored as floating-point. 325 326 An INVALID_ENUM error is generated if <pname> is not the name of a 327 parameter accepted by SamplerParameter*. If the value of <param> is 328 not an acceptable value for the parameter specified in <pname>, an 329 error is generated as specified in the description of TexParameter*. 330 331 Modifying a parameter of a sampler object affects all texture units 332 to which that sampler object is bound. Calling TexParameter has no 333 effect on the sampler object bound to the active texture unit. It 334 will modify the parameters of the texture object bound to that unit. 335 336 Sampler objects are deleted by calling 337 338 void DeleteSamplers( sizei count, const uint *samplers ); 339 340 <samplers> contains <count> names of sampler objects to be deleted. 341 After a sampler object is deleted, its name is again unused. If a 342 sampler object that is currently bound to a sampler unit is deleted, 343 it is as though BindSampler is called with <unit> set to the unit 344 the sampler is bound to and <sampler> zero. Unused names in 345 <samplers> are silently ignored, as is the reserved name zero. 346 347Additions to Chapter 4 of the OpenGL 3.2 Specification (Compatibility Profile) (Per-Fragment Operations and the Framebuffer) 348 349 None. 350 351Additions to Chapter 5 of the OpenGL 3.2 Specification (Compatibility Profile) (Special Functions) 352 353 Add a new category of commands not usable in display lists 354 to section 5.4.1: 355 356 "Sampler objects: GenSamplers and DeleteSamplers." 357 358Additions to Chapter 6 of the OpenGL 3.2 Specification (Compatibility Profile) (State and State Requests) 359 360 Insert new section 6.1.5 "Sampler Queries" following existing 361 section 6.1.4 and renumber following sections: 362 363 6.1.5 Sampler Queries 364 365 The command 366 367 boolean IsSampler( uint sampler ); 368 369 may be called to determine whether <sampler> is the name of a 370 sampler object IsSampler will return TRUE if <sampler> is the name 371 of a sampler object previously returned from a call to GenSamplers 372 and FALSE otherwise. Zero is not the name of a sampler object. The 373 current values of the parameters of a sampler object may be queried 374 by calling 375 376 void GetSamplerParameter{if}v( uint sampler, enum pname, T *params ); 377 void GetSamplerParameterI{i ui}v( uint sampler, enum pname, T *params ); 378 379 <sampler> is the name of the sampler object from which to retrieve 380 parameters. <pname> is the name of the parameter whose value to 381 retrieve and <params> is the address of an array into which the 382 current value of the desired parameter will be placed. 383 GetSamplerParameter* accepts the same values for <pname> as 384 SamplerParameter*. An INVALID_OPERATION error is generated if 385 <sampler> is not the name of a sampler object previously returned 386 from a call to GenSamplers. An INVALID_ENUM error is generated if 387 <pname> is not the name of a parameter accepted by 388 GetSamplerParameter*. 389 390 Querying value TEXTURE_BORDER_COLOR with GetSamplerParameterIiv or 391 GetSamplerParameterIuiv returns the border color values as signed 392 integers or unsigned integers, respectively; otherwise the values 393 are returned as described in section 6.1.2. If the border color is 394 queried with a type that does not match the original type with which 395 it was specified, the result is undefined. 396 397 398 In section 6.1.19, append to the paragraph starting "When PushAttrib 399 is called with TEXTURE_BIT set...": 400 401 "... are restored to their pushed values. The bindings and state for 402 sampler objects are not pushed or popped." 403 404Additions to Appendix A of the OpenGL 3.2 Specification (Compatibility Profile) (Invariance) 405 406 None. 407 408Interactions with EXT_texture_filter_anisotropic 409 410 If EXT_texture_filter_anisotropic is not supported, remove all 411 references to TEXTURE_MAX_ANISOTROPY_EXT. 412 413Additions to the AGL/GLX/WGL Specifications 414 415 None. 416 417GLX Protocol 418 419 None. 420 421Errors 422 423 INVALID_OPERATION is generated by BindSampler if <sampler> is not 424 zero or a name returned from a previous call to GenSamplers. 425 426 INVALID_VALUE is generated by BindSampler if <unit> is greater than 427 MAX_TEXTURE_IMAGE_UNITS-1. 428 429 INVALID_OPERATION is generated by SamplerParameter* and 430 GetSamplerParameter* if <sampler> is not a name returned from a 431 previous call to GenSamplers. 432 433New State 434 435 Append to Table 6.20, "Textures (state per texture unit and binding point)" 436 437 +-----------------------+-----------+-------------------+-----------------+-------------------------+--------+------------+ 438 | Get Value | Type | Get Command | Initial Value | Description | Sec | Attribute | 439 +-----------------------+-----------+-------------------+-----------------+-------------------------+--------+------------+ 440 | SAMPLER_BINDING | 48* x Z+ | GetIntegerv | 0 | Sampler object bound | 3.9.2 | - | 441 | | | | | to active texture unit | | | 442 +-----------------------+-----------+-------------------+-----------------+-------------------------+--------+------------+ 443 444 Add new Table 6.23, "Textures (state per sampler object)", renumber subsequent tables. 445 446 +---------------------------+-----------+----------------------+------------------------+------------------------------+--------+------------+ 447 | Get Value | Type | Get Command | Initial Value | Description | Sec | Attribute | 448 +---------------------------+-----------+----------------------+------------------------+------------------------------+--------+------------+ 449 | TEXTURE_BORDER_COLOR | n x C | GetSamplerParameter | 0,0,0,0 | Border color | 3.9 | - | 450 | TEXTURE_MIN_FILTER | n x Z6 | GetSamplerParameter | NEAREST_MIPMAP_LINEAR | Minification function | 3.9.9 | - | 451 | TEXTURE_MAG_FILTER | n x Z2 | GetSamplerParameter | LINEAR | Magnification function | 3.9.10 | - | 452 | TEXTURE_WRAP_S | n x Z5 | GetSamplerParameter | REPEAT | Texcoord s wrap mode | 3.9.9 | - | 453 | TEXTURE_WRAP_T | n x Z5 | GetSamplerParameter | REPEAT | Texcoord t wrap mode | 3.9.9 | - | 454 | TEXTURE_WRAP_R | n x Z5 | GetSamplerParameter | REPEAT | Texcoord r wrap mode | 3.9.9 | - | 455 | TEXTURE_MIN_LOD | n x R | GetSamplerParameter | -1000 | Minimum level of detail | 3.9 | - | 456 | TEXTURE_MAX_LOD | n x R | GetSamplerParameter | 1000 | Maximum level of detail | 3.9 | - | 457 | TEXTURE_LOD_BIAS | n x R | GetSamplerParameter | 0.0 | Texture level of detail | 3.9.9 | - | 458 | | | | | bias (biastexobj) | | | 459 | TEXTURE_COMPARE_MODE | n x Z2 | GetSamplerParameter | NONE | Comparison mode | 3.9.16 | - | 460 | TEXTURE_COMPARE_FUNC | n x Z8 | GetSamplerParameter | LEQUAL | Comparison function | 3.9.16 | - | 461 | TEXTURE_MAX_ANISOTROPY_EXT| n x R | GetSamplerParameter | 1.0 | Maximum degree of anisotropy | 3.9 | - | 462 +---------------------------+-----------+----------------------+------------------------+------------------------------+--------+------------+ 463 464New Implementation Dependent State 465 466 None. 467 468Issues 469 470 1) Should BindSampler take a <target> parameter? 471 472 DISCUSSION: Currently it does not. Binding a sampler to a texture 473 unit binds it to all targets. Binding a texture to a target of a 474 texture unit continues to determine the target precedence. 475 476 2) What is the set of state associated with a sampler object? 477 Specifically, should TEXTURE_BASE_LEVEL and TEXTURE_MAX_LEVEL be 478 part of the sampler or the texture? 479 480 DISCUSSION: TEXTURE_BASE_LEVEL and TEXTURE_MAX_LEVEL are presently 481 part of the image state (texture) and are thus not included in the 482 sampler object. TEXTURE_WRAP_S, TEXTURE_WRAP_T, TEXTURE_WRAP_R, 483 TEXTURE_MIN_FILTER, TEXTURE_MAG_FILTER, TEXTURE_BORDER_COLOR, 484 TEXTURE_MIN_LOD, TEXTURE_MAX_LOD, TEXTURE_LOD_BIAS, 485 TEXTURE_COMPARE_MODE, TEXTURE_COMPARE_FUNC are the states included 486 in the sampler object. 487 488 3) How would one use the same sampler state to access multiple 489 textures? 490 491 DISCUSSION: Generate a sampler object, set its state. Then, bind the 492 same sampler object to multiple texture units (perhaps with 493 different textures bound to them) and use those units as usual. 494 495 4) How would one access the same texture with different samplers? 496 497 DISCUSSION: Generate a sampler object for each intended set of 498 sampling parameters and bind them to different texture units. Bind 499 the same texture to each of those units. That same texture will be 500 sampled according to the parameters contained in the sampler object 501 bound to the respective unit. 502 503 5) Does it matter what order samplers and textures are bound to 504 texture units? 505 506 No. As long as a sampler is bound to a texture unit, it acts as the 507 source of the sampler state for that unit. Textures may be switched 508 in and out without affecting the sampler state. This includes the 509 default texture object. 510 511 6) If a sampler object is bound to multiple texture units and its 512 state is modified, is that state visible to all of those units? 513 514 Yes. 515 516 7) Should sampler objects be made visible to the shading language. 517 518 This is left for a future extension. Separating samplers and texture 519 images in the shader allows for a run-time combinatorial explosion 520 of sampler- texture pairs that would be difficult to count. It is 521 also very clumsy to specify in a way that interacts cleanly with 522 prior versions of OpenGL. This may become more feasible to apply 523 against a future version of OpenGL, but this extension is applicable 524 to any version of OpenGL. 525 526 8) Can sampler objects be shared between contexts? 527 528 Yes. The semantics of sharing a sampler object between contexts is 529 the same as that of sharing texture objects. 530 531 9) What happens when a sampler object bound to a texture unit has a 532 parameter that is incompatible with the texture that is bound to 533 that unit? 534 535 The behavior is as if the texture is incomplete. 536 537 10) When are sampler objects created? When do they start to exist? 538 539 Sampler objects are created when they are first used by any function 540 taking the name of a sampler object as a parameter. Their names must 541 be reserved by a call to GenSamplers. For all intents and purposes, 542 it is as if they start existing when GenSamplers creates their 543 names. 544 545Revision History 546 547 Rev. Date Author Changes 548 ---- ---------- --------- ----------------------------------------- 549 13 11/12/2014 Jon Leech Fix spelling of TEXTURE_MAX_ANISOTROPY 550 (public Bug 1263). 551 12 07/22/2011 Jon Leech Fix valid <unit> values to be based 552 on MAX_COMBINED_TEXTURE_IMAGE_UNITS 553 instead of MAX_TEXTURE_IMAGE_UNITS (bug 554 6406). 555 11 07/07/2010 Jon Leech Do not allow sampler bindings and sampler 556 object state to be pushed and popped, by 557 modifying all new state table entries to 558 have no attribute group and adding a 559 clarifying statement in section 6.1.20. 560 Do not allow GenSamplers and 561 DeleteSamplers in display lists (bug 562 6056). 563 10 03/29/2010 pbrown Further fixes in the listed prototypes; 564 use separate lines for external parsing. 565 9 03/27/2010 pbrown Fix an incorrect prototype for BindSampler 566 in the new functions section (bug 6146). 567 8 03/22/2010 Jon Leech Change error for invalid <sampler> names 568 passed to *SamplerParameter* from 569 INVALID_VALUE to INVALID_OPERATION for 570 consistency (bug 6026). Expand Errors 571 section. Reformat to 80 columns. 572 7 02/10/2010 Jon Leech Add const to SamplerParameter*v 'params'. 573 6 01/26/2010 pbrown Assign enum for SAMPLER_BINDING. 574 5 01/05/2010 gsellers Add SamplerParameterI*, GetSamplerParameterI* 575 (bug 5806). 576 Fix ambiguity about when sampler objects 577 are created. Samplers names are reserved 578 by GenSamplers but actually created 579 (default state initialized) on first 580 use. There is no bind-to-create for 581 sampler objects. (bug 5813). 582 Add language about effect of sampler 583 objects on effective texture 584 completeness (bug 5838). Specify that 585 illegal sampler states for particular 586 texture types result in incomplete 587 textures, rather than undefined 588 behavior. 589 4 12/11/2009 Jon Leech Reorganization and consistency edits 590 resulting from 3.3 spec integration. 591 Remove ARB suffixes. 592 3 11/19/2009 gsellers Feedback from bmerry. 593 2 11/11/2009 gsellers Incorporate feedback. 594 1 11/09/2009 gsellers Initial version based on draft 595 EXT_separate_sampler_objects. 596