⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i810tex.c

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 C
📖 第 1 页 / 共 2 页
字号:
   }   if (t == imesa->CurrentTexObj[1]) {      I810_STATECHANGE( imesa, I810_UPLOAD_TEX1 );   }}/** * Setup hardware bits for new texture environment settings. *  * \todo * Determine whether or not \c param can be used instead of * \c texUnit->EnvColor in the \c GL_TEXTURE_ENV_COLOR case. */static void i810TexEnv( GLcontext *ctx, GLenum target, 			GLenum pname, const GLfloat *param ){   i810ContextPtr imesa = I810_CONTEXT( ctx );   const GLuint unit = ctx->Texture.CurrentUnit;   const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];   /* Only one env color.  Need a fallback if env colors are different    * and texture setup references env color in both units.      */   switch (pname) {   case GL_TEXTURE_ENV_COLOR: {      GLubyte c[4];      GLuint envColor;      UNCLAMPED_FLOAT_TO_RGBA_CHAN( c, texUnit->EnvColor );      envColor = PACK_COLOR_8888( c[3], c[0], c[1], c[2] );      if (imesa->Setup[I810_CTXREG_CF1] != envColor) {	 I810_STATECHANGE(imesa, I810_UPLOAD_CTX);	 imesa->Setup[I810_CTXREG_CF1] = envColor;      }      break;   }   case GL_TEXTURE_ENV_MODE:      imesa->TexEnvImageFmt[unit] = 0; /* force recalc of env state */      break;   case GL_TEXTURE_LOD_BIAS: {      if ( texUnit->_Current != NULL ) {	 const struct gl_texture_object *tObj = texUnit->_Current;	 i810TextureObjectPtr t = (i810TextureObjectPtr) tObj->DriverData;	 t->Setup[I810_TEXREG_MLC] &= ~(MLC_LOD_BIAS_MASK);	 t->Setup[I810_TEXREG_MLC] |= i810ComputeLodBias(*param);      }      break;   }   default:      break;   }} #if 0static void i810TexImage1D( GLcontext *ctx, GLenum target, GLint level,			    GLint internalFormat,			    GLint width, GLint border,			    GLenum format, GLenum type, 			    const GLvoid *pixels,			    const struct gl_pixelstore_attrib *pack,			    struct gl_texture_object *texObj,			    struct gl_texture_image *texImage ){   i810TextureObjectPtr t = (i810TextureObjectPtr) texObj->DriverData;   if (t) {      i810SwapOutTexObj( imesa, t );   }}static void i810TexSubImage1D( GLcontext *ctx, 			       GLenum target,			       GLint level,				       GLint xoffset,			       GLsizei width,			       GLenum format, GLenum type,			       const GLvoid *pixels,			       const struct gl_pixelstore_attrib *pack,			       struct gl_texture_object *texObj,			       struct gl_texture_image *texImage ){}#endifstatic void i810TexImage2D( GLcontext *ctx, GLenum target, GLint level,			    GLint internalFormat,			    GLint width, GLint height, GLint border,			    GLenum format, GLenum type, const GLvoid *pixels,			    const struct gl_pixelstore_attrib *packing,			    struct gl_texture_object *texObj,			    struct gl_texture_image *texImage ){   driTextureObject *t = (driTextureObject *) texObj->DriverData;   if (t) {      I810_FIREVERTICES( I810_CONTEXT(ctx) );      driSwapOutTextureObject( t );   }   else {      t = (driTextureObject *) i810AllocTexObj( ctx, texObj );      if (!t) {         _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage2D");         return;      }   }   _mesa_store_teximage2d( ctx, target, level, internalFormat,			   width, height, border, format, type,			   pixels, packing, texObj, texImage );}static void i810TexSubImage2D( GLcontext *ctx, 			       GLenum target,			       GLint level,				       GLint xoffset, GLint yoffset,			       GLsizei width, GLsizei height,			       GLenum format, GLenum type,			       const GLvoid *pixels,			       const struct gl_pixelstore_attrib *packing,			       struct gl_texture_object *texObj,			       struct gl_texture_image *texImage ){   driTextureObject *t = (driTextureObject *)texObj->DriverData;   if (t) {     I810_FIREVERTICES( I810_CONTEXT(ctx) );     driSwapOutTextureObject( t );   }   _mesa_store_texsubimage2d(ctx, target, level, xoffset, yoffset, width, 			     height, format, type, pixels, packing, texObj,			     texImage);}static void i810BindTexture( GLcontext *ctx, GLenum target,			     struct gl_texture_object *tObj ){   assert( (target != GL_TEXTURE_2D) || (tObj->DriverData != NULL) );}static void i810DeleteTexture( GLcontext *ctx, struct gl_texture_object *tObj ){   driTextureObject * t = (driTextureObject *) tObj->DriverData;   if (t) {      i810ContextPtr imesa = I810_CONTEXT( ctx );      if (imesa)         I810_FIREVERTICES( imesa );      driDestroyTextureObject( t );   }   /* Free mipmap images and the texture object itself */   _mesa_delete_texture_object(ctx, tObj);}/** * Choose a Mesa texture format to match the requested format. *  * The i810 only supports 5 texture modes that are useful to Mesa.  That * makes this routine pretty simple. */static const struct gl_texture_format *i810ChooseTextureFormat( GLcontext *ctx, GLint internalFormat,			 GLenum format, GLenum type ){   switch ( internalFormat ) {   case 4:   case GL_RGBA:   case GL_RGBA2:   case GL_RGBA4:   case GL_RGB5_A1:   case GL_RGBA8:   case GL_RGB10_A2:   case GL_RGBA12:   case GL_RGBA16:   case GL_COMPRESSED_RGBA:      if ( ((format == GL_BGRA) && (type == GL_UNSIGNED_SHORT_1_5_5_5_REV))	   || ((format == GL_RGBA) && (type == GL_UNSIGNED_SHORT_5_5_5_1))	   || (internalFormat == GL_RGB5_A1) ) {	 return &_mesa_texformat_argb1555;      }      return &_mesa_texformat_argb4444;   case 3:   case GL_RGB:   case GL_COMPRESSED_RGB:   case GL_R3_G3_B2:   case GL_RGB4:   case GL_RGB5:   case GL_RGB8:   case GL_RGB10:   case GL_RGB12:   case GL_RGB16:      return &_mesa_texformat_rgb565;   case GL_ALPHA:   case GL_ALPHA4:   case GL_ALPHA8:   case GL_ALPHA12:   case GL_ALPHA16:   case GL_COMPRESSED_ALPHA:   case 1:   case GL_LUMINANCE:   case GL_LUMINANCE4:   case GL_LUMINANCE8:   case GL_LUMINANCE12:   case GL_LUMINANCE16:   case GL_COMPRESSED_LUMINANCE:   case 2:   case GL_LUMINANCE_ALPHA:   case GL_LUMINANCE4_ALPHA4:   case GL_LUMINANCE6_ALPHA2:   case GL_LUMINANCE8_ALPHA8:   case GL_LUMINANCE12_ALPHA4:   case GL_LUMINANCE12_ALPHA12:   case GL_LUMINANCE16_ALPHA16:   case GL_COMPRESSED_LUMINANCE_ALPHA:   case GL_INTENSITY:   case GL_INTENSITY4:   case GL_INTENSITY8:   case GL_INTENSITY12:   case GL_INTENSITY16:   case GL_COMPRESSED_INTENSITY:      return &_mesa_texformat_al88;   case GL_YCBCR_MESA:      if (type == GL_UNSIGNED_SHORT_8_8_MESA ||	  type == GL_UNSIGNED_BYTE)         return &_mesa_texformat_ycbcr;      else         return &_mesa_texformat_ycbcr_rev;   default:      fprintf(stderr, "unexpected texture format in %s\n", __FUNCTION__);      return NULL;   }   return NULL; /* never get here */}/** * Allocate a new texture object. * Called via ctx->Driver.NewTextureObject. * Note: this function will be called during context creation to * allocate the default texture objects. * Note: we could use containment here to 'derive' the driver-specific * texture object from the core mesa gl_texture_object.  Not done at this time. */static struct gl_texture_object *i810NewTextureObject( GLcontext *ctx, GLuint name, GLenum target ){   struct gl_texture_object *obj;   obj = _mesa_new_texture_object(ctx, name, target);   i810AllocTexObj( ctx, obj );   return obj;}void i810InitTextureFuncs( struct dd_function_table *functions ){   functions->ChooseTextureFormat = i810ChooseTextureFormat;   functions->TexImage2D = i810TexImage2D;   functions->TexSubImage2D = i810TexSubImage2D;   functions->BindTexture = i810BindTexture;   functions->NewTextureObject = i810NewTextureObject;   functions->DeleteTexture = i810DeleteTexture;   functions->TexParameter = i810TexParameter;   functions->TexEnv = i810TexEnv;   functions->IsTextureResident = driIsTextureResident;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -