| 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 |