| Name | |
| EXT_texture_object | |
| Name Strings | |
| GL_EXT_texture_object | |
| Version | |
| $Date: 1995/10/03 05:39:56 $ $Revision: 1.27 $ | |
| Number | |
| 20 | |
| Dependencies | |
| EXT_texture3D affects the definition of this extension | |
| Overview | |
| This extension introduces named texture objects. The only way to name | |
| a texture in GL 1.0 is by defining it as a single display list. Because | |
| display lists cannot be edited, these objects are static. Yet it is | |
| important to be able to change the images and parameters of a texture. | |
| Issues | |
| * Should the dimensions of a texture object be static once they are | |
| changed from zero? This might simplify the management of texture | |
| memory. What about other properties of a texture object? | |
| No. | |
| Reasoning | |
| * Previous proposals overloaded the <target> parameter of many Tex | |
| commands with texture object names, as well as the original | |
| enumerated values. This proposal eliminated such overloading, | |
| choosing instead to require an application to bind a texture object, | |
| and then operate on it through the binding reference. If this | |
| constraint ultimately proves to be unacceptable, we can always | |
| extend the extension with additional binding points for editing and | |
| querying only, but if we expect to do this, we might choose to bite | |
| the bullet and overload the <target> parameters now. | |
| * Commands to directly set the priority of a texture object and to | |
| query the resident status of a texture object are included. I feel | |
| that binding a texture object would be an unacceptable burden for | |
| these management operations. These commands also allow queries and | |
| operations on lists of texture objects, which should improve | |
| efficiency. | |
| * GenTexturesEXT does not return a success/failure boolean because | |
| it should never fail in practice. | |
| New Procedures and Functions | |
| void GenTexturesEXT(sizei n, | |
| uint* textures); | |
| void DeleteTexturesEXT(sizei n, | |
| const uint* textures); | |
| void BindTextureEXT(enum target, | |
| uint texture); | |
| void PrioritizeTexturesEXT(sizei n, | |
| const uint* textures, | |
| const clampf* priorities); | |
| boolean AreTexturesResidentEXT(sizei n, | |
| const uint* textures, | |
| boolean* residences); | |
| boolean IsTextureEXT(uint texture); | |
| New Tokens | |
| Accepted by the <pname> parameters of TexParameteri, TexParameterf, | |
| TexParameteriv, TexParameterfv, GetTexParameteriv, and GetTexParameterfv: | |
| TEXTURE_PRIORITY_EXT 0x8066 | |
| Accepted by the <pname> parameters of GetTexParameteriv and | |
| GetTexParameterfv: | |
| TEXTURE_RESIDENT_EXT 0x8067 | |
| Accepted by the <pname> parameters of GetBooleanv, GetIntegerv, | |
| GetFloatv, and GetDoublev: | |
| TEXTURE_1D_BINDING_EXT 0x8068 | |
| TEXTURE_2D_BINDING_EXT 0x8069 | |
| TEXTURE_3D_BINDING_EXT 0x806A | |
| Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation) | |
| None | |
| Additions to Chapter 3 of the 1.0 Specification (Rasterization) | |
| Add the following discussion to section 3.8 (Texturing). In addition | |
| to the default textures TEXTURE_1D, TEXTURE_2D, and TEXTURE_3D_EXT, it | |
| is possible to create named 1, 2, and 3-dimensional texture objects. | |
| The name space for texture objects is the unsigned integers, with zero | |
| reserved by the GL. | |
| A texture object is created by binding an unused name to TEXTURE_1D, | |
| TEXTURE_2D, or TEXTURE_3D_EXT. This binding is accomplished by calling | |
| BindTextureEXT with <target> set to TEXTURE_1D, TEXTURE_2D, or | |
| TEXTURE_3D_EXT, and <texture> set to the name of the new texture object. | |
| When a texture object is bound to a target, the previous binding for | |
| that target is automatically broken. | |
| When a texture object is first bound it takes the dimensionality of its | |
| target. Thus, a texture object first bound to TEXTURE_1D is | |
| 1-dimensional; a texture object first bound to TEXTURE_2D is | |
| 2-dimensional, and a texture object first bound to TEXTURE_3D_EXT is | |
| 3-dimensional. The state of a 1-dimensional texture object | |
| immediately after it is first bound is equivalent to the state of the | |
| default TEXTURE_1D at GL initialization. Likewise, the state of a | |
| 2-dimensional or 3-dimensional texture object immediately after it is | |
| first bound is equivalent to the state of the default TEXTURE_2D or | |
| TEXTURE_3D_EXT at GL initialization. Subsequent bindings of a texture | |
| object have no effect on its state. The error INVALID_OPERATION is | |
| generated if an attempt is made to bind a texture object to a target of | |
| different dimensionality. | |
| While a texture object is bound, GL operations on the target to which it | |
| is bound affect the bound texture object, and queries of the target to | |
| which it is bound return state from the bound texture object. If | |
| texture mapping of the dimensionality of the target to which a texture | |
| object is bound is active, the bound texture object is used. | |
| By default when an OpenGL context is created, TEXTURE_1D, TEXTURE_2D, | |
| and TEXTURE_3D_EXT have 1, 2, and 3-dimensional textures associated | |
| with them. In order that access to these default textures not be | |
| lost, this extension treats them as though their names were all zero. | |
| Thus the default 1-dimensional texture is operated on, queried, and | |
| applied as TEXTURE_1D while zero is bound to TEXTURE_1D. Likewise, | |
| the default 2-dimensional texture is operated on, queried, and applied | |
| as TEXTURE_2D while zero is bound to TEXTURE_2D, and the default | |
| 3-dimensional texture is operated on, queried, and applied as | |
| TEXTURE_3D_EXT while zero is bound to TEXTURE_3D_EXT. | |
| Texture objects are deleted by calling DeleteTexturesEXT with <textures> | |
| pointing to a list of <n> names of texture object to be deleted. After | |
| a texture object is deleted, it has no contents or dimensionality, and | |
| its name is freed. If a texture object that is currently bound is | |
| deleted, the binding reverts to zero. DeleteTexturesEXT ignores names | |
| that do not correspond to textures objects, including zero. | |
| GenTexturesEXT returns <n> texture object names in <textures>. These | |
| names are chosen in an unspecified manner, the only condition being that | |
| only names that were not in use immediately prior to the call to | |
| GenTexturesEXT are considered. Names returned by GenTexturesEXT are | |
| marked as used (so that they are not returned by subsequent calls to | |
| GenTexturesEXT), but they are associated with a texture object only | |
| after they are first bound (just as if the name were unused). | |
| An implementation may choose to establish a working set of texture | |
| objects on which binding operations are performed with higher | |
| performance. A texture object that is currently being treated as a | |
| part of the working set is said to be resident. AreTexturesResidentEXT | |
| returns TRUE if all of the <n> texture objects named in <textures> are | |
| resident, FALSE otherwise. If FALSE is returned, the residence of each | |
| texture object is returned in <residences>. Otherwise the contents of | |
| the <residences> array are not changed. If any of the names in | |
| <textures> is not the name of a texture object, FALSE is returned, the | |
| error INVALID_VALUE is generated, and the contents of <residences> are | |
| indeterminate. The resident status of a single bound texture object | |
| can also be queried by calling GetTexParameteriv or GetTexParameterfv | |
| with <target> set to the target to which the texture object is bound, | |
| and <pname> set to TEXTURE_RESIDENT_EXT. This is the only way that the | |
| resident status of a default texture can be queried. | |
| Applications guide the OpenGL implementation in determining which | |
| texture objects should be resident by specifying a priority for each | |
| texture object. PrioritizeTexturesEXT sets the priorities of the <n> | |
| texture objects in <textures> to the values in <priorities>. Each | |
| priority value is clamped to the range [0.0, 1.0] before it is | |
| assigned. Zero indicates the lowest priority, and hence the least | |
| likelihood of being resident. One indicates the highest priority, and | |
| hence the greatest likelihood of being resident. The priority of a | |
| single bound texture object can also be changed by calling | |
| TexParameteri, TexParameterf, TexParameteriv, or TexParameterfv with | |
| <target> set to the target to which the texture object is bound, <pname> | |
| set to TEXTURE_PRIORITY_EXT, and <param> or <params> specifying the new | |
| priority value (which is clamped to [0.0,1.0] before being assigned). | |
| This is the only way that the priority of a default texture can be | |
| specified. (PrioritizeTexturesEXT silently ignores attempts to | |
| prioritize nontextures, and texture zero.) | |
| Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations | |
| and the Frame Buffer) | |
| None | |
| Additions to Chapter 5 of the 1.0 Specification (Special Functions) | |
| BindTextureEXT and PrioritizeTexturesEXT are included in display lists. | |
| All other commands defined by this extension are not included in display | |
| lists. | |
| Additions to Chapter 6 of the 1.0 Specification (State and State Requests) | |
| IsTextureEXT returns TRUE if <texture> is the name of a valid texture | |
| object. If <texture> is zero, or is a non-zero value that is not the | |
| name of a texture object, or if an error condition occurs, IsTextureEXT | |
| returns FALSE. | |
| Because the query values of TEXTURE_1D, TEXTURE_2D, and TEXTURE_3D_EXT | |
| are already defined as booleans indicating whether these textures are | |
| enabled or disabled, another mechanism is required to query the | |
| binding associated with each of these texture targets. The name | |
| of the texture object currently bound to TEXTURE_1D is returned in | |
| <params> when GetIntegerv is called with <pname> set to | |
| TEXTURE_1D_BINDING_EXT. If no texture object is currently bound to | |
| TEXTURE_1D, zero is returned. Likewise, the name of the texture object | |
| bound to TEXTURE_2D or TEXTURE_3D_EXT is returned in <params> when | |
| GetIntegerv is called with <pname> set to TEXTURE_2D_BINDING_EXT or | |
| TEXTURE_3D_BINDING_EXT. If no texture object is currently bound to | |
| TEXTURE_2D or to TEXTURE_3D_EXT, zero is returned. | |
| A texture object comprises the image arrays, priority, border color, | |
| filter modes, and wrap modes that are associated with that object. More | |
| explicitly, the state list | |
| TEXTURE, | |
| TEXTURE_PRIORITY_EXT | |
| TEXTURE_RED_SIZE, | |
| TEXTURE_GREEN_SIZE, | |
| TEXTURE_BLUE_SIZE, | |
| TEXTURE_ALPHA_SIZE, | |
| TEXTURE_LUMINANCE_SIZE, | |
| TEXTURE_INTENSITY_SIZE, | |
| TEXTURE_WIDTH, | |
| TEXTURE_HEIGHT, | |
| TEXTURE_DEPTH_EXT, | |
| TEXTURE_BORDER, | |
| TEXTURE_COMPONENTS, | |
| TEXTURE_BORDER_COLOR, | |
| TEXTURE_MIN_FILTER, | |
| TEXTURE_MAG_FILTER, | |
| TEXTURE_WRAP_S, | |
| TEXTURE_WRAP_T, | |
| TEXTURE_WRAP_R_EXT | |
| composes a single texture object. | |
| When PushAttrib is called with TEXTURE_BIT enabled, the priorities, | |
| border colors, filter modes, and wrap modes of the currently bound | |
| texture objects are pushed, as well as the current texture bindings and | |
| enables. When an attribute set that includes texture information is | |
| popped, the bindings and enables are first restored to their pushed | |
| values, then the bound texture objects have their priorities, border | |
| colors, filter modes, and wrap modes restored to their pushed values. | |
| Additions to the GLX Specification | |
| Texture objects are shared between GLX rendering contexts if and only | |
| if the rendering contexts share display lists. No change is made to | |
| the GLX API. | |
| GLX Protocol | |
| Six new GL commands are added. | |
| The following rendering command is sent to the server as part of a | |
| glXRender request: | |
| BindTextureEXT | |
| 2 12 rendering command length | |
| 2 4117 rendering command opcode | |
| 4 ENUM target | |
| 4 CARD32 texture | |
| The following rendering command can be sent to the server as part of a | |
| glXRender request or as part of a glXRenderLarge request: | |
| PrioritizeTexturesEXT | |
| 2 8+(n*8) rendering command length | |
| 2 4118 rendering command opcode | |
| 4 INT32 n | |
| n*4 LISTofCARD32 textures | |
| n*4 LISTofFLOAT32 priorities | |
| If the command is encoded in a glXRenderLarge request, the | |
| command opcode and command length fields above are expanded to | |
| 4 bytes each: | |
| 4 12+(n*8) rendering command length | |
| 4 4118 rendering command opcode | |
| The remaining commands are non-rendering commands. These commands are | |
| sent separately (i.e., not as part of a glXRender or glXRenderLarge | |
| request), using either the glXVendorPrivate request or the | |
| glXVendorPrivateWithReply request: | |
| DeleteTexturesEXT | |
| 1 CARD8 opcode (X assigned) | |
| 1 16 GLX opcode (glXVendorPrivate) | |
| 2 4+n request length | |
| 4 12 vendor specific opcode | |
| 4 GLX_CONTEXT_TAG context tag | |
| 4 INT32 n | |
| n*4 CARD32 textures | |
| GenTexturesEXT | |
| 1 CARD8 opcode (X assigned) | |
| 1 17 GLX opcode (glXVendorPrivateWithReply) | |
| 2 4 request length | |
| 4 13 vendor specific opcode | |
| 4 GLX_CONTEXT_TAG context tag | |
| 4 INT32 n | |
| => | |
| 1 1 reply | |
| 1 unused | |
| 2 CARD16 sequence number | |
| 4 n reply length | |
| 24 unused | |
| 4*n LISTofCARD32 textures | |
| AreTexturesResidentEXT | |
| 1 CARD8 opcode (X assigned) | |
| 1 17 GLX opcode (glXVendorPrivateWithReply) | |
| 2 4+n request length | |
| 4 11 vendor specific opcode | |
| 4 GLX_CONTEXT_TAG context tag | |
| 4 INT32 n | |
| 4*n LISTofCARD32 textures | |
| => | |
| 1 1 reply | |
| 1 unused | |
| 2 CARD16 sequence number | |
| 4 (n+p)/4 reply length | |
| 4 BOOL32 return_value | |
| 20 unused | |
| n LISTofBOOL residences | |
| p unused, p=pad(n) | |
| IsTextureEXT | |
| 1 CARD8 opcode (X assigned) | |
| 1 17 GLX opcode (glXVendorPrivateWithReply) | |
| 2 4 request length | |
| 4 14 vendor specific opcode | |
| 4 GLX_CONTEXT_TAG context tag | |
| 4 CARD32 textures | |
| => | |
| 1 1 reply | |
| 1 unused | |
| 2 CARD16 sequence number | |
| 4 0 reply length | |
| 4 BOOL32 return_value | |
| 20 unused | |
| Dependencies on EXT_texture3D | |
| If EXT_texture3D is not supported, then all references to 3D textures | |
| in this specification are invalid. | |
| Errors | |
| INVALID_VALUE is generated if GenTexturesEXT parameter <n> is negative. | |
| INVALID_VALUE is generated if DeleteTexturesEXT parameter <n> is | |
| negative. | |
| INVALID_ENUM is generated if BindTextureEXT parameter <target> is not | |
| TEXTURE_1D, TEXTURE_2D, or TEXTURE_3D_EXT. | |
| INVALID_OPERATION is generated if BindTextureEXT parameter <target> is | |
| TEXTURE_1D, and parameter <texture> is the name of a 2-dimensional or | |
| 3-dimensional texture object. | |
| INVALID_OPERATION is generated if BindTextureEXT parameter <target> is | |
| TEXTURE_2D, and parameter <texture> is the name of a 1-dimensional or | |
| 3-dimensional texture object. | |
| INVALID_OPERATION is generated if BindTextureEXT parameter <target> is | |
| TEXTURE_3D_EXT, and parameter <texture> is the name of a 1-dimensional | |
| or 2-dimensional texture object. | |
| INVALID_VALUE is generated if PrioritizeTexturesEXT parameter <n> | |
| negative. | |
| INVALID_VALUE is generated if AreTexturesResidentEXT parameter <n> | |
| is negative. | |
| INVALID_VALUE is generated by AreTexturesResidentEXT if any of the | |
| names in <textures> is zero, or is not the name of a texture. | |
| INVALID_OPERATION is generated if any of the commands defined in this | |
| extension is executed between the execution of Begin and the | |
| corresponding execution of End. | |
| New State | |
| Get Value Get Command Type Initial Value Attribute | |
| --------- ----------- ---- ------------- --------- | |
| TEXTURE_1D IsEnabled B FALSE texture/enable | |
| TEXTURE_2D IsEnabled B FALSE texture/enable | |
| TEXTURE_3D_EXT IsEnabled B FALSE texture/enable | |
| TEXTURE_1D_BINDING_EXT GetIntegerv Z+ 0 texture | |
| TEXTURE_2D_BINDING_EXT GetIntegerv Z+ 0 texture | |
| TEXTURE_3D_BINDING_EXT GetIntegerv Z+ 0 texture | |
| TEXTURE_PRIORITY_EXT GetTexParameterfv n x Z+ 1 texture | |
| TEXTURE_RESIDENT_EXT AreTexturesResidentEXT n x B unknown - | |
| TEXTURE GetTexImage n x levels x I null - | |
| TEXTURE_RED_SIZE_EXT GetTexLevelParameteriv n x levels x Z+ 0 - | |
| TEXTURE_GREEN_SIZE_EXT GetTexLevelParameteriv n x levels x Z+ 0 - | |
| TEXTURE_BLUE_SIZE_EXT GetTexLevelParameteriv n x levels x Z+ 0 - | |
| TEXTURE_ALPHA_SIZE_EXT GetTexLevelParameteriv n x levels x Z+ 0 - | |
| TEXTURE_LUMINANCE_SIZE_EXT GetTexLevelParameteriv n x levels x Z+ 0 - | |
| TEXTURE_INTENSITY_SIZE_EXT GetTexLevelParameteriv n x levels x Z+ 0 - | |
| TEXTURE_WIDTH GetTexLevelParameteriv n x levels x Z+ 0 - | |
| TEXTURE_HEIGHT GetTexLevelParameteriv n x levels x Z+ 0 - | |
| TEXTURE_DEPTH_EXT GetTexLevelParameteriv n x levels x Z+ 0 - | |
| TEXTURE_4DSIZE_SGIS GetTexLevelParameteriv n x levels x Z+ 0 - | |
| TEXTURE_BORDER GetTexLevelParameteriv n x levels x Z+ 0 - | |
| TEXTURE_COMPONENTS (1D and 2D) GetTexLevelParameteriv n x levels x Z42 1 - | |
| TEXTURE_COMPONENTS (3D and 4D) GetTexLevelParameteriv n x levels x Z38 LUMINANCE - | |
| TEXTURE_BORDER_COLOR GetTexParameteriv n x C 0, 0, 0, 0 texture | |
| TEXTURE_MIN_FILTER GetTexParameteriv n x Z7 NEAREST_MIPMAP_LINEAR texture | |
| TEXTURE_MAG_FILTER GetTexParameteriv n x Z3 LINEAR texture | |
| TEXTURE_WRAP_S GetTexParameteriv n x Z2 REPEAT texture | |
| TEXTURE_WRAP_T GetTexParameteriv n x Z2 REPEAT texture | |
| TEXTURE_WRAP_R_EXT GetTexParameteriv n x Z2 REPEAT texture | |
| TEXTURE_WRAP_Q_SGIS GetTexParameteriv n x Z2 REPEAT texture | |
| New Implementation Dependent State | |
| None |