Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2019-05-19 03:56:12 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2019-05-19 15:36:42 +0300
commit3b23b5c638feae0ad6319440771b83a64a1f9ebe (patch)
tree16fbedd83ffa6a02904d3f93576c1de1674a0584 /source/blender/imbuf
parent7c78c20b6bf6f7dd00397c456fb9e2116febfca7 (diff)
Images: don't (un)premultipy non-color data
The previous behavior here was wrong for some specific combinations of settings, non-color RGB channels should never be affected by the alpha channel.
Diffstat (limited to 'source/blender/imbuf')
-rw-r--r--source/blender/imbuf/intern/readimage.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/source/blender/imbuf/intern/readimage.c b/source/blender/imbuf/intern/readimage.c
index e1df5c63093..9297227bc87 100644
--- a/source/blender/imbuf/intern/readimage.c
+++ b/source/blender/imbuf/intern/readimage.c
@@ -49,8 +49,6 @@ static void imb_handle_alpha(ImBuf *ibuf,
char colorspace[IM_MAX_SPACE],
char effective_colorspace[IM_MAX_SPACE])
{
- int alpha_flags;
-
if (colorspace) {
if (ibuf->rect != NULL && ibuf->rect_float == NULL) {
/* byte buffer is never internally converted to some standard space,
@@ -62,6 +60,9 @@ static void imb_handle_alpha(ImBuf *ibuf,
BLI_strncpy(colorspace, effective_colorspace, IM_MAX_SPACE);
}
+ bool is_data = (colorspace && IMB_colormanagement_space_name_is_data(colorspace));
+ int alpha_flags;
+
if (flags & IB_alphamode_detect) {
alpha_flags = ibuf->flags & IB_alphamode_premul;
}
@@ -69,7 +70,10 @@ static void imb_handle_alpha(ImBuf *ibuf,
alpha_flags = flags & IB_alphamode_premul;
}
- if (flags & IB_ignore_alpha) {
+ if (is_data) {
+ /* Don't touch alpha. */
+ }
+ else if (flags & IB_ignore_alpha) {
IMB_rectfill_alpha(ibuf, 1.0f);
}
else {