Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/intern
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2016-02-10 02:00:29 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2016-02-10 02:10:52 +0300
commit5a45ccaf3e5102ee571599fa9f26a78ac1f6d0f4 (patch)
tree352b6b75c1b542aacb783296922c3ae85bcb8732 /intern
parentd6e936254eb90496f21e97bdd00b1b8dacbf9b35 (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!
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/blender/addon/properties.py12
-rw-r--r--intern/cycles/blender/addon/ui.py4
-rw-r--r--intern/cycles/blender/addon/version_update.py11
-rw-r--r--intern/cycles/blender/blender_sync.cpp2
4 files changed, 25 insertions, 4 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()) {