diff options
Diffstat (limited to 'intern/cycles/blender/blender_util.h')
-rw-r--r-- | intern/cycles/blender/blender_util.h | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/intern/cycles/blender/blender_util.h b/intern/cycles/blender/blender_util.h index 06176b2d289..cefc01bfa91 100644 --- a/intern/cycles/blender/blender_util.h +++ b/intern/cycles/blender/blender_util.h @@ -357,9 +357,24 @@ static inline void set_int(PointerRNA& ptr, const char *name, int value) RNA_int_set(&ptr, name, value); } -static inline int get_enum(PointerRNA& ptr, const char *name) -{ - return RNA_enum_get(&ptr, name); +/* Get a RNA enum value with sanity check: if the RNA value is above num_values + * the function will return a fallback default value. + * + * NOTE: This function assumes that RNA enum values are a continuous sequence + * from 0 to num_values-1. Be careful to use it with enums where some values are + * deprecated! + */ +static inline int get_enum(PointerRNA& ptr, + const char *name, + int num_values = -1, + int default_value = -1) +{ + int value = RNA_enum_get(&ptr, name); + if(num_values != -1 && value >= num_values) { + assert(default_value != -1); + value = default_value; + } + return value; } static inline string get_enum_identifier(PointerRNA& ptr, const char *name) |