forked from bartvdbraak/blender
Color Management: add support for OpenColorIO color space aliases
This enables the configuration to specify aliases for compatibility with other configurations. When a colorspace name is saved in a.blend, that is the alias of a colorspace in the current configuration, it will show the main colorspace from the configuration in the user interface and Python API instead. Loading & saving the .blend file does not make any changes to the stored name, so as to not make hidden modifications. Only when setting the property again will the alias name be overwritten by the main colorspace name. Fixes T96049 Differential Revision: https://developer.blender.org/D14419
This commit is contained in:
parent
7aab508e32
commit
5ac4e6c911
@ -445,6 +445,16 @@ const char *FallbackImpl::colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr * /*cs*/
|
||||
return "";
|
||||
}
|
||||
|
||||
int FallbackImpl::colorSpaceGetNumAliases(OCIO_ConstColorSpaceRcPtr * /*cs*/)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
const char *FallbackImpl::colorSpaceGetAlias(OCIO_ConstColorSpaceRcPtr * /*cs*/,
|
||||
const int /*index*/)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
OCIO_ConstProcessorRcPtr *FallbackImpl::createDisplayProcessor(OCIO_ConstConfigRcPtr * /*config*/,
|
||||
const char * /*input*/,
|
||||
const char * /*view*/,
|
||||
|
@ -234,6 +234,16 @@ const char *OCIO_colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs)
|
||||
return impl->colorSpaceGetFamily(cs);
|
||||
}
|
||||
|
||||
int OCIO_colorSpaceGetNumAliases(OCIO_ConstColorSpaceRcPtr *cs)
|
||||
{
|
||||
return impl->colorSpaceGetNumAliases(cs);
|
||||
}
|
||||
|
||||
const char *OCIO_colorSpaceGetAlias(OCIO_ConstColorSpaceRcPtr *cs, const int index)
|
||||
{
|
||||
return impl->colorSpaceGetAlias(cs, index);
|
||||
}
|
||||
|
||||
OCIO_ConstProcessorRcPtr *OCIO_createDisplayProcessor(OCIO_ConstConfigRcPtr *config,
|
||||
const char *input,
|
||||
const char *view,
|
||||
|
@ -157,6 +157,8 @@ void OCIO_cpuProcessorRelease(OCIO_ConstCPUProcessorRcPtr *processor);
|
||||
const char *OCIO_colorSpaceGetName(OCIO_ConstColorSpaceRcPtr *cs);
|
||||
const char *OCIO_colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr *cs);
|
||||
const char *OCIO_colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs);
|
||||
int OCIO_colorSpaceGetNumAliases(OCIO_ConstColorSpaceRcPtr *cs);
|
||||
const char *OCIO_colorSpaceGetAlias(OCIO_ConstColorSpaceRcPtr *cs, const int index);
|
||||
|
||||
OCIO_ConstProcessorRcPtr *OCIO_createDisplayProcessor(OCIO_ConstConfigRcPtr *config,
|
||||
const char *input,
|
||||
|
@ -640,6 +640,15 @@ const char *OCIOImpl::colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs)
|
||||
return (*(ConstColorSpaceRcPtr *)cs)->getFamily();
|
||||
}
|
||||
|
||||
int OCIOImpl::colorSpaceGetNumAliases(OCIO_ConstColorSpaceRcPtr *cs)
|
||||
{
|
||||
return (*(ConstColorSpaceRcPtr *)cs)->getNumAliases();
|
||||
}
|
||||
const char *OCIOImpl::colorSpaceGetAlias(OCIO_ConstColorSpaceRcPtr *cs, const int index)
|
||||
{
|
||||
return (*(ConstColorSpaceRcPtr *)cs)->getAlias(index);
|
||||
}
|
||||
|
||||
OCIO_ConstProcessorRcPtr *OCIOImpl::createDisplayProcessor(OCIO_ConstConfigRcPtr *config_,
|
||||
const char *input,
|
||||
const char *view,
|
||||
|
@ -76,6 +76,8 @@ class IOCIOImpl {
|
||||
virtual const char *colorSpaceGetName(OCIO_ConstColorSpaceRcPtr *cs) = 0;
|
||||
virtual const char *colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr *cs) = 0;
|
||||
virtual const char *colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs) = 0;
|
||||
virtual int colorSpaceGetNumAliases(OCIO_ConstColorSpaceRcPtr *cs) = 0;
|
||||
virtual const char *colorSpaceGetAlias(OCIO_ConstColorSpaceRcPtr *cs, const int index) = 0;
|
||||
|
||||
virtual OCIO_ConstProcessorRcPtr *createDisplayProcessor(OCIO_ConstConfigRcPtr *config,
|
||||
const char *input,
|
||||
@ -190,6 +192,8 @@ class FallbackImpl : public IOCIOImpl {
|
||||
const char *colorSpaceGetName(OCIO_ConstColorSpaceRcPtr *cs);
|
||||
const char *colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr *cs);
|
||||
const char *colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs);
|
||||
int colorSpaceGetNumAliases(OCIO_ConstColorSpaceRcPtr *cs);
|
||||
const char *colorSpaceGetAlias(OCIO_ConstColorSpaceRcPtr *cs, const int index);
|
||||
|
||||
OCIO_ConstProcessorRcPtr *createDisplayProcessor(OCIO_ConstConfigRcPtr *config,
|
||||
const char *input,
|
||||
@ -277,6 +281,8 @@ class OCIOImpl : public IOCIOImpl {
|
||||
const char *colorSpaceGetName(OCIO_ConstColorSpaceRcPtr *cs);
|
||||
const char *colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr *cs);
|
||||
const char *colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs);
|
||||
int colorSpaceGetNumAliases(OCIO_ConstColorSpaceRcPtr *cs);
|
||||
const char *colorSpaceGetAlias(OCIO_ConstColorSpaceRcPtr *cs, const int index);
|
||||
|
||||
OCIO_ConstProcessorRcPtr *createDisplayProcessor(OCIO_ConstConfigRcPtr *config,
|
||||
const char *input,
|
||||
|
@ -33,6 +33,9 @@ typedef struct ColorSpace {
|
||||
struct OCIO_ConstCPUProcessorRcPtr *to_scene_linear;
|
||||
struct OCIO_ConstCPUProcessorRcPtr *from_scene_linear;
|
||||
|
||||
char (*aliases)[MAX_COLORSPACE_NAME];
|
||||
int num_aliases;
|
||||
|
||||
bool is_invertible;
|
||||
bool is_data;
|
||||
|
||||
|
@ -504,7 +504,16 @@ static void colormanage_load_config(OCIO_ConstConfigRcPtr *config)
|
||||
is_invertible = OCIO_colorSpaceIsInvertible(ocio_colorspace);
|
||||
is_data = OCIO_colorSpaceIsData(ocio_colorspace);
|
||||
|
||||
colormanage_colorspace_add(name, description, is_invertible, is_data);
|
||||
ColorSpace *colorspace = colormanage_colorspace_add(name, description, is_invertible, is_data);
|
||||
|
||||
colorspace->num_aliases = OCIO_colorSpaceGetNumAliases(ocio_colorspace);
|
||||
if (colorspace->num_aliases > 0) {
|
||||
colorspace->aliases = MEM_callocN(sizeof(*colorspace->aliases) * colorspace->num_aliases,
|
||||
"ColorSpace aliases");
|
||||
for (int i = 0; i < colorspace->num_aliases; i++) {
|
||||
STRNCPY(colorspace->aliases[i], OCIO_colorSpaceGetAlias(ocio_colorspace, i));
|
||||
}
|
||||
}
|
||||
|
||||
OCIO_colorSpaceRelease(ocio_colorspace);
|
||||
}
|
||||
@ -587,6 +596,7 @@ static void colormanage_free_config(void)
|
||||
}
|
||||
|
||||
/* free color space itself */
|
||||
MEM_SAFE_FREE(colorspace->aliases);
|
||||
MEM_freeN(colorspace);
|
||||
|
||||
colorspace = colorspace_next;
|
||||
@ -3053,6 +3063,12 @@ ColorSpace *colormanage_colorspace_get_named(const char *name)
|
||||
if (STREQ(colorspace->name, name)) {
|
||||
return colorspace;
|
||||
}
|
||||
|
||||
for (int i = 0; i < colorspace->num_aliases; i++) {
|
||||
if (STREQ(colorspace->aliases[i], name)) {
|
||||
return colorspace;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user