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 + -
显示快捷键?