Home | History | Annotate | Download | only in main
      1 /**
      2  * \file texobj.h
      3  * Texture object management.
      4  */
      5 
      6 /*
      7  * Mesa 3-D graphics library
      8  * Version:  6.5
      9  *
     10  * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
     11  *
     12  * Permission is hereby granted, free of charge, to any person obtaining a
     13  * copy of this software and associated documentation files (the "Software"),
     14  * to deal in the Software without restriction, including without limitation
     15  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
     16  * and/or sell copies of the Software, and to permit persons to whom the
     17  * Software is furnished to do so, subject to the following conditions:
     18  *
     19  * The above copyright notice and this permission notice shall be included
     20  * in all copies or substantial portions of the Software.
     21  *
     22  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     23  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     24  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     25  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
     26  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
     27  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     28  */
     29 
     30 
     31 #ifndef TEXTOBJ_H
     32 #define TEXTOBJ_H
     33 
     34 
     35 #include "compiler.h"
     36 #include "glheader.h"
     37 #include "mtypes.h"
     38 #include "samplerobj.h"
     39 
     40 
     41 /**
     42  * \name Internal functions
     43  */
     44 /*@{*/
     45 
     46 extern struct gl_texture_object *
     47 _mesa_lookup_texture(struct gl_context *ctx, GLuint id);
     48 
     49 extern struct gl_texture_object *
     50 _mesa_new_texture_object( struct gl_context *ctx, GLuint name, GLenum target );
     51 
     52 extern void
     53 _mesa_initialize_texture_object( struct gl_texture_object *obj,
     54                                  GLuint name, GLenum target );
     55 
     56 extern void
     57 _mesa_delete_texture_object( struct gl_context *ctx,
     58                              struct gl_texture_object *obj );
     59 
     60 extern void
     61 _mesa_copy_texture_object( struct gl_texture_object *dest,
     62                            const struct gl_texture_object *src );
     63 
     64 extern void
     65 _mesa_clear_texture_object(struct gl_context *ctx,
     66                            struct gl_texture_object *obj);
     67 
     68 extern void
     69 _mesa_reference_texobj_(struct gl_texture_object **ptr,
     70                         struct gl_texture_object *tex);
     71 
     72 static inline void
     73 _mesa_reference_texobj(struct gl_texture_object **ptr,
     74                        struct gl_texture_object *tex)
     75 {
     76    if (*ptr != tex)
     77       _mesa_reference_texobj_(ptr, tex);
     78 }
     79 
     80 
     81 /**
     82  * Return number of faces for a texture target.  This will be 6 for
     83  * cube maps (and cube map arrays) and 1 otherwise.
     84  */
     85 static inline GLuint
     86 _mesa_num_tex_faces(GLenum target)
     87 {
     88    return target == GL_TEXTURE_CUBE_MAP ? 6 : 1;
     89 }
     90 
     91 
     92 /** Is the texture "complete" with respect to the given sampler state? */
     93 static inline GLboolean
     94 _mesa_is_texture_complete(const struct gl_texture_object *texObj,
     95                           const struct gl_sampler_object *sampler)
     96 {
     97    if (texObj->_IsIntegerFormat &&
     98        (sampler->MagFilter != GL_NEAREST ||
     99         (sampler->MinFilter != GL_NEAREST &&
    100          sampler->MinFilter != GL_NEAREST_MIPMAP_NEAREST))) {
    101       /* If the format is integer, only nearest filtering is allowed */
    102       return GL_FALSE;
    103    }
    104 
    105    if (_mesa_is_mipmap_filter(sampler))
    106       return texObj->_MipmapComplete;
    107    else
    108       return texObj->_BaseComplete;
    109 }
    110 
    111 
    112 extern void
    113 _mesa_test_texobj_completeness( const struct gl_context *ctx,
    114                                 struct gl_texture_object *obj );
    115 
    116 extern GLboolean
    117 _mesa_cube_complete(const struct gl_texture_object *texObj);
    118 
    119 extern void
    120 _mesa_dirty_texobj(struct gl_context *ctx, struct gl_texture_object *texObj,
    121                    GLboolean invalidate_state);
    122 
    123 extern struct gl_texture_object *
    124 _mesa_get_fallback_texture(struct gl_context *ctx, gl_texture_index tex);
    125 
    126 extern GLuint
    127 _mesa_total_texture_memory(struct gl_context *ctx);
    128 
    129 extern void
    130 _mesa_unlock_context_textures( struct gl_context *ctx );
    131 
    132 extern void
    133 _mesa_lock_context_textures( struct gl_context *ctx );
    134 
    135 /*@}*/
    136 
    137 /**
    138  * \name API functions
    139  */
    140 /*@{*/
    141 
    142 extern void GLAPIENTRY
    143 _mesa_GenTextures( GLsizei n, GLuint *textures );
    144 
    145 
    146 extern void GLAPIENTRY
    147 _mesa_DeleteTextures( GLsizei n, const GLuint *textures );
    148 
    149 
    150 extern void GLAPIENTRY
    151 _mesa_BindTexture( GLenum target, GLuint texture );
    152 
    153 
    154 extern void GLAPIENTRY
    155 _mesa_PrioritizeTextures( GLsizei n, const GLuint *textures,
    156                           const GLclampf *priorities );
    157 
    158 
    159 extern GLboolean GLAPIENTRY
    160 _mesa_AreTexturesResident( GLsizei n, const GLuint *textures,
    161                            GLboolean *residences );
    162 
    163 extern GLboolean GLAPIENTRY
    164 _mesa_IsTexture( GLuint texture );
    165 
    166 extern void GLAPIENTRY
    167 _mesa_InvalidateTexSubImage(GLuint texture, GLint level, GLint xoffset,
    168                             GLint yoffset, GLint zoffset, GLsizei width,
    169                             GLsizei height, GLsizei depth);
    170 
    171 extern void GLAPIENTRY
    172 _mesa_InvalidateTexImage(GLuint texture, GLint level);
    173 
    174 /*@}*/
    175 
    176 
    177 #endif
    178