📄 image.c
字号:
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"); } } 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]); } break; case GL_ABGR_EXT: for (i=0;i<n;i++) { dst[i*4+0] = FLOAT_TO_INT(rgba[i][ACOMP]); dst[i*4+1] = FLOAT_TO_INT(rgba[i][BCOMP]); dst[i*4+2] = FLOAT_TO_INT(rgba[i][GCOMP]); dst[i*4+3] = FLOAT_TO_INT(rgba[i][RCOMP]); } break; default: _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n"); } } break; case GL_FLOAT: { GLfloat *dst = (GLfloat *) dstAddr; switch (dstFormat) { case GL_RED: for (i=0;i<n;i++) dst[i] = rgba[i][RCOMP]; break; case GL_GREEN: for (i=0;i<n;i++) dst[i] = rgba[i][GCOMP]; break; case GL_BLUE: for (i=0;i<n;i++) dst[i] = rgba[i][BCOMP]; break; case GL_ALPHA: for (i=0;i<n;i++) dst[i] = rgba[i][ACOMP]; break; case GL_LUMINANCE: for (i=0;i<n;i++) dst[i] = luminance[i]; break; case GL_LUMINANCE_ALPHA: for (i=0;i<n;i++) { dst[i*2+0] = luminance[i]; dst[i*2+1] = rgba[i][ACOMP]; } break; case GL_RGB: for (i=0;i<n;i++) { dst[i*3+0] = rgba[i][RCOMP]; dst[i*3+1] = rgba[i][GCOMP]; dst[i*3+2] = rgba[i][BCOMP]; } break; case GL_RGBA: for (i=0;i<n;i++) { dst[i*4+0] = rgba[i][RCOMP]; dst[i*4+1] = rgba[i][GCOMP]; dst[i*4+2] = rgba[i][BCOMP]; dst[i*4+3] = rgba[i][ACOMP]; } break; case GL_BGR: for (i=0;i<n;i++) { dst[i*3+0] = rgba[i][BCOMP]; dst[i*3+1] = rgba[i][GCOMP]; dst[i*3+2] = rgba[i][RCOMP]; } break; case GL_BGRA: for (i=0;i<n;i++) { dst[i*4+0] = rgba[i][BCOMP]; dst[i*4+1] = rgba[i][GCOMP]; dst[i*4+2] = rgba[i][RCOMP]; dst[i*4+3] = rgba[i][ACOMP]; } break; case GL_ABGR_EXT: for (i=0;i<n;i++) { dst[i*4+0] = rgba[i][ACOMP]; dst[i*4+1] = rgba[i][BCOMP]; dst[i*4+2] = rgba[i][GCOMP]; dst[i*4+3] = rgba[i][RCOMP]; } break; default: _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n"); } } break; case GL_HALF_FLOAT_ARB: { GLhalfARB *dst = (GLhalfARB *) dstAddr; switch (dstFormat) { case GL_RED: for (i=0;i<n;i++) dst[i] = _mesa_float_to_half(rgba[i][RCOMP]); break; case GL_GREEN: for (i=0;i<n;i++) dst[i] = _mesa_float_to_half(rgba[i][GCOMP]); break; case GL_BLUE: for (i=0;i<n;i++) dst[i] = _mesa_float_to_half(rgba[i][BCOMP]); break; case GL_ALPHA: for (i=0;i<n;i++) dst[i] = _mesa_float_to_half(rgba[i][ACOMP]); break; case GL_LUMINANCE: for (i=0;i<n;i++) dst[i] = _mesa_float_to_half(luminance[i]); break; case GL_LUMINANCE_ALPHA: for (i=0;i<n;i++) { dst[i*2+0] = _mesa_float_to_half(luminance[i]); dst[i*2+1] = _mesa_float_to_half(rgba[i][ACOMP]); } break; case GL_RGB: for (i=0;i<n;i++) { dst[i*3+0] = _mesa_float_to_half(rgba[i][RCOMP]); dst[i*3+1] = _mesa_float_to_half(rgba[i][GCOMP]); dst[i*3+2] = _mesa_float_to_half(rgba[i][BCOMP]); } break; case GL_RGBA: for (i=0;i<n;i++) { dst[i*4+0] = _mesa_float_to_half(rgba[i][RCOMP]); dst[i*4+1] = _mesa_float_to_half(rgba[i][GCOMP]); dst[i*4+2] = _mesa_float_to_half(rgba[i][BCOMP]); dst[i*4+3] = _mesa_float_to_half(rgba[i][ACOMP]); } break; case GL_BGR: for (i=0;i<n;i++) { dst[i*3+0] = _mesa_float_to_half(rgba[i][BCOMP]); dst[i*3+1] = _mesa_float_to_half(rgba[i][GCOMP]); dst[i*3+2] = _mesa_float_to_half(rgba[i][RCOMP]); } break; case GL_BGRA: for (i=0;i<n;i++) { dst[i*4+0] = _mesa_float_to_half(rgba[i][BCOMP]); dst[i*4+1] = _mesa_float_to_half(rgba[i][GCOMP]); dst[i*4+2] = _mesa_float_to_half(rgba[i][RCOMP]); dst[i*4+3] = _mesa_float_to_half(rgba[i][ACOMP]); } break; case GL_ABGR_EXT: for (i=0;i<n;i++) { dst[i*4+0] = _mesa_float_to_half(rgba[i][ACOMP]); dst[i*4+1] = _mesa_float_to_half(rgba[i][BCOMP]); dst[i*4+2] = _mesa_float_to_half(rgba[i][GCOMP]); dst[i*4+3] = _mesa_float_to_half(rgba[i][RCOMP]); } break; default: _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n"); } } break; case GL_UNSIGNED_BYTE_3_3_2: if (dstFormat == GL_RGB) { GLubyte *dst = (GLubyte *) dstAddr; for (i=0;i<n;i++) { dst[i] = (((GLint) (rgba[i][RCOMP] * 7.0F)) << 5) | (((GLint) (rgba[i][GCOMP] * 7.0F)) << 2) | (((GLint) (rgba[i][BCOMP] * 3.0F)) ); } } break; case GL_UNSIGNED_BYTE_2_3_3_REV: if (dstFormat == GL_RGB) { GLubyte *dst = (GLubyte *) dstAddr; for (i=0;i<n;i++) { dst[i] = (((GLint) (rgba[i][RCOMP] * 7.0F)) ) | (((GLint) (rgba[i][GCOMP] * 7.0F)) << 3) | (((GLint) (rgba[i][BCOMP] * 3.0F)) << 6); } } break; case GL_UNSIGNED_SHORT_5_6_5: if (dstFormat == GL_RGB) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { dst[i] = (((GLint) (rgba[i][RCOMP] * 31.0F)) << 11) | (((GLint) (rgba[i][GCOMP] * 63.0F)) << 5) | (((GLint) (rgba[i][BCOMP] * 31.0F)) ); } } break; case GL_UNSIGNED_SHORT_5_6_5_REV: if (dstFormat == GL_RGB) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { dst[i] = (((GLint) (rgba[i][RCOMP] * 31.0F)) ) | (((GLint) (rgba[i][GCOMP] * 63.0F)) << 5) | (((GLint) (rgba[i][BCOMP] * 31.0F)) << 11); } } break; case GL_UNSIGNED_SHORT_4_4_4_4: if (dstFormat == GL_RGBA) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { dst[i] = (((GLint) (rgba[i][RCOMP] * 15.0F)) << 12) | (((GLint) (rgba[i][GCOMP] * 15.0F)) << 8) | (((GLint) (rgba[i][BCOMP] * 15.0F)) << 4) | (((GLint) (rgba[i][ACOMP] * 15.0F)) ); } } else if (dstFormat == GL_BGRA) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { dst[i] = (((GLint) (rgba[i][BCOMP] * 15.0F)) << 12) | (((GLint) (rgba[i][GCOMP] * 15.0F)) << 8) | (((GLint) (rgba[i][RCOMP] * 15.0F)) << 4) | (((GLint) (rgba[i][ACOMP] * 15.0F)) ); } } else if (dstFormat == GL_ABGR_EXT) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { dst[i] = (((GLint) (rgba[i][ACOMP] * 15.0F)) << 12) | (((GLint) (rgba[i][BCOMP] * 15.0F)) << 8) | (((GLint) (rgba[i][GCOMP] * 15.0F)) << 4) | (((GLint) (rgba[i][RCOMP] * 15.0F)) ); } } break; case GL_UNSIGNED_SHORT_4_4_4_4_REV: if (dstFormat == GL_RGBA) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { dst[i] = (((GLint) (rgba[i][RCOMP] * 15.0F)) ) | (((GLint) (rgba[i][GCOMP] * 15.0F)) << 4) | (((GLint) (rgba[i][BCOMP] * 15.0F)) << 8) | (((GLint) (rgba[i][ACOMP] * 15.0F)) << 12); } } else if (dstFormat == GL_BGRA) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { dst[i] = (((GLint) (rgba[i][BCOMP] * 15.0F)) ) | (((GLint) (rgba[i][GCOMP] * 15.0F)) << 4) | (((GLint) (rgba[i][RCOMP] * 15.0F)) << 8) | (((GLint) (rgba[i][ACOMP] * 15.0F)) << 12); } } else if (dstFormat == GL_ABGR_EXT) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { dst[i] = (((GLint) (rgba[i][ACOMP] * 15.0F)) ) | (((GLint) (rgba[i][BCOMP] * 15.0F)) << 4) | (((GLint) (rgba[i][GCOMP] * 15.0F)) << 8) | (((GLint) (rgba[i][RCOMP] * 15.0F)) << 12); } } break; case GL_UNSIGNED_SHORT_5_5_5_1: if (dstFormat == GL_RGBA) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { dst[i] = (((GLint) (rgba[i][RCOMP] * 31.0F)) << 11) | (((GLint) (rgba[i][GCOMP] * 31.0F)) << 6) | (((GLint) (rgba[i][BCOMP] * 31.0F)) << 1) | (((GLint) (rgba[i][ACOMP] * 1.0F)) ); } } else if (dstFormat == GL_BGRA) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { dst[i] = (((GLint) (rgba[i][BCOMP] * 31.0F)) << 11) | (((GLint) (rgba[i][GCOMP] * 31.0F)) << 6) | (((GLint) (rgba[i][RCOMP] * 31.0F)) << 1) | (((GLint) (rgba[i][ACOMP] * 1.0F)) ); } } else if (dstFormat == GL_ABGR_EXT) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { dst[i] = (((GLint) (rgba[i][ACOMP] * 31.0F)) << 11) | (((GLint) (rgba[i][BCOMP] * 31.0F)) << 6) | (((GLint) (rgba[i][GCOMP] * 31.0F)) << 1) | (((GLint) (rgba[i][RCOMP] * 1.0F)) ); } } break; case GL_UNSIGNED_SHORT_1_5_5_5_REV: if (dstFormat == GL_RGBA) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { dst[i] = (((GLint) (rgba[i][RCOMP] * 31.0F)) ) | (((GLint) (rgba[i][GCOMP] * 31.0F)) << 5) | (((GLint) (rgba[i][BCOMP] * 31.0F)) << 10) | (((GLint) (rgba[i][ACOMP] * 1.0F)) << 15); } } else if (dstFormat == GL_BGRA) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { dst[i] = (((GLint) (rgba[i][BCOMP] * 31.0F)) ) | (((GLint) (rgba[i][GCOMP] * 31.0F)) << 5) | (((GLint) (rgba[i][RCOMP] * 31.0F)) << 10) | (((GLint) (rgba[i][ACOMP] * 1.0F)) << 15); } } else if (dstFormat == GL_ABGR_EXT) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { d
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -