Color management: Validate Look on View Transform changes
If the new view transform does not support the currently configured look reset look to the default None, similar to the color management verification on .blend file open. Currently it is not a problem as all views support the same set of looks. But with an upcoming addition of AgX it will no longer be true. Ref #110685 Pull Request: https://projects.blender.org/blender/blender/pulls/111185
This commit is contained in:
parent
2b30d26ae9
commit
241fac09dd
@ -343,6 +343,9 @@ const char *IMB_colormanagement_view_get_indexed_name(int index);
|
||||
|
||||
int IMB_colormanagement_look_get_named_index(const char *name);
|
||||
const char *IMB_colormanagement_look_get_indexed_name(int index);
|
||||
const char *IMB_colormanagement_look_get_default_name(void);
|
||||
const char *IMB_colormanagement_look_validate_for_view(const char *view_name,
|
||||
const char *look_name);
|
||||
|
||||
/** \} */
|
||||
|
||||
|
@ -1101,7 +1101,7 @@ static void colormanage_check_view_settings(ColorManagedDisplaySettings *display
|
||||
{
|
||||
ColorManagedDisplay *display;
|
||||
ColorManagedView *default_view = nullptr;
|
||||
ColorManagedLook *default_look = (ColorManagedLook *)global_looks.first;
|
||||
const char *default_look_name = IMB_colormanagement_look_get_default_name();
|
||||
|
||||
if (view_settings->view_transform[0] == '\0') {
|
||||
display = colormanage_display_get_named(display_settings->display_device);
|
||||
@ -1136,7 +1136,7 @@ static void colormanage_check_view_settings(ColorManagedDisplaySettings *display
|
||||
}
|
||||
|
||||
if (view_settings->look[0] == '\0') {
|
||||
STRNCPY(view_settings->look, default_look->name);
|
||||
STRNCPY(view_settings->look, default_look_name);
|
||||
}
|
||||
else {
|
||||
ColorManagedLook *look = colormanage_look_get_named(view_settings->look);
|
||||
@ -1144,9 +1144,9 @@ static void colormanage_check_view_settings(ColorManagedDisplaySettings *display
|
||||
printf("Color management: %s look \"%s\" not found, setting default \"%s\".\n",
|
||||
what,
|
||||
view_settings->look,
|
||||
default_look->name);
|
||||
default_look_name);
|
||||
|
||||
STRNCPY(view_settings->look, default_look->name);
|
||||
STRNCPY(view_settings->look, default_look_name);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3314,6 +3314,31 @@ const char *IMB_colormanagement_look_get_indexed_name(int index)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const char *IMB_colormanagement_look_get_default_name()
|
||||
{
|
||||
const ColorManagedLook *default_look = static_cast<const ColorManagedLook *>(global_looks.first);
|
||||
if (!default_look) {
|
||||
return "";
|
||||
}
|
||||
|
||||
return default_look->name;
|
||||
}
|
||||
|
||||
const char *IMB_colormanagement_look_validate_for_view(const char *view_name,
|
||||
const char *look_name)
|
||||
{
|
||||
ColorManagedLook *look_descr = colormanage_look_get_named(look_name);
|
||||
if (!look_descr) {
|
||||
return look_name;
|
||||
}
|
||||
|
||||
if (colormanage_compatible_look(look_descr, view_name)) {
|
||||
return look_name;
|
||||
}
|
||||
|
||||
return IMB_colormanagement_look_get_default_name();
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
|
@ -466,10 +466,16 @@ static void rna_ColorManagedViewSettings_view_transform_set(PointerRNA *ptr, int
|
||||
{
|
||||
ColorManagedViewSettings *view = (ColorManagedViewSettings *)ptr->data;
|
||||
|
||||
const char *name = IMB_colormanagement_view_get_indexed_name(value);
|
||||
const char *view_name = IMB_colormanagement_view_get_indexed_name(value);
|
||||
if (!view_name) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (name) {
|
||||
STRNCPY(view->view_transform, name);
|
||||
STRNCPY(view->view_transform, view_name);
|
||||
|
||||
const char *look_name = IMB_colormanagement_look_validate_for_view(view_name, view->look);
|
||||
if (look_name) {
|
||||
STRNCPY(view->look, look_name);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user