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

📄 texstore.c

📁 mesa-6.5-minigui源码
💻 C
📖 第 1 页 / 共 5 页
字号:
                                                   CHAN_TO_UBYTE(src[GCOMP]),                                                   CHAN_TO_UBYTE(src[BCOMP]) );                  src += 3;               }            }            dstRow += dstRowStride;         }         dstImage += dstImageStride;      }      _mesa_free((void *) tempImage);   }   return GL_TRUE;}GLboolean_mesa_texstore_rgba8888(STORE_PARAMS){   const GLuint ui = 1;   const GLubyte littleEndian = *((const GLubyte *) &ui);   (void)littleEndian;   ASSERT(dstFormat == &_mesa_texformat_rgba8888 ||          dstFormat == &_mesa_texformat_rgba8888_rev);   ASSERT(dstFormat->TexelBytes == 4);   if (!ctx->_ImageTransferState &&       !srcPacking->SwapBytes &&       dstFormat == &_mesa_texformat_rgba8888 &&       baseInternalFormat == GL_RGBA &&      ((srcFormat == GL_RGBA && srcType == GL_UNSIGNED_INT_8_8_8_8) ||       (srcFormat == GL_ABGR_EXT && srcType == GL_UNSIGNED_INT_8_8_8_8_REV))) {      /* simple memcpy path */      memcpy_texture(ctx, dims,                     dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset,                     dstRowStride, dstImageStride,                     srcWidth, srcHeight, srcDepth, srcFormat, srcType,                     srcAddr, srcPacking);   }#if 0   else if (!ctx->_ImageTransferState &&	    !srcPacking->SwapBytes &&	    srcType == GL_UNSIGNED_BYTE && 	    dstFormat == &_mesa_texformat_rgba8888 &&	    littleEndian &&	    /* Three texture formats involved: srcFormat,	     * baseInternalFormat and destFormat (GL_RGBA). Only two	     * may differ. _mesa_swizzle_ubyte_image can't handle two	     * propagations at once correctly. */	    (srcFormat == baseInternalFormat ||	     baseInternalFormat == GL_RGBA) &&	    can_swizzle(srcFormat)) {      GLubyte dstmap[4];      /* dstmap - how to swizzle from GL_RGBA to dst format:       *       * FIXME - add !litteEndian and _rev varients:       */      dstmap[3] = 0;      dstmap[2] = 1;      dstmap[1] = 2;      dstmap[0] = 3;            _mesa_swizzle_ubyte_image(ctx, dims,				srcFormat,				dstmap, 4,				dstAddr, dstXoffset, dstYoffset, dstZoffset,				dstRowStride, dstImageStride,				srcWidth, srcHeight, srcDepth, srcAddr,				srcPacking);         }#endif   else {      /* general path */      const GLchan *tempImage = _mesa_make_temp_chan_image(ctx, dims,                                                 baseInternalFormat,                                                 dstFormat->BaseFormat,                                                 srcWidth, srcHeight, srcDepth,                                                 srcFormat, srcType, srcAddr,                                                 srcPacking);      const GLchan *src = tempImage;      GLubyte *dstImage = (GLubyte *) dstAddr                        + dstZoffset * dstImageStride                        + dstYoffset * dstRowStride                        + dstXoffset * dstFormat->TexelBytes;      GLint img, row, col;      if (!tempImage)         return GL_FALSE;      _mesa_adjust_image_for_convolution(ctx, dims, &srcWidth, &srcHeight);      for (img = 0; img < srcDepth; img++) {         GLubyte *dstRow = dstImage;         for (row = 0; row < srcHeight; row++) {            GLuint *dstUI = (GLuint *) dstRow;            if (dstFormat == &_mesa_texformat_rgba8888) {               for (col = 0; col < srcWidth; col++) {                  dstUI[col] = PACK_COLOR_8888( CHAN_TO_UBYTE(src[RCOMP]),                                                CHAN_TO_UBYTE(src[GCOMP]),                                                CHAN_TO_UBYTE(src[BCOMP]),                                                CHAN_TO_UBYTE(src[ACOMP]) );                  src += 4;               }            }            else {               for (col = 0; col < srcWidth; col++) {                  dstUI[col] = PACK_COLOR_8888_REV( CHAN_TO_UBYTE(src[RCOMP]),                                                    CHAN_TO_UBYTE(src[GCOMP]),                                                    CHAN_TO_UBYTE(src[BCOMP]),                                                    CHAN_TO_UBYTE(src[ACOMP]) );                  src += 4;               }            }            dstRow += dstRowStride;         }         dstImage += dstImageStride;      }      _mesa_free((void *) tempImage);   }   return GL_TRUE;}GLboolean_mesa_texstore_argb8888(STORE_PARAMS){   const GLuint ui = 1;   const GLubyte littleEndian = *((const GLubyte *) &ui);   ASSERT(dstFormat == &_mesa_texformat_argb8888 ||          dstFormat == &_mesa_texformat_argb8888_rev);   ASSERT(dstFormat->TexelBytes == 4);   if (!ctx->_ImageTransferState &&       !srcPacking->SwapBytes &&       dstFormat == &_mesa_texformat_argb8888 &&       baseInternalFormat == GL_RGBA &&       srcFormat == GL_BGRA &&       ((srcType == GL_UNSIGNED_BYTE && littleEndian) ||        srcType == GL_UNSIGNED_INT_8_8_8_8_REV)) {      /* simple memcpy path (little endian) */      memcpy_texture(ctx, dims,                     dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset,                     dstRowStride, dstImageStride,                     srcWidth, srcHeight, srcDepth, srcFormat, srcType,                     srcAddr, srcPacking);   }   else if (!ctx->_ImageTransferState &&       !srcPacking->SwapBytes &&       dstFormat == &_mesa_texformat_argb8888_rev &&       baseInternalFormat == GL_RGBA &&       srcFormat == GL_BGRA &&       ((srcType == GL_UNSIGNED_BYTE && !littleEndian) ||        srcType == GL_UNSIGNED_INT_8_8_8_8)) {      /* simple memcpy path (big endian) */      memcpy_texture(ctx, dims,                     dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset,                     dstRowStride, dstImageStride,                     srcWidth, srcHeight, srcDepth, srcFormat, srcType,                     srcAddr, srcPacking);   }   else if (!ctx->_ImageTransferState &&            !srcPacking->SwapBytes &&	    dstFormat == &_mesa_texformat_argb8888 &&            srcFormat == GL_RGB &&            srcType == GL_UNSIGNED_BYTE) {      int img, row, col;      GLubyte *dstImage = (GLubyte *) dstAddr                        + dstZoffset * dstImageStride                        + dstYoffset * dstRowStride                        + dstXoffset * dstFormat->TexelBytes;      for (img = 0; img < srcDepth; img++) {         const GLint srcRowStride = _mesa_image_row_stride(srcPacking,                                                 srcWidth, srcFormat, srcType);         GLubyte *srcRow = (GLubyte *) _mesa_image_address(dims, srcPacking,                  srcAddr, srcWidth, srcHeight, srcFormat, srcType, img, 0, 0);         GLubyte *dstRow = dstImage;         for (row = 0; row < srcHeight; row++) {            for (col = 0; col < srcWidth; col++) {               dstRow[col * 4 + 0] = srcRow[col * 3 + BCOMP];               dstRow[col * 4 + 1] = srcRow[col * 3 + GCOMP];               dstRow[col * 4 + 2] = srcRow[col * 3 + RCOMP];               dstRow[col * 4 + 3] = 0xff;            }            dstRow += dstRowStride;            srcRow += srcRowStride;         }         dstImage += dstImageStride;      }   }   else if (!ctx->_ImageTransferState &&            !srcPacking->SwapBytes &&	    dstFormat == &_mesa_texformat_argb8888 &&            srcFormat == GL_RGBA &&            (srcType == GL_UNSIGNED_BYTE && littleEndian)) {      int img, row, col;      GLubyte *dstImage = (GLubyte *) dstAddr                        + dstZoffset * dstImageStride                        + dstYoffset * dstRowStride                        + dstXoffset * dstFormat->TexelBytes;      /* For some reason, streaming copies to write-combined regions       * are extremely sensitive to the characteristics of how the       * source data is retrieved.  By reordering the source reads to       * be in-order, the speed of this operation increases by half.       * Strangely the same isn't required for the RGB path, above.       */      for (img = 0; img < srcDepth; img++) {         const GLint srcRowStride = _mesa_image_row_stride(srcPacking,                                                 srcWidth, srcFormat, srcType);         GLubyte *srcRow = (GLubyte *) _mesa_image_address(dims, srcPacking,                  srcAddr, srcWidth, srcHeight, srcFormat, srcType, img, 0, 0);         GLubyte *dstRow = dstImage;         for (row = 0; row < srcHeight; row++) {            for (col = 0; col < srcWidth; col++) {               *(GLuint *)(dstRow + col * 4)  = (srcRow[col * 4 + RCOMP] << 16 |						 srcRow[col * 4 + GCOMP] << 8 |						 srcRow[col * 4 + BCOMP] << 0 |						 srcRow[col * 4 + ACOMP] << 24);            }            dstRow += dstRowStride;            srcRow += srcRowStride;         }         dstImage += dstImageStride;      }   }   else if (!ctx->_ImageTransferState &&            !srcPacking->SwapBytes &&	    dstFormat == &_mesa_texformat_argb8888 &&            srcFormat == GL_RGBA &&            srcType == GL_UNSIGNED_BYTE) {      int img, row, col;      GLubyte *dstImage = (GLubyte *) dstAddr                        + dstZoffset * dstImageStride                        + dstYoffset * dstRowStride                        + dstXoffset * dstFormat->TexelBytes;      for (img = 0; img < srcDepth; img++) {         const GLint srcRowStride = _mesa_image_row_stride(srcPacking,                                                 srcWidth, srcFormat, srcType);         GLubyte *srcRow = (GLubyte *) _mesa_image_address(dims, srcPacking,                  srcAddr, srcWidth, srcHeight, srcFormat, srcType, img, 0, 0);         GLubyte *dstRow = dstImage;         for (row = 0; row < srcHeight; row++) {            for (col = 0; col < srcWidth; col++) {               dstRow[col * 4 + 0] = srcRow[col * 4 + BCOMP];               dstRow[col * 4 + 1] = srcRow[col * 4 + GCOMP];               dstRow[col * 4 + 2] = srcRow[col * 4 + RCOMP];               dstRow[col * 4 + 3] = srcRow[col * 4 + ACOMP];            }            dstRow += dstRowStride;            srcRow += srcRowStride;         }         dstImage += dstImageStride;      }   }   else if (!ctx->_ImageTransferState &&	    !srcPacking->SwapBytes &&	    dstFormat == &_mesa_texformat_argb8888 &&	    srcType == GL_UNSIGNED_BYTE && 	    littleEndian &&	    /* Three texture formats involved: srcFormat,	     * baseInternalFormat and destFormat (GL_RGBA). Only two	     * may differ. _mesa_swizzle_ubyte_image can't handle two	     * propagations at once correctly. */	    (srcFormat == baseInternalFormat ||	     baseInternalFormat == GL_RGBA) &&	    can_swizzle(srcFormat)) {      GLubyte dstmap[4];      /* dstmap - how to swizzle from GL_RGBA to dst format:       */      dstmap[3] = 3;		/* alpha */      dstmap[2] = 0;		/* red */      dstmap[1] = 1;		/* green */      dstmap[0] = 2;		/* blue */       _mesa_swizzle_ubyte_image(ctx, dims,				srcFormat,				dstmap, 4,				dstAddr, dstXoffset, dstYoffset, dstZoffset,				dstRowStride, dstImageStride,				srcWidth, srcHeight, srcDepth, srcAddr,				srcPacking);         }   else {      /* general path */      const GLchan *tempImage = _mesa_make_temp_chan_image(ctx, dims,                                                 baseInternalFormat,                                                 dstFormat->BaseFormat,                                                 srcWidth, srcHeight, srcDepth,                                                 srcFormat, srcType, srcAddr,                                                 srcPacking);      const GLchan *src = tempImage;      GLubyte *dstImage = (GLubyte *) dstAddr                        + dstZoffset * dstImageStride                        + dstYoffset * dstRowStride                        + dstXoffset * dstFormat->TexelBytes;      GLint img, row, col;      if (!tempImage)         return GL_FALSE;      _mesa_adjust_image_for_convolution(ctx, dims, &srcWidth, &srcHeight);      for (img = 0; img < srcDepth; img++) {         GLubyte *dstRow = dstImage;         for (row = 0; row < srcHeight; row++) {            GLuint *dstUI = (GLuint *) dstRow;            if (dstFormat == &_mesa_texformat_argb8888) {               for (col = 0; col < srcWidth; col++) {                  dstUI[col] = PACK_COLOR_8888( CHAN_TO_UBYTE(src[ACOMP]),                                                CHAN_TO_UBYTE(src[RCOMP]),                                                CHAN_TO_UBYTE(src[GCOMP]),                                                CHAN_TO_UBYTE(src[BCOMP]) );                  src += 4;               }            }            else {               for (col = 0; col < srcWidth; col++) {                  dstUI[col] = PACK_COLOR_8888_REV( CHAN_TO_UBYTE(src[ACOMP]),                                                    CHAN_TO_UBYTE(src[RCOMP]),                                                    CHAN_TO_UBYTE(src[GCOMP]),                                                    CHAN_TO_UBYTE(src[BCOMP]) );                  src += 4;               }            }            dstRow += dstRowStride;         }         dstImage += dstImageStride;      }      _mesa_free((void *) tempImage);   }   return GL_TRUE;}GLboolean_mesa_texstore_rgb888(STORE_PARAMS){   const GLuint ui = 1;   const GLubyte littleEndian = *((const GLubyte *) &ui);   ASSERT(dstFormat == &_mesa_texformat_rgb888);   ASSERT(dstFormat->TexelBytes == 3);   if (!ctx->_ImageTransferState &&

⌨️ 快捷键说明

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