back  Return to list

GL_EXT_texture_object
homeprevnext Name
  
    EXT_texture_object  
  
homeprevnext Name Strings
  
    GL_EXT_texture_object  
  
homeprevnext Version
  
    $Date: 1995/10/03 05:39:56 $ $Revision: 1.27 $  
  
homeprevnext Number
  
    20  
  
homeprevnext Dependencies
  
    EXT_texture3D affects the definition of this extension  
  
homeprevnext 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.  
  
homeprevnext 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.  
  
homeprevnext 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);  
  
homeprevnext 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  
  
homeprevnext Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation)
  
    None  
  
homeprevnext 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.)  
  
homeprevnext Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations and the Frame Buffer)
  
    None  
  
homeprevnext 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.  
  
homeprevnext 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.  
  
homeprevnext 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.  
  
homeprevnext 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  
  
homeprevnext Dependencies on EXT_texture3D
  
    If EXT_texture3D is not supported, then all references to 3D textures  
    in this specification are invalid.  
  
homeprevnext 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.  
  
homeprevnext 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  
  
homeprevnext New Implementation Dependent State
  
    None  
    None  
Valid XHTML 1.1! Valid CSS! Last update: November 14, 2006.
Cette page doit être lue avec un navigateur récent respectant le standard XHTML 1.1.