image.c

来自「mesa-6.5-minigui源码」· C语言 代码 · 共 1,907 行 · 第 1/5 页

C
1,907
字号
                     dst[i*3+1] = FLOAT_TO_UBYTE(rgba[i][GCOMP]);                     dst[i*3+2] = FLOAT_TO_UBYTE(rgba[i][RCOMP]);                  }                  break;               case GL_BGRA:                  for (i=0;i<n;i++) {                     dst[i*4+0] = FLOAT_TO_UBYTE(rgba[i][BCOMP]);                     dst[i*4+1] = FLOAT_TO_UBYTE(rgba[i][GCOMP]);                     dst[i*4+2] = FLOAT_TO_UBYTE(rgba[i][RCOMP]);                     dst[i*4+3] = FLOAT_TO_UBYTE(rgba[i][ACOMP]);                  }                  break;               case GL_ABGR_EXT:                  for (i=0;i<n;i++) {                     dst[i*4+0] = FLOAT_TO_UBYTE(rgba[i][ACOMP]);                     dst[i*4+1] = FLOAT_TO_UBYTE(rgba[i][BCOMP]);                     dst[i*4+2] = FLOAT_TO_UBYTE(rgba[i][GCOMP]);                     dst[i*4+3] = FLOAT_TO_UBYTE(rgba[i][RCOMP]);                  }                  break;               default:                  _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n");            }         }         break;      case GL_BYTE:         {            GLbyte *dst = (GLbyte *) dstAddr;            switch (dstFormat) {               case GL_RED:                  for (i=0;i<n;i++)                     dst[i] = FLOAT_TO_BYTE(rgba[i][RCOMP]);                  break;               case GL_GREEN:                  for (i=0;i<n;i++)                     dst[i] = FLOAT_TO_BYTE(rgba[i][GCOMP]);                  break;               case GL_BLUE:                  for (i=0;i<n;i++)                     dst[i] = FLOAT_TO_BYTE(rgba[i][BCOMP]);                  break;               case GL_ALPHA:                  for (i=0;i<n;i++)                     dst[i] = FLOAT_TO_BYTE(rgba[i][ACOMP]);                  break;               case GL_LUMINANCE:                  for (i=0;i<n;i++)                     dst[i] = FLOAT_TO_BYTE(luminance[i]);                  break;               case GL_LUMINANCE_ALPHA:                  for (i=0;i<n;i++) {                     dst[i*2+0] = FLOAT_TO_BYTE(luminance[i]);                     dst[i*2+1] = FLOAT_TO_BYTE(rgba[i][ACOMP]);                  }                  break;               case GL_RGB:                  for (i=0;i<n;i++) {                     dst[i*3+0] = FLOAT_TO_BYTE(rgba[i][RCOMP]);                     dst[i*3+1] = FLOAT_TO_BYTE(rgba[i][GCOMP]);                     dst[i*3+2] = FLOAT_TO_BYTE(rgba[i][BCOMP]);                  }                  break;               case GL_RGBA:                  for (i=0;i<n;i++) {                     dst[i*4+0] = FLOAT_TO_BYTE(rgba[i][RCOMP]);                     dst[i*4+1] = FLOAT_TO_BYTE(rgba[i][GCOMP]);                     dst[i*4+2] = FLOAT_TO_BYTE(rgba[i][BCOMP]);                     dst[i*4+3] = FLOAT_TO_BYTE(rgba[i][ACOMP]);                  }                  break;               case GL_BGR:                  for (i=0;i<n;i++) {                     dst[i*3+0] = FLOAT_TO_BYTE(rgba[i][BCOMP]);                     dst[i*3+1] = FLOAT_TO_BYTE(rgba[i][GCOMP]);                     dst[i*3+2] = FLOAT_TO_BYTE(rgba[i][RCOMP]);                  }                  break;               case GL_BGRA:                  for (i=0;i<n;i++) {                     dst[i*4+0] = FLOAT_TO_BYTE(rgba[i][BCOMP]);                     dst[i*4+1] = FLOAT_TO_BYTE(rgba[i][GCOMP]);                     dst[i*4+2] = FLOAT_TO_BYTE(rgba[i][RCOMP]);                     dst[i*4+3] = FLOAT_TO_BYTE(rgba[i][ACOMP]);                  }               case GL_ABGR_EXT:                  for (i=0;i<n;i++) {                     dst[i*4+0] = FLOAT_TO_BYTE(rgba[i][ACOMP]);                     dst[i*4+1] = FLOAT_TO_BYTE(rgba[i][BCOMP]);                     dst[i*4+2] = FLOAT_TO_BYTE(rgba[i][GCOMP]);                     dst[i*4+3] = FLOAT_TO_BYTE(rgba[i][RCOMP]);                  }                  break;               default:                  _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n");            }         }         break;      case GL_UNSIGNED_SHORT:         {            GLushort *dst = (GLushort *) dstAddr;            switch (dstFormat) {               case GL_RED:                  for (i=0;i<n;i++)                     CLAMPED_FLOAT_TO_USHORT(dst[i], rgba[i][RCOMP]);                  break;               case GL_GREEN:                  for (i=0;i<n;i++)                     CLAMPED_FLOAT_TO_USHORT(dst[i], rgba[i][GCOMP]);                  break;               case GL_BLUE:                  for (i=0;i<n;i++)                     CLAMPED_FLOAT_TO_USHORT(dst[i], rgba[i][BCOMP]);                  break;               case GL_ALPHA:                  for (i=0;i<n;i++)                     CLAMPED_FLOAT_TO_USHORT(dst[i], rgba[i][ACOMP]);                  break;               case GL_LUMINANCE:                  for (i=0;i<n;i++)                     UNCLAMPED_FLOAT_TO_USHORT(dst[i], luminance[i]);                  break;               case GL_LUMINANCE_ALPHA:                  for (i=0;i<n;i++) {                     UNCLAMPED_FLOAT_TO_USHORT(dst[i*2+0], luminance[i]);                     CLAMPED_FLOAT_TO_USHORT(dst[i*2+1], rgba[i][ACOMP]);                  }                  break;               case GL_RGB:                  for (i=0;i<n;i++) {                     CLAMPED_FLOAT_TO_USHORT(dst[i*3+0], rgba[i][RCOMP]);                     CLAMPED_FLOAT_TO_USHORT(dst[i*3+1], rgba[i][GCOMP]);                     CLAMPED_FLOAT_TO_USHORT(dst[i*3+2], rgba[i][BCOMP]);                  }                  break;               case GL_RGBA:                  for (i=0;i<n;i++) {                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+0], rgba[i][RCOMP]);                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+1], rgba[i][GCOMP]);                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+2], rgba[i][BCOMP]);                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+3], rgba[i][ACOMP]);                  }                  break;               case GL_BGR:                  for (i=0;i<n;i++) {                     CLAMPED_FLOAT_TO_USHORT(dst[i*3+0], rgba[i][BCOMP]);                     CLAMPED_FLOAT_TO_USHORT(dst[i*3+1], rgba[i][GCOMP]);                     CLAMPED_FLOAT_TO_USHORT(dst[i*3+2], rgba[i][RCOMP]);                  }                  break;               case GL_BGRA:                  for (i=0;i<n;i++) {                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+0], rgba[i][BCOMP]);                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+1], rgba[i][GCOMP]);                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+2], rgba[i][RCOMP]);                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+3], rgba[i][ACOMP]);                  }                  break;               case GL_ABGR_EXT:                  for (i=0;i<n;i++) {                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+0], rgba[i][ACOMP]);                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+1], rgba[i][BCOMP]);                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+2], rgba[i][GCOMP]);                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+3], rgba[i][RCOMP]);                  }                  break;               default:                  _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n");            }            if (dstPacking->SwapBytes) {               _mesa_swap2( (GLushort *) dst, n * comps);            }         }         break;      case GL_SHORT:         {            GLshort *dst = (GLshort *) dstAddr;            switch (dstFormat) {               case GL_RED:                  for (i=0;i<n;i++)                     dst[i] = FLOAT_TO_SHORT(rgba[i][RCOMP]);                  break;               case GL_GREEN:                  for (i=0;i<n;i++)                     dst[i] = FLOAT_TO_SHORT(rgba[i][GCOMP]);                  break;               case GL_BLUE:                  for (i=0;i<n;i++)                     dst[i] = FLOAT_TO_SHORT(rgba[i][BCOMP]);                  break;               case GL_ALPHA:                  for (i=0;i<n;i++)                     dst[i] = FLOAT_TO_SHORT(rgba[i][ACOMP]);                  break;               case GL_LUMINANCE:                  for (i=0;i<n;i++)                     dst[i] = FLOAT_TO_SHORT(luminance[i]);                  break;               case GL_LUMINANCE_ALPHA:                  for (i=0;i<n;i++) {                     dst[i*2+0] = FLOAT_TO_SHORT(luminance[i]);                     dst[i*2+1] = FLOAT_TO_SHORT(rgba[i][ACOMP]);                  }                  break;               case GL_RGB:                  for (i=0;i<n;i++) {                     dst[i*3+0] = FLOAT_TO_SHORT(rgba[i][RCOMP]);                     dst[i*3+1] = FLOAT_TO_SHORT(rgba[i][GCOMP]);                     dst[i*3+2] = FLOAT_TO_SHORT(rgba[i][BCOMP]);                  }                  break;               case GL_RGBA:                  for (i=0;i<n;i++) {                     dst[i*4+0] = FLOAT_TO_SHORT(rgba[i][RCOMP]);                     dst[i*4+1] = FLOAT_TO_SHORT(rgba[i][GCOMP]);                     dst[i*4+2] = FLOAT_TO_SHORT(rgba[i][BCOMP]);                     dst[i*4+3] = FLOAT_TO_SHORT(rgba[i][ACOMP]);                  }                  break;               case GL_BGR:                  for (i=0;i<n;i++) {                     dst[i*3+0] = FLOAT_TO_SHORT(rgba[i][BCOMP]);                     dst[i*3+1] = FLOAT_TO_SHORT(rgba[i][GCOMP]);                     dst[i*3+2] = FLOAT_TO_SHORT(rgba[i][RCOMP]);                  }                  break;               case GL_BGRA:                  for (i=0;i<n;i++) {                     dst[i*4+0] = FLOAT_TO_SHORT(rgba[i][BCOMP]);                     dst[i*4+1] = FLOAT_TO_SHORT(rgba[i][GCOMP]);                     dst[i*4+2] = FLOAT_TO_SHORT(rgba[i][RCOMP]);                     dst[i*4+3] = FLOAT_TO_SHORT(rgba[i][ACOMP]);                  }               case GL_ABGR_EXT:                  for (i=0;i<n;i++) {                     dst[i*4+0] = FLOAT_TO_SHORT(rgba[i][ACOMP]);                     dst[i*4+1] = FLOAT_TO_SHORT(rgba[i][BCOMP]);                     dst[i*4+2] = FLOAT_TO_SHORT(rgba[i][GCOMP]);                     dst[i*4+3] = FLOAT_TO_SHORT(rgba[i][RCOMP]);                  }                  break;               default:                  _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n");            }            if (dstPacking->SwapBytes) {               _mesa_swap2( (GLushort *) dst, n * comps );            }         }         break;      case GL_UNSIGNED_INT:         {            GLuint *dst = (GLuint *) dstAddr;            switch (dstFormat) {               case GL_RED:                  for (i=0;i<n;i++)                     dst[i] = FLOAT_TO_UINT(rgba[i][RCOMP]);                  break;               case GL_GREEN:                  for (i=0;i<n;i++)                     dst[i] = FLOAT_TO_UINT(rgba[i][GCOMP]);                  break;               case GL_BLUE:                  for (i=0;i<n;i++)                     dst[i] = FLOAT_TO_UINT(rgba[i][BCOMP]);                  break;               case GL_ALPHA:                  for (i=0;i<n;i++)                     dst[i] = FLOAT_TO_UINT(rgba[i][ACOMP]);                  break;               case GL_LUMINANCE:                  for (i=0;i<n;i++)                     dst[i] = FLOAT_TO_UINT(luminance[i]);                  break;               case GL_LUMINANCE_ALPHA:                  for (i=0;i<n;i++) {                     dst[i*2+0] = FLOAT_TO_UINT(luminance[i]);                     dst[i*2+1] = FLOAT_TO_UINT(rgba[i][ACOMP]);                  }                  break;               case GL_RGB:                  for (i=0;i<n;i++) {                     dst[i*3+0] = FLOAT_TO_UINT(rgba[i][RCOMP]);                     dst[i*3+1] = FLOAT_TO_UINT(rgba[i][GCOMP]);                     dst[i*3+2] = FLOAT_TO_UINT(rgba[i][BCOMP]);                  }                  break;               case GL_RGBA:                  for (i=0;i<n;i++) {                     dst[i*4+0] = FLOAT_TO_UINT(rgba[i][RCOMP]);                     dst[i*4+1] = FLOAT_TO_UINT(rgba[i][GCOMP]);                     dst[i*4+2] = FLOAT_TO_UINT(rgba[i][BCOMP]);                     dst[i*4+3] = FLOAT_TO_UINT(rgba[i][ACOMP]);                  }                  break;               case GL_BGR:                  for (i=0;i<n;i++) {                     dst[i*3+0] = FLOAT_TO_UINT(rgba[i][BCOMP]);                     dst[i*3+1] = FLOAT_TO_UINT(rgba[i][GCOMP]);                     dst[i*3+2] = FLOAT_TO_UINT(rgba[i][RCOMP]);                  }                  break;               case GL_BGRA:                  for (i=0;i<n;i++) {                     dst[i*4+0] = FLOAT_TO_UINT(rgba[i][BCOMP]);                     dst[i*4+1] = FLOAT_TO_UINT(rgba[i][GCOMP]);                     dst[i*4+2] = FLOAT_TO_UINT(rgba[i][RCOMP]);                     dst[i*4+3] = FLOAT_TO_UINT(rgba[i][ACOMP]);                  }                  break;               case GL_ABGR_EXT:                  for (i=0;i<n;i++) {                     dst[i*4+0] = FLOAT_TO_UINT(rgba[i][ACOMP]);                     dst[i*4+1] = FLOAT_TO_UINT(rgba[i][BCOMP]);                     dst[i*4+2] = FLOAT_TO_UINT(rgba[i][GCOMP]);                     dst[i*4+3] = FLOAT_TO_UINT(rgba[i][RCOMP]);                  }                  break;               default:                  _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n");            }            if (dstPacking->SwapBytes) {               _mesa_swap4( (GLuint *) dst, n * comps );            }         }         break;      case GL_INT:         {            GLint *dst = (GLint *) dstAddr;            switch (dstFormat) {               case GL_RED:                  for (i=0;i<n;i++)                     dst[i] = FLOAT_TO_INT(rgba[i][RCOMP]);                  break;               case GL_GREEN:                  for (i=0;i<n;i++)                     dst[i] = FLOAT_TO_INT(rgba[i][GCOMP]);                  break;               case GL_BLUE:                  for (i=0;i<n;i++)                     dst[i] = FLOAT_TO_INT(rgba[i][BCOMP]);                  break;               case GL_ALPHA:                  for (i=0;i<n;i++)                     dst[i] = FLOAT_TO_INT(rgba[i][ACOMP]);                  break;               case GL_LUMINANCE:                  for (i=0;i<n;i++)                     dst[i] = FLOAT_TO_INT(luminance[i]);                  break;               case GL_LUMINANCE_ALPHA:                  for (i=0;i<n;i++) {                     dst[i*2+0] = FLOAT_TO_INT(luminance[i]);                     dst[i*2+1] = FLOAT_TO_INT(rgba[i][ACOMP]);                  }                  break;               case GL_RGB:                  for (i=0;i<n;i++) {                     dst[i*3+0] = FLOAT_TO_INT(rgba[i][RCOMP]);                     dst[i*3+1] = FLOAT_TO_INT(rgba[i][GCOMP]);                     dst[i*3+2] = FLOAT_TO_INT(rgba[i][BCOMP]);                  }                  break;               case GL_RGBA:                  for (i=0;i<n;i++) {                     dst[i*4+0] = FLOAT_TO_INT(rgba[i][RCOMP]);                     dst[i*4+1] = FLOAT_TO_INT(rgba[i][GCOMP]);                     dst[i*4+2] = FLOAT_TO_INT(rgba[i][BCOMP]);                     dst[i*4+3] = FLOAT_TO_INT(rgba[i][ACOMP]);                  }                  break;               case GL_BGR:                  for (i=0;i<n;i++) {                     dst[i*3+0] = FLOAT_TO_INT(rgba[i][BCOMP]);                     dst[i*3+1] = FLOAT_TO_INT(rgba[i][GCOMP]);                     dst[i*3+2] = FLOAT_TO_INT(rgba[i][RCOMP]);                  }                  break;               case GL_BGRA:                  for (i=0;i<n;i++) {                     dst[i*4+0] = FLOAT_TO_INT(rgba[i][BCOMP]);                     dst[i*4+1] = FLOAT_TO_INT(rgba[i][GCOMP]);                     dst[i*4+2] = FLOAT_TO_INT(rgba[i][RCOMP]);                     dst[i*4+3] = FLOAT_TO_INT(rgba[i][ACOMP]);

⌨️ 快捷键说明

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