Fix wrong alpha for scene linear byte images during texture painting
Make the update logic consistent with the case where the initial texture is created. Also fixes a wrong assert. Thanks Clément for spotting this.
This commit is contained in:
@@ -737,11 +737,11 @@ static void gpu_texture_update_from_ibuf(
|
||||
}
|
||||
else {
|
||||
/* Byte image is in original colorspace from the file, and may need conversion. */
|
||||
if (IMB_colormanagement_space_is_data(ibuf->rect_colorspace) ||
|
||||
IMB_colormanagement_space_is_scene_linear(ibuf->rect_colorspace)) {
|
||||
if (IMB_colormanagement_space_is_data(ibuf->rect_colorspace)) {
|
||||
/* Non-color data, just store buffer as is. */
|
||||
}
|
||||
else if (IMB_colormanagement_space_is_srgb(ibuf->rect_colorspace)) {
|
||||
else if (IMB_colormanagement_space_is_srgb(ibuf->rect_colorspace) ||
|
||||
IMB_colormanagement_space_is_scene_linear(ibuf->rect_colorspace)) {
|
||||
/* sRGB or scene linear, store as byte texture that the GPU can decode directly. */
|
||||
rect = (uchar *)MEM_mallocN(sizeof(uchar[4]) * w * h, __func__);
|
||||
if (rect == nullptr) {
|
||||
|
@@ -2213,10 +2213,11 @@ void IMB_colormanagement_imbuf_to_byte_texture(unsigned char *out_buffer,
|
||||
const struct ImBuf *ibuf,
|
||||
const bool store_premultiplied)
|
||||
{
|
||||
/* Byte buffer storage, only for sRGB and data texture since other
|
||||
/* Byte buffer storage, only for sRGB, scene linear and data texture since other
|
||||
* color space conversions can't be done on the GPU. */
|
||||
BLI_assert(ibuf->rect && ibuf->rect_float == NULL);
|
||||
BLI_assert(IMB_colormanagement_space_is_srgb(ibuf->rect_colorspace) ||
|
||||
IMB_colormanagement_space_is_scene_linear(ibuf->rect_colorspace) ||
|
||||
IMB_colormanagement_space_is_data(ibuf->rect_colorspace));
|
||||
|
||||
const unsigned char *in_buffer = (unsigned char *)ibuf->rect;
|
||||
|
Reference in New Issue
Block a user