[Bf-blender-cvs] [5a45cca] master: Fix T47377: Newer file crashes at render on official 2.76b version

Sergey Sharybin noreply at git.blender.org
Wed Feb 10 00:13:19 CET 2016


Commit: 5a45ccaf3e5102ee571599fa9f26a78ac1f6d0f4
Author: Sergey Sharybin
Date:   Wed Feb 10 04:00:29 2016 +0500
Branches: master
https://developer.blender.org/rB5a45ccaf3e5102ee571599fa9f26a78ac1f6d0f4

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!

===================================================================

M	intern/cycles/blender/addon/properties.py
M	intern/cycles/blender/addon/ui.py
M	intern/cycles/blender/addon/version_update.py
M	intern/cycles/blender/blender_sync.cpp
M	source/blender/blenkernel/BKE_blender.h

===================================================================

diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py
index 81dafb8..5238a35 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 610833b..755feed 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 0d34eb2..221b143 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 bdf207f..7901d4b 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 8d8589c..e7060e6 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




More information about the Bf-blender-cvs mailing list