diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-02-10 02:00:29 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-02-10 02:10:52 +0300 |
commit | 5a45ccaf3e5102ee571599fa9f26a78ac1f6d0f4 (patch) | |
tree | 352b6b75c1b542aacb783296922c3ae85bcb8732 | |
parent | d6e936254eb90496f21e97bdd00b1b8dacbf9b35 (diff) |
Fix T47377: Newer file crashes at render on official 2.76b version
Really annoying bug, the code was not forward compatible at all and
resulted in crash. And it is really good to keep at least one release
forward compatibility so possible regressions could be verified easily.
The idea now is to use new property name for the pixel filter type,
but keep old property around for a couple of releases, so we have at
least some forward compatibility.
Don't like this situation at all, but seems it's least of the evil
we can choose.
Thanks Brecht for the review!
-rw-r--r-- | intern/cycles/blender/addon/properties.py | 12 | ||||
-rw-r--r-- | intern/cycles/blender/addon/ui.py | 4 | ||||
-rw-r--r-- | intern/cycles/blender/addon/version_update.py | 11 | ||||
-rw-r--r-- | intern/cycles/blender/blender_sync.cpp | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_blender.h | 2 |
5 files changed, 26 insertions, 5 deletions
diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py index 81dafb82d51..5238a35f47c 100644 --- a/intern/cycles/blender/addon/properties.py +++ b/intern/cycles/blender/addon/properties.py @@ -376,12 +376,24 @@ class CyclesRenderSettings(bpy.types.PropertyGroup): default=False, ) + # Really annoyingly, we have to keep it around for a few releases, + # otherwise forward compatibility breaks in really bad manner: CRASH! + # + # TODO(sergey): Remove this during 2.8x series of Blender. cls.filter_type = EnumProperty( name="Filter Type", description="Pixel filter type", items=enum_filter_types, default='BLACKMAN_HARRIS', ) + + cls.pixel_filter_type = EnumProperty( + name="Filter Type", + description="Pixel filter type", + items=enum_filter_types, + default='BLACKMAN_HARRIS', + ) + cls.filter_width = FloatProperty( name="Filter Width", description="Pixel filter width", diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py index 610833be27e..755feeda9fb 100644 --- a/intern/cycles/blender/addon/ui.py +++ b/intern/cycles/blender/addon/ui.py @@ -329,8 +329,8 @@ class CyclesRender_PT_film(CyclesButtonsPanel, Panel): col = split.column() sub = col.column(align=True) - sub.prop(cscene, "filter_type", text="") - if cscene.filter_type != 'BOX': + sub.prop(cscene, "pixel_filter_type", text="") + if cscene.pixel_filter_type != 'BOX': sub.prop(cscene, "filter_width", text="Width") diff --git a/intern/cycles/blender/addon/version_update.py b/intern/cycles/blender/addon/version_update.py index 0d34eb295df..221b1437128 100644 --- a/intern/cycles/blender/addon/version_update.py +++ b/intern/cycles/blender/addon/version_update.py @@ -235,7 +235,7 @@ def do_versions(self): # Filter if not cscene.is_property_set("filter_type"): - cscene.filter_type = 'GAUSSIAN' + cscene.pixel_filter_type = 'GAUSSIAN' # Tile Order if not cscene.is_property_set("tile_order"): @@ -270,3 +270,12 @@ def do_versions(self): # World MIS Resolution if not cworld.is_property_set("sample_map_resolution"): cworld.sample_map_resolution = 256 + + if bpy.data.version <= (2, 76, 10): + for scene in bpy.data.scenes: + cscene = scene.cycles + if cscene.is_property_set("filter_type"): + if not cscene.is_property_set("pixel_filter_type"): + cscene.pixel_filter_type = cscene.filter_type + if cscene.filter_type == 'BLACKMAN_HARRIS': + cscene.filter_type = 'GAUSSIAN' diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp index bdf207f0d36..7901d4b8be1 100644 --- a/intern/cycles/blender/blender_sync.cpp +++ b/intern/cycles/blender/blender_sync.cpp @@ -287,7 +287,7 @@ void BlenderSync::sync_film() film->use_sample_clamp = (integrator->sample_clamp_direct != 0.0f || integrator->sample_clamp_indirect != 0.0f); film->exposure = get_float(cscene, "film_exposure"); - film->filter_type = (FilterType)get_enum(cscene, "filter_type"); + film->filter_type = (FilterType)get_enum(cscene, "pixel_filter_type"); film->filter_width = (film->filter_type == FILTER_BOX)? 1.0f: get_float(cscene, "filter_width"); if(b_scene.world()) { diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h index 8d8589cd9ed..e7060e64d2a 100644 --- a/source/blender/blenkernel/BKE_blender.h +++ b/source/blender/blenkernel/BKE_blender.h @@ -42,7 +42,7 @@ extern "C" { * and keep comment above the defines. * Use STRINGIFY() rather than defining with quotes */ #define BLENDER_VERSION 276 -#define BLENDER_SUBVERSION 10 +#define BLENDER_SUBVERSION 11 /* Several breakages with 270, e.g. constraint deg vs rad */ #define BLENDER_MINVERSION 270 #define BLENDER_MINSUBVERSION 6 |