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

📄 texcompress_s3tc.c

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 C
📖 第 1 页 / 共 2 页
字号:
       srcType != CHAN_TYPE ||       ctx->_ImageTransferState ||       srcPacking->SwapBytes) {      /* convert image to RGBA/GLchan */      tempImage = _mesa_make_temp_chan_image(ctx, dims,                                             baseInternalFormat,                                             dstFormat->BaseFormat,                                             srcWidth, srcHeight, srcDepth,                                             srcFormat, srcType, srcAddr,                                             srcPacking);      if (!tempImage)         return GL_FALSE; /* out of memory */      _mesa_adjust_image_for_convolution(ctx, dims, &srcWidth, &srcHeight);      pixels = tempImage;      srcRowStride = 4 * srcWidth;   }   else {      pixels = (const GLchan *) srcAddr;      srcRowStride = _mesa_image_row_stride(srcPacking, srcWidth, srcFormat,                                            srcType) / sizeof(GLchan);   }   dst = _mesa_compressed_image_address(dstXoffset, dstYoffset, 0,                                        dstFormat->MesaFormat,                                        texWidth, (GLubyte *) dstAddr);   if (ext_tx_compress_dxtn) {      (*ext_tx_compress_dxtn)(4, srcWidth, srcHeight, pixels,                              GL_COMPRESSED_RGBA_S3TC_DXT3_EXT,                              dst, dstRowStride);   }   else {      _mesa_warning(ctx, "external dxt library not available");   }   if (tempImage)      _mesa_free((void *) tempImage);   return GL_TRUE;}/** * Called via TexFormat->StoreImage to store an RGBA_DXT5 texture. */static GLbooleantexstore_rgba_dxt5(TEXSTORE_PARAMS){   const GLchan *pixels;   GLint srcRowStride;   GLubyte *dst;   const GLint texWidth = dstRowStride * 4 / 16; /* a bit of a hack */   const GLchan *tempImage = NULL;   ASSERT(dstFormat == &_mesa_texformat_rgba_dxt5);   ASSERT(dstXoffset % 4 == 0);   ASSERT(dstYoffset % 4 == 0);   ASSERT(dstZoffset % 4 == 0);   (void) dstZoffset;   (void) dstImageOffsets;   if (srcFormat != GL_RGBA ||       srcType != CHAN_TYPE ||       ctx->_ImageTransferState ||       srcPacking->SwapBytes) {      /* convert image to RGBA/GLchan */      tempImage = _mesa_make_temp_chan_image(ctx, dims,                                             baseInternalFormat,                                             dstFormat->BaseFormat,                                             srcWidth, srcHeight, srcDepth,                                             srcFormat, srcType, srcAddr,                                             srcPacking);      if (!tempImage)         return GL_FALSE; /* out of memory */      _mesa_adjust_image_for_convolution(ctx, dims, &srcWidth, &srcHeight);      pixels = tempImage;      srcRowStride = 4 * srcWidth;   }   else {      pixels = (const GLchan *) srcAddr;      srcRowStride = _mesa_image_row_stride(srcPacking, srcWidth, srcFormat,                                            srcType) / sizeof(GLchan);   }   dst = _mesa_compressed_image_address(dstXoffset, dstYoffset, 0,                                        dstFormat->MesaFormat,                                        texWidth, (GLubyte *) dstAddr);   if (ext_tx_compress_dxtn) {      (*ext_tx_compress_dxtn)(4, srcWidth, srcHeight, pixels,                              GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,                              dst, dstRowStride);   }   else {      _mesa_warning(ctx, "external dxt library not available");   }   if (tempImage)      _mesa_free((void *) tempImage);   return GL_TRUE;}static voidfetch_texel_2d_rgb_dxt1( const struct gl_texture_image *texImage,                         GLint i, GLint j, GLint k, GLchan *texel ){   (void) k;   if (fetch_ext_rgb_dxt1) {      ASSERT (sizeof(GLchan) == sizeof(GLubyte));      fetch_ext_rgb_dxt1(texImage->RowStride,                         (GLubyte *)(texImage)->Data, i, j, texel);   }   else      _mesa_debug(NULL, "attempted to decode s3tc texture without library available\n");}static voidfetch_texel_2d_f_rgb_dxt1( const struct gl_texture_image *texImage,                            GLint i, GLint j, GLint k, GLfloat *texel ){   /* just sample as GLchan and convert to float here */   GLchan rgba[4];   fetch_texel_2d_rgb_dxt1(texImage, i, j, k, rgba);   texel[RCOMP] = CHAN_TO_FLOAT(rgba[RCOMP]);   texel[GCOMP] = CHAN_TO_FLOAT(rgba[GCOMP]);   texel[BCOMP] = CHAN_TO_FLOAT(rgba[BCOMP]);   texel[ACOMP] = CHAN_TO_FLOAT(rgba[ACOMP]);}static voidfetch_texel_2d_rgba_dxt1( const struct gl_texture_image *texImage,                          GLint i, GLint j, GLint k, GLchan *texel ){   (void) k;   if (fetch_ext_rgba_dxt1) {      fetch_ext_rgba_dxt1(texImage->RowStride,                          (GLubyte *)(texImage)->Data, i, j, texel);   }   else      _mesa_debug(NULL, "attempted to decode s3tc texture without library available\n");}static voidfetch_texel_2d_f_rgba_dxt1( const struct gl_texture_image *texImage,                            GLint i, GLint j, GLint k, GLfloat *texel ){   /* just sample as GLchan and convert to float here */   GLchan rgba[4];   fetch_texel_2d_rgba_dxt1(texImage, i, j, k, rgba);   texel[RCOMP] = CHAN_TO_FLOAT(rgba[RCOMP]);   texel[GCOMP] = CHAN_TO_FLOAT(rgba[GCOMP]);   texel[BCOMP] = CHAN_TO_FLOAT(rgba[BCOMP]);   texel[ACOMP] = CHAN_TO_FLOAT(rgba[ACOMP]);}static voidfetch_texel_2d_rgba_dxt3( const struct gl_texture_image *texImage,                          GLint i, GLint j, GLint k, GLchan *texel ){   (void) k;   if (fetch_ext_rgba_dxt3) {      ASSERT (sizeof(GLchan) == sizeof(GLubyte));      fetch_ext_rgba_dxt3(texImage->RowStride, (GLubyte *)(texImage)->Data,                          i, j, texel);   }   else      _mesa_debug(NULL, "attempted to decode s3tc texture without library available\n");}static voidfetch_texel_2d_f_rgba_dxt3( const struct gl_texture_image *texImage,                            GLint i, GLint j, GLint k, GLfloat *texel ){   /* just sample as GLchan and convert to float here */   GLchan rgba[4];   fetch_texel_2d_rgba_dxt3(texImage, i, j, k, rgba);   texel[RCOMP] = CHAN_TO_FLOAT(rgba[RCOMP]);   texel[GCOMP] = CHAN_TO_FLOAT(rgba[GCOMP]);   texel[BCOMP] = CHAN_TO_FLOAT(rgba[BCOMP]);   texel[ACOMP] = CHAN_TO_FLOAT(rgba[ACOMP]);}static voidfetch_texel_2d_rgba_dxt5( const struct gl_texture_image *texImage,                          GLint i, GLint j, GLint k, GLchan *texel ){   (void) k;   if (fetch_ext_rgba_dxt5) {      fetch_ext_rgba_dxt5(texImage->RowStride, (GLubyte *)(texImage)->Data,                          i, j, texel);   }   else      _mesa_debug(NULL, "attempted to decode s3tc texture without library available\n");}static voidfetch_texel_2d_f_rgba_dxt5( const struct gl_texture_image *texImage,                            GLint i, GLint j, GLint k, GLfloat *texel ){   /* just sample as GLchan and convert to float here */   GLchan rgba[4];   fetch_texel_2d_rgba_dxt5(texImage, i, j, k, rgba);   texel[RCOMP] = CHAN_TO_FLOAT(rgba[RCOMP]);   texel[GCOMP] = CHAN_TO_FLOAT(rgba[GCOMP]);   texel[BCOMP] = CHAN_TO_FLOAT(rgba[BCOMP]);   texel[ACOMP] = CHAN_TO_FLOAT(rgba[ACOMP]);}const struct gl_texture_format _mesa_texformat_rgb_dxt1 = {   MESA_FORMAT_RGB_DXT1,		/* MesaFormat */   GL_RGB,				/* BaseFormat */   GL_UNSIGNED_NORMALIZED_ARB,		/* DataType */   4, /*approx*/			/* RedBits */   4, /*approx*/			/* GreenBits */   4, /*approx*/			/* BlueBits */   0,					/* AlphaBits */   0,					/* LuminanceBits */   0,					/* IntensityBits */   0,					/* IndexBits */   0,					/* DepthBits */   0,					/* StencilBits */   0,					/* TexelBytes */   texstore_rgb_dxt1,			/* StoreTexImageFunc */   NULL, /*impossible*/ 		/* FetchTexel1D */   fetch_texel_2d_rgb_dxt1, 		/* FetchTexel2D */   NULL, /*impossible*/ 		/* FetchTexel3D */   NULL, /*impossible*/ 		/* FetchTexel1Df */   fetch_texel_2d_f_rgb_dxt1, 		/* FetchTexel2Df */   NULL, /*impossible*/ 		/* FetchTexel3Df */   NULL					/* StoreTexel */};#if FEATURE_EXT_texture_sRGBconst struct gl_texture_format _mesa_texformat_srgb_dxt1 = {   MESA_FORMAT_SRGB_DXT1,		/* MesaFormat */   GL_RGB,				/* BaseFormat */   GL_UNSIGNED_NORMALIZED_ARB,		/* DataType */   4, /*approx*/			/* RedBits */   4, /*approx*/			/* GreenBits */   4, /*approx*/			/* BlueBits */   0,					/* AlphaBits */   0,					/* LuminanceBits */   0,					/* IntensityBits */   0,					/* IndexBits */   0,					/* DepthBits */   0,					/* StencilBits */   0,					/* TexelBytes */   texstore_rgb_dxt1,			/* StoreTexImageFunc */   NULL, /*impossible*/ 		/* FetchTexel1D */   fetch_texel_2d_rgb_dxt1, 		/* FetchTexel2D */   NULL, /*impossible*/ 		/* FetchTexel3D */   NULL, /*impossible*/ 		/* FetchTexel1Df */   fetch_texel_2d_f_rgb_dxt1, 		/* FetchTexel2Df */   NULL, /*impossible*/ 		/* FetchTexel3Df */   NULL					/* StoreTexel */};#endifconst struct gl_texture_format _mesa_texformat_rgba_dxt1 = {   MESA_FORMAT_RGBA_DXT1,		/* MesaFormat */   GL_RGBA,				/* BaseFormat */   GL_UNSIGNED_NORMALIZED_ARB,		/* DataType */   4, /*approx*/			/* RedBits */   4, /*approx*/			/* GreenBits */   4, /*approx*/			/* BlueBits */   1, /*approx*/			/* AlphaBits */   0,					/* LuminanceBits */   0,					/* IntensityBits */   0,					/* IndexBits */   0,					/* DepthBits */   0,					/* StencilBits */   0,					/* TexelBytes */   texstore_rgba_dxt1,			/* StoreTexImageFunc */   NULL, /*impossible*/ 		/* FetchTexel1D */   fetch_texel_2d_rgba_dxt1, 		/* FetchTexel2D */   NULL, /*impossible*/ 		/* FetchTexel3D */   NULL, /*impossible*/ 		/* FetchTexel1Df */   fetch_texel_2d_f_rgba_dxt1, 		/* FetchTexel2Df */   NULL, /*impossible*/ 		/* FetchTexel3Df */   NULL					/* StoreTexel */};const struct gl_texture_format _mesa_texformat_rgba_dxt3 = {   MESA_FORMAT_RGBA_DXT3,		/* MesaFormat */   GL_RGBA,				/* BaseFormat */   GL_UNSIGNED_NORMALIZED_ARB,		/* DataType */   4, /*approx*/			/* RedBits */   4, /*approx*/			/* GreenBits */   4, /*approx*/			/* BlueBits */   4, /*approx*/			/* AlphaBits */   0,					/* LuminanceBits */   0,					/* IntensityBits */   0,					/* IndexBits */   0,					/* DepthBits */   0,					/* StencilBits */   0,					/* TexelBytes */   texstore_rgba_dxt3,			/* StoreTexImageFunc */   NULL, /*impossible*/ 		/* FetchTexel1D */   fetch_texel_2d_rgba_dxt3, 		/* FetchTexel2D */   NULL, /*impossible*/ 		/* FetchTexel3D */   NULL, /*impossible*/ 		/* FetchTexel1Df */   fetch_texel_2d_f_rgba_dxt3, 		/* FetchTexel2Df */   NULL, /*impossible*/ 		/* FetchTexel3Df */   NULL					/* StoreTexel */};const struct gl_texture_format _mesa_texformat_rgba_dxt5 = {   MESA_FORMAT_RGBA_DXT5,		/* MesaFormat */   GL_RGBA,				/* BaseFormat */   GL_UNSIGNED_NORMALIZED_ARB,		/* DataType */   4,/*approx*/				/* RedBits */   4,/*approx*/				/* GreenBits */   4,/*approx*/				/* BlueBits */   4,/*approx*/				/* AlphaBits */   0,					/* LuminanceBits */   0,					/* IntensityBits */   0,					/* IndexBits */   0,					/* DepthBits */   0,					/* StencilBits */   0,					/* TexelBytes */   texstore_rgba_dxt5,			/* StoreTexImageFunc */   NULL, /*impossible*/ 		/* FetchTexel1D */   fetch_texel_2d_rgba_dxt5, 		/* FetchTexel2D */   NULL, /*impossible*/ 		/* FetchTexel3D */   NULL, /*impossible*/ 		/* FetchTexel1Df */   fetch_texel_2d_f_rgba_dxt5, 		/* FetchTexel2Df */   NULL, /*impossible*/ 		/* FetchTexel3Df */   NULL					/* StoreTexel */};

⌨️ 快捷键说明

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