mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-29 05:10:23 +01:00
mesa: convert _mesa_unpack_color_span_chan() to ubyte
This commit is contained in:
parent
ae670b58d4
commit
e1d703bec5
3 changed files with 53 additions and 55 deletions
|
|
@ -3437,7 +3437,7 @@ extract_uint_rgba(GLuint n, GLuint rgba[][4],
|
|||
/*
|
||||
* Unpack a row of color image data from a client buffer according to
|
||||
* the pixel unpacking parameters.
|
||||
* Return GLchan values in the specified dest image format.
|
||||
* Return GLubyte values in the specified dest image format.
|
||||
* This is used by glDrawPixels and glTexImage?D().
|
||||
* \param ctx - the context
|
||||
* n - number of pixels in the span
|
||||
|
|
@ -3452,8 +3452,8 @@ extract_uint_rgba(GLuint n, GLuint rgba[][4],
|
|||
* XXX perhaps expand this to process whole images someday.
|
||||
*/
|
||||
void
|
||||
_mesa_unpack_color_span_chan( struct gl_context *ctx,
|
||||
GLuint n, GLenum dstFormat, GLchan dest[],
|
||||
_mesa_unpack_color_span_ubyte(struct gl_context *ctx,
|
||||
GLuint n, GLenum dstFormat, GLubyte dest[],
|
||||
GLenum srcFormat, GLenum srcType,
|
||||
const GLvoid *source,
|
||||
const struct gl_pixelstore_attrib *srcPacking,
|
||||
|
|
@ -3517,21 +3517,21 @@ _mesa_unpack_color_span_chan( struct gl_context *ctx,
|
|||
|
||||
/* Try simple cases first */
|
||||
if (transferOps == 0) {
|
||||
if (srcType == CHAN_TYPE) {
|
||||
if (srcType == GL_UNSIGNED_BYTE) {
|
||||
if (dstFormat == GL_RGBA) {
|
||||
if (srcFormat == GL_RGBA) {
|
||||
memcpy( dest, source, n * 4 * sizeof(GLchan) );
|
||||
memcpy( dest, source, n * 4 * sizeof(GLubyte) );
|
||||
return;
|
||||
}
|
||||
else if (srcFormat == GL_RGB) {
|
||||
GLuint i;
|
||||
const GLchan *src = (const GLchan *) source;
|
||||
GLchan *dst = dest;
|
||||
const GLubyte *src = (const GLubyte *) source;
|
||||
GLubyte *dst = dest;
|
||||
for (i = 0; i < n; i++) {
|
||||
dst[0] = src[0];
|
||||
dst[1] = src[1];
|
||||
dst[2] = src[2];
|
||||
dst[3] = CHAN_MAX;
|
||||
dst[3] = 255;
|
||||
src += 3;
|
||||
dst += 4;
|
||||
}
|
||||
|
|
@ -3540,13 +3540,13 @@ _mesa_unpack_color_span_chan( struct gl_context *ctx,
|
|||
}
|
||||
else if (dstFormat == GL_RGB) {
|
||||
if (srcFormat == GL_RGB) {
|
||||
memcpy( dest, source, n * 3 * sizeof(GLchan) );
|
||||
memcpy( dest, source, n * 3 * sizeof(GLubyte) );
|
||||
return;
|
||||
}
|
||||
else if (srcFormat == GL_RGBA) {
|
||||
GLuint i;
|
||||
const GLchan *src = (const GLchan *) source;
|
||||
GLchan *dst = dest;
|
||||
const GLubyte *src = (const GLubyte *) source;
|
||||
GLubyte *dst = dest;
|
||||
for (i = 0; i < n; i++) {
|
||||
dst[0] = src[0];
|
||||
dst[1] = src[1];
|
||||
|
|
@ -3560,7 +3560,7 @@ _mesa_unpack_color_span_chan( struct gl_context *ctx,
|
|||
else if (dstFormat == srcFormat) {
|
||||
GLint comps = _mesa_components_in_format(srcFormat);
|
||||
assert(comps > 0);
|
||||
memcpy( dest, source, n * comps * sizeof(GLchan) );
|
||||
memcpy( dest, source, n * comps * sizeof(GLubyte) );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -3573,12 +3573,12 @@ _mesa_unpack_color_span_chan( struct gl_context *ctx,
|
|||
if (srcFormat == GL_RGB) {
|
||||
GLuint i;
|
||||
const GLubyte *src = (const GLubyte *) source;
|
||||
GLchan *dst = dest;
|
||||
GLubyte *dst = dest;
|
||||
for (i = 0; i < n; i++) {
|
||||
dst[0] = UBYTE_TO_CHAN(src[0]);
|
||||
dst[1] = UBYTE_TO_CHAN(src[1]);
|
||||
dst[2] = UBYTE_TO_CHAN(src[2]);
|
||||
dst[3] = CHAN_MAX;
|
||||
dst[0] = src[0];
|
||||
dst[1] = src[1];
|
||||
dst[2] = src[2];
|
||||
dst[3] = 255;
|
||||
src += 3;
|
||||
dst += 4;
|
||||
}
|
||||
|
|
@ -3587,12 +3587,12 @@ _mesa_unpack_color_span_chan( struct gl_context *ctx,
|
|||
else if (srcFormat == GL_RGBA) {
|
||||
GLuint i;
|
||||
const GLubyte *src = (const GLubyte *) source;
|
||||
GLchan *dst = dest;
|
||||
GLubyte *dst = dest;
|
||||
for (i = 0; i < n; i++) {
|
||||
dst[0] = UBYTE_TO_CHAN(src[0]);
|
||||
dst[1] = UBYTE_TO_CHAN(src[1]);
|
||||
dst[2] = UBYTE_TO_CHAN(src[2]);
|
||||
dst[3] = UBYTE_TO_CHAN(src[3]);
|
||||
dst[0] = src[0];
|
||||
dst[1] = src[1];
|
||||
dst[2] = src[2];
|
||||
dst[3] = src[3];
|
||||
src += 4;
|
||||
dst += 4;
|
||||
}
|
||||
|
|
@ -3603,11 +3603,11 @@ _mesa_unpack_color_span_chan( struct gl_context *ctx,
|
|||
if (srcFormat == GL_RGB) {
|
||||
GLuint i;
|
||||
const GLubyte *src = (const GLubyte *) source;
|
||||
GLchan *dst = dest;
|
||||
GLubyte *dst = dest;
|
||||
for (i = 0; i < n; i++) {
|
||||
dst[0] = UBYTE_TO_CHAN(src[0]);
|
||||
dst[1] = UBYTE_TO_CHAN(src[1]);
|
||||
dst[2] = UBYTE_TO_CHAN(src[2]);
|
||||
dst[0] = src[0];
|
||||
dst[1] = src[1];
|
||||
dst[2] = src[2];
|
||||
src += 3;
|
||||
dst += 3;
|
||||
}
|
||||
|
|
@ -3616,11 +3616,11 @@ _mesa_unpack_color_span_chan( struct gl_context *ctx,
|
|||
else if (srcFormat == GL_RGBA) {
|
||||
GLuint i;
|
||||
const GLubyte *src = (const GLubyte *) source;
|
||||
GLchan *dst = dest;
|
||||
GLubyte *dst = dest;
|
||||
for (i = 0; i < n; i++) {
|
||||
dst[0] = UBYTE_TO_CHAN(src[0]);
|
||||
dst[1] = UBYTE_TO_CHAN(src[1]);
|
||||
dst[2] = UBYTE_TO_CHAN(src[2]);
|
||||
dst[0] = src[0];
|
||||
dst[1] = src[1];
|
||||
dst[2] = src[2];
|
||||
src += 4;
|
||||
dst += 3;
|
||||
}
|
||||
|
|
@ -3679,10 +3679,8 @@ _mesa_unpack_color_span_chan( struct gl_context *ctx,
|
|||
srcPacking->SwapBytes);
|
||||
}
|
||||
|
||||
/* Need to clamp if returning GLubytes or GLushorts */
|
||||
#if CHAN_TYPE != GL_FLOAT
|
||||
/* Need to clamp if returning GLubytes */
|
||||
transferOps |= IMAGE_CLAMP_BIT;
|
||||
#endif
|
||||
|
||||
if (transferOps) {
|
||||
_mesa_apply_rgba_transfer_ops(ctx, transferOps, n, rgba);
|
||||
|
|
@ -3691,61 +3689,61 @@ _mesa_unpack_color_span_chan( struct gl_context *ctx,
|
|||
get_component_indexes(dstFormat,
|
||||
&rDst, &gDst, &bDst, &aDst, &lDst, &iDst);
|
||||
|
||||
/* Now return the GLchan data in the requested dstFormat */
|
||||
/* Now return the GLubyte data in the requested dstFormat */
|
||||
if (rDst >= 0) {
|
||||
GLchan *dst = dest;
|
||||
GLubyte *dst = dest;
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
CLAMPED_FLOAT_TO_CHAN(dst[rDst], rgba[i][RCOMP]);
|
||||
CLAMPED_FLOAT_TO_UBYTE(dst[rDst], rgba[i][RCOMP]);
|
||||
dst += dstComponents;
|
||||
}
|
||||
}
|
||||
|
||||
if (gDst >= 0) {
|
||||
GLchan *dst = dest;
|
||||
GLubyte *dst = dest;
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
CLAMPED_FLOAT_TO_CHAN(dst[gDst], rgba[i][GCOMP]);
|
||||
CLAMPED_FLOAT_TO_UBYTE(dst[gDst], rgba[i][GCOMP]);
|
||||
dst += dstComponents;
|
||||
}
|
||||
}
|
||||
|
||||
if (bDst >= 0) {
|
||||
GLchan *dst = dest;
|
||||
GLubyte *dst = dest;
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
CLAMPED_FLOAT_TO_CHAN(dst[bDst], rgba[i][BCOMP]);
|
||||
CLAMPED_FLOAT_TO_UBYTE(dst[bDst], rgba[i][BCOMP]);
|
||||
dst += dstComponents;
|
||||
}
|
||||
}
|
||||
|
||||
if (aDst >= 0) {
|
||||
GLchan *dst = dest;
|
||||
GLubyte *dst = dest;
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
CLAMPED_FLOAT_TO_CHAN(dst[aDst], rgba[i][ACOMP]);
|
||||
CLAMPED_FLOAT_TO_UBYTE(dst[aDst], rgba[i][ACOMP]);
|
||||
dst += dstComponents;
|
||||
}
|
||||
}
|
||||
|
||||
if (iDst >= 0) {
|
||||
GLchan *dst = dest;
|
||||
GLubyte *dst = dest;
|
||||
GLuint i;
|
||||
assert(iDst == 0);
|
||||
assert(dstComponents == 1);
|
||||
for (i = 0; i < n; i++) {
|
||||
/* Intensity comes from red channel */
|
||||
CLAMPED_FLOAT_TO_CHAN(dst[i], rgba[i][RCOMP]);
|
||||
CLAMPED_FLOAT_TO_UBYTE(dst[i], rgba[i][RCOMP]);
|
||||
}
|
||||
}
|
||||
|
||||
if (lDst >= 0) {
|
||||
GLchan *dst = dest;
|
||||
GLubyte *dst = dest;
|
||||
GLuint i;
|
||||
assert(lDst == 0);
|
||||
for (i = 0; i < n; i++) {
|
||||
/* Luminance comes from red channel */
|
||||
CLAMPED_FLOAT_TO_CHAN(dst[0], rgba[i][RCOMP]);
|
||||
CLAMPED_FLOAT_TO_UBYTE(dst[0], rgba[i][RCOMP]);
|
||||
dst += dstComponents;
|
||||
}
|
||||
}
|
||||
|
|
@ -3756,8 +3754,8 @@ _mesa_unpack_color_span_chan( struct gl_context *ctx,
|
|||
|
||||
|
||||
/**
|
||||
* Same as _mesa_unpack_color_span_chan(), but return GLfloat data
|
||||
* instead of GLchan.
|
||||
* Same as _mesa_unpack_color_span_ubyte(), but return GLfloat data
|
||||
* instead of GLubyte.
|
||||
*/
|
||||
void
|
||||
_mesa_unpack_color_span_float( struct gl_context *ctx,
|
||||
|
|
@ -3954,8 +3952,8 @@ _mesa_unpack_color_span_float( struct gl_context *ctx,
|
|||
|
||||
|
||||
/**
|
||||
* Same as _mesa_unpack_color_span_chan(), but return GLuint data
|
||||
* instead of GLchan.
|
||||
* Same as _mesa_unpack_color_span_ubyte(), but return GLuint data
|
||||
* instead of GLubyte.
|
||||
* No pixel transfer ops are applied.
|
||||
*/
|
||||
void
|
||||
|
|
|
|||
|
|
@ -58,8 +58,8 @@ _mesa_pack_rgba_span_float(struct gl_context *ctx, GLuint n,
|
|||
|
||||
|
||||
extern void
|
||||
_mesa_unpack_color_span_chan(struct gl_context *ctx,
|
||||
GLuint n, GLenum dstFormat, GLchan dest[],
|
||||
_mesa_unpack_color_span_ubyte(struct gl_context *ctx,
|
||||
GLuint n, GLenum dstFormat, GLubyte dest[],
|
||||
GLenum srcFormat, GLenum srcType,
|
||||
const GLvoid *source,
|
||||
const struct gl_pixelstore_attrib *srcPacking,
|
||||
|
|
|
|||
|
|
@ -604,9 +604,9 @@ _mesa_make_temp_ubyte_image(struct gl_context *ctx, GLuint dims,
|
|||
srcFormat, srcType,
|
||||
img, 0, 0);
|
||||
for (row = 0; row < srcHeight; row++) {
|
||||
_mesa_unpack_color_span_chan(ctx, srcWidth, logicalBaseFormat, dst,
|
||||
srcFormat, srcType, src, srcPacking,
|
||||
transferOps);
|
||||
_mesa_unpack_color_span_ubyte(ctx, srcWidth, logicalBaseFormat, dst,
|
||||
srcFormat, srcType, src, srcPacking,
|
||||
transferOps);
|
||||
dst += srcWidth * components;
|
||||
src += srcStride;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue