/** * glGetTexImage for color formats (RGBA, RGB, alpha, LA, etc). * Compressed textures are handled here as well. */ static void get_tex_rgba(struct gl_context *ctx, GLuint dimensions, GLenum format, GLenum type, GLvoid *pixels, struct gl_texture_image *texImage) { const GLenum dataType = _mesa_get_format_datatype(texImage->TexFormat); GLbitfield transferOps = 0x0; /* In general, clamping does not apply to glGetTexImage, except when * the returned type of the image can't hold negative values. */ if (type_needs_clamping(type)) { /* the returned image type can't have negative values */ if (dataType == GL_FLOAT || dataType == GL_SIGNED_NORMALIZED || format == GL_LUMINANCE || format == GL_LUMINANCE_ALPHA) { transferOps |= IMAGE_CLAMP_BIT; } } if (_mesa_is_format_compressed(texImage->TexFormat)) { get_tex_rgba_compressed(ctx, dimensions, format, type, pixels, texImage, transferOps); } else { get_tex_rgba_uncompressed(ctx, dimensions, format, type, pixels, texImage, transferOps); } }
/** * glGetTexImage for color formats (RGBA, RGB, alpha, LA, etc). * Compressed textures are handled here as well. */ static void get_tex_rgba(struct gl_context *ctx, GLuint dimensions, GLenum format, GLenum type, GLvoid *pixels, struct gl_texture_image *texImage) { const GLenum dataType = _mesa_get_format_datatype(texImage->TexFormat); GLbitfield transferOps = 0x0; /* In general, clamping does not apply to glGetTexImage, except when * the returned type of the image can't hold negative values. */ if (type_needs_clamping(type)) { /* the returned image type can't have negative values */ if (dataType == GL_FLOAT || dataType == GL_SIGNED_NORMALIZED || format == GL_LUMINANCE || format == GL_LUMINANCE_ALPHA) { transferOps |= IMAGE_CLAMP_BIT; } } /* This applies to RGB, RGBA textures. if the format is either LUMINANCE * or LUMINANCE ALPHA, luminance (L) is computed as L=R+G+B .we need to * clamp the sum to [0,1]. */ else if ((format == GL_LUMINANCE || format == GL_LUMINANCE_ALPHA) && dataType == GL_UNSIGNED_NORMALIZED) { transferOps |= IMAGE_CLAMP_BIT; } get_tex_rgba_uncompressed(ctx, dimensions, format, type, pixels, texImage, transferOps); }