Fix T74586: Image Editor Uses Invalid Display Channels
When using the image editor the display channels attribute can become invalid when selecting another image/buffer. This patch will check what display channels are valid and when an invalid channel is selected it will fall back to the color channel. To de-duplicate the code it also introduces a `ED_space_image_get_display_channel_mask` function that will determine the valid bitflags for the display channel of a given `ImBuf`.
This commit is contained in:
@@ -175,6 +175,30 @@ void ED_space_image_release_buffer(SpaceImage *sima, ImBuf *ibuf, void *lock)
|
||||
}
|
||||
}
|
||||
|
||||
/* Get the SpaceImage flag that is valid for the given ibuf. */
|
||||
int ED_space_image_get_display_channel_mask(ImBuf *ibuf)
|
||||
{
|
||||
int result = (SI_USE_ALPHA | SI_SHOW_ALPHA | SI_SHOW_ZBUF | SI_SHOW_R | SI_SHOW_G | SI_SHOW_B);
|
||||
if (!ibuf) {
|
||||
return result;
|
||||
}
|
||||
|
||||
const bool color = ibuf->channels >= 3;
|
||||
const bool alpha = ibuf->channels == 4;
|
||||
const bool zbuf = ibuf->zbuf || ibuf->zbuf_float || (ibuf->channels == 1);
|
||||
|
||||
if (!alpha) {
|
||||
result &= ~(SI_USE_ALPHA | SI_SHOW_ALPHA);
|
||||
}
|
||||
if (!zbuf) {
|
||||
result &= ~(SI_SHOW_ZBUF);
|
||||
}
|
||||
if (!color) {
|
||||
result &= ~(SI_SHOW_R | SI_SHOW_G | SI_SHOW_B);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
bool ED_space_image_has_buffer(SpaceImage *sima)
|
||||
{
|
||||
ImBuf *ibuf;
|
||||
|
||||
Reference in New Issue
Block a user