[Bf-blender-cvs] [4122eeb09ab] blender2.8: Cycles: Use depsgraph instead of layers

Dalai Felinto noreply at git.blender.org
Tue Apr 25 18:07:46 CEST 2017


Commit: 4122eeb09abcc389915c53fd5017dc853e109279
Author: Dalai Felinto
Date:   Tue Apr 25 16:18:24 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB4122eeb09abcc389915c53fd5017dc853e109279

Cycles: Use depsgraph instead of layers

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

M	intern/cycles/blender/addon/__init__.py
M	intern/cycles/blender/addon/engine.py
M	intern/cycles/blender/blender_object.cpp
M	intern/cycles/blender/blender_python.cpp
M	intern/cycles/blender/blender_session.cpp
M	intern/cycles/blender/blender_session.h
M	intern/cycles/blender/blender_sync.cpp
M	intern/cycles/blender/blender_sync.h
M	source/blender/editors/object/CMakeLists.txt
M	source/blender/editors/object/object_bake_api.c
M	source/blender/editors/render/CMakeLists.txt
M	source/blender/editors/render/render_internal.c
M	source/blender/editors/render/render_preview.c
M	source/blender/makesrna/intern/rna_render.c
M	source/blender/render/extern/include/RE_engine.h
M	source/blender/render/extern/include/RE_pipeline.h
M	source/blender/render/intern/include/render_types.h
M	source/blender/render/intern/source/external_engine.c
M	source/blender/render/intern/source/initrender.c
M	source/blender/render/intern/source/pipeline.c

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

diff --git a/intern/cycles/blender/addon/__init__.py b/intern/cycles/blender/addon/__init__.py
index eb792af7264..1e971a5eb15 100644
--- a/intern/cycles/blender/addon/__init__.py
+++ b/intern/cycles/blender/addon/__init__.py
@@ -19,7 +19,7 @@
 bl_info = {
     "name": "Cycles Render Engine",
     "author": "",
-    "blender": (2, 76, 0),
+    "blender": (2, 80, 0),
     "location": "Info header, render engine menu",
     "description": "Cycles Render Engine integration",
     "warning": "",
@@ -66,21 +66,21 @@ class CyclesRender(bpy.types.RenderEngine):
         engine.free(self)
 
     # final render
-    def update(self, data, scene):
+    def update(self, data, depsgraph, scene):
         if not self.session:
             if self.is_preview:
                 cscene = bpy.context.scene.cycles
                 use_osl = cscene.shading_system and cscene.device == 'CPU'
 
-                engine.create(self, data, scene,
+                engine.create(self, data, depsgraph, scene,
                               None, None, None, use_osl)
             else:
-                engine.create(self, data, scene)
+                engine.create(self, data, depsgraph, scene)
         else:
             engine.reset(self, data, scene)
 
-    def render(self, scene):
-        engine.render(self)
+    def render(self, depsgraph):
+        engine.render(self, depsgraph)
 
     def bake(self, scene, obj, pass_type, pass_filter, object_id, pixel_array, num_pixels, depth, result):
         engine.bake(self, obj, pass_type, pass_filter, object_id, pixel_array, num_pixels, depth, result)
@@ -88,12 +88,12 @@ class CyclesRender(bpy.types.RenderEngine):
     # viewport render
     def view_update(self, context):
         if not self.session:
-            engine.create(self, context.blend_data, context.scene,
+            engine.create(self, context.blend_data, context.depsgraph, context.scene,
                           context.region, context.space_data, context.region_data)
         engine.update(self, context.blend_data, context.scene)
 
     def view_draw(self, context):
-        engine.draw(self, context.region, context.space_data, context.region_data)
+        engine.draw(self, context.depsgraph, context.region, context.space_data, context.region_data)
 
     def update_script_node(self, node):
         if engine.with_osl():
diff --git a/intern/cycles/blender/addon/engine.py b/intern/cycles/blender/addon/engine.py
index ab57dd44bdb..a418cdd6821 100644
--- a/intern/cycles/blender/addon/engine.py
+++ b/intern/cycles/blender/addon/engine.py
@@ -123,12 +123,13 @@ def exit():
     _cycles.exit()
 
 
-def create(engine, data, scene, region=None, v3d=None, rv3d=None, preview_osl=False):
+def create(engine, data, depsgraph, scene, region=None, v3d=None, rv3d=None, preview_osl=False):
     import bpy
     import _cycles
 
     data = data.as_pointer()
     userpref = bpy.context.user_preferences.as_pointer()
+    depsgraph = depsgraph.as_pointer()
     scene = scene.as_pointer()
     if region:
         region = region.as_pointer()
@@ -142,7 +143,8 @@ def create(engine, data, scene, region=None, v3d=None, rv3d=None, preview_osl=Fa
     else:
         _cycles.debug_flags_reset()
 
-    engine.session = _cycles.create(engine.as_pointer(), userpref, data, scene, region, v3d, rv3d, preview_osl)
+    engine.session = _cycles.create(
+            engine.as_pointer(), userpref, data, depsgraph, scene, region, v3d, rv3d, preview_osl)
 
 
 def free(engine):
@@ -153,7 +155,7 @@ def free(engine):
         del engine.session
 
 
-def render(engine):
+def render(engine, depsgraph):
     import _cycles
     if hasattr(engine, "session"):
         _cycles.render(engine.session)
@@ -178,13 +180,14 @@ def update(engine, data, scene):
     _cycles.sync(engine.session)
 
 
-def draw(engine, region, v3d, rv3d):
+def draw(engine, depsgraph, region, v3d, rv3d):
     import _cycles
+    depsgraph = depsgraph.as_pointer()
     v3d = v3d.as_pointer()
     rv3d = rv3d.as_pointer()
 
     # draw render image
-    _cycles.draw(engine.session, v3d, rv3d)
+    _cycles.draw(engine.session, depsgraph, v3d, rv3d)
 
 
 def available_devices():
diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp
index 2810ad15b9a..4ed9f00e51f 100644
--- a/intern/cycles/blender/blender_object.cpp
+++ b/intern/cycles/blender/blender_object.cpp
@@ -469,19 +469,11 @@ static bool object_render_hide(BL::Object& b_ob,
 	}
 }
 
-static bool object_render_hide_duplis(BL::Object& b_ob)
-{
-	BL::Object parent = b_ob.parent();
-
-	return (parent && object_render_hide_original(b_ob.type(), parent.dupli_type()));
-}
-
 /* Object Loop */
 
-void BlenderSync::sync_objects(BL::SpaceView3D& b_v3d, float motion_time)
+void BlenderSync::sync_objects(float motion_time)
 {
 	/* layer data */
-	uint scene_layer = render_layer.scene_layer;
 	bool motion = motion_time != 0.0f;
 	
 	if(!motion) {
@@ -500,100 +492,37 @@ void BlenderSync::sync_objects(BL::SpaceView3D& b_v3d, float motion_time)
 	BlenderObjectCulling culling(scene, b_scene);
 
 	/* object loop */
-	BL::Scene::object_bases_iterator b_base;
-	BL::Scene b_sce = b_scene;
-	/* modifier result type (not exposed as enum in C++ API)
-	 * 1 : DAG_EVAL_PREVIEW
-	 * 2 : DAG_EVAL_RENDER
-	 */
-	int dupli_settings = preview ? 1 : 2;
-
 	bool cancel = false;
 	bool use_portal = false;
 
-	uint layer_override = get_layer(b_engine.layer_override());
-	for(; b_sce && !cancel; b_sce = b_sce.background_set()) {
-		/* Render layer's scene_layer is affected by local view already,
-		 * which is not a desired behavior here.
-		 */
-		uint scene_layers = layer_override ? layer_override : get_layer(b_scene.layers());
-		for(b_sce.object_bases.begin(b_base); b_base != b_sce.object_bases.end() && !cancel; ++b_base) {
-			BL::Object b_ob = b_base->object();
-			bool hide = (render_layer.use_viewport_visibility)? b_ob.hide(): b_ob.hide_render();
-			uint ob_layer = get_layer(b_base->layers(),
-			                          b_base->layers_local_view(),
-			                          object_is_light(b_ob),
-			                          scene_layers);
-			hide = hide || !(ob_layer & scene_layer);
-
-			if(!hide) {
-				progress.set_sync_status("Synchronizing object", b_ob.name());
-
-				/* load per-object culling data */
-				culling.init_object(scene, b_ob);
-
-				if(b_ob.is_duplicator() && !object_render_hide_duplis(b_ob)) {
-					/* dupli objects */
-					b_ob.dupli_list_create(b_scene, dupli_settings);
-
-					BL::Object::dupli_list_iterator b_dup;
-
-					for(b_ob.dupli_list.begin(b_dup); b_dup != b_ob.dupli_list.end(); ++b_dup) {
-						Transform tfm = get_transform(b_dup->matrix());
-						BL::Object b_dup_ob = b_dup->object();
-						bool dup_hide = (b_v3d)? b_dup_ob.hide(): b_dup_ob.hide_render();
-						bool in_dupli_group = (b_dup->type() == BL::DupliObject::type_GROUP);
-						bool hide_tris;
-
-						if(!(b_dup->hide() || dup_hide || object_render_hide(b_dup_ob, false, in_dupli_group, hide_tris))) {
-							/* the persistent_id allows us to match dupli objects
-							 * between frames and updates */
-							BL::Array<int, OBJECT_PERSISTENT_ID_SIZE> persistent_id = b_dup->persistent_id();
-
-							/* sync object and mesh or light data */
-							Object *object = sync_object(b_ob,
-							                             persistent_id.data,
-							                             *b_dup,
-							                             tfm,
-							                             ob_layer,
-							                             motion_time,
-							                             hide_tris,
-							                             culling,
-							                             &use_portal);
-
-							/* sync possible particle data, note particle_id
-							 * starts counting at 1, first is dummy particle */
-							if(!motion && object) {
-								sync_dupli_particle(b_ob, *b_dup, object);
-							}
-
-						}
-					}
-
-					b_ob.dupli_list_clear();
-				}
-
-				/* test if object needs to be hidden */
-				bool hide_tris;
-
-				if(!object_render_hide(b_ob, true, true, hide_tris)) {
-					/* object itself */
-					Transform tfm = get_transform(b_ob.matrix_world());
-					BL::DupliObject b_empty_dupli_ob(PointerRNA_NULL);
-					sync_object(b_ob,
-					            NULL,
-					            b_empty_dupli_ob,
-					            tfm,
-					            ob_layer,
-					            motion_time,
-					            hide_tris,
-					            culling,
-					            &use_portal);
-				}
-			}
-
-			cancel = progress.get_cancel();
-		}
+	BL::Depsgraph::objects_iterator b_ob_iter;
+
+	for(b_depsgraph.objects.begin(b_ob_iter); b_ob_iter != b_depsgraph.objects.end() && !cancel; ++b_ob_iter) {
+		BL::Object b_ob = *b_ob_iter;
+		progress.set_sync_status("Synchronizing object", b_ob.name());
+
+		/* load per-object culling data */
+		culling.init_object(scene, b_ob);
+
+		/* test if object needs to be hidden */
+		bool hide_tris;
+
+		 if(!object_render_hide(b_ob, true, true, hide_tris)) {
+			/* object itself */
+			Transform tfm = get_transform(b_ob.matrix_world());
+			BL::DupliObject b_empty_dupli_ob(PointerRNA_NULL);
+			sync_object(b_ob,
+			            NULL,
+			            b_empty_dupli_ob,
+			            tfm,
+			            ~(0), /* until we get rid of layers */
+			            motion_time,
+			            hide_tris,
+			            culling,
+			            &use_portal);
+		 }
+
+		cancel = progress.get_cancel();
 	}
 
 	progress.set_sync_status("");
@@ -617,7 +546,6 @@ void BlenderSync::sync_objects(BL::SpaceView3D& b_v3d, float motion_time)
 }
 
 void BlenderSync::sync_motion(BL::RenderSettings& b_render,
-                              BL::SpaceView3D& b_v3d,
                               BL::Object& b_override,
                               int width, int height,
                               void **python_thread_state)
@@ -654,7 +582,7 @@ void BlenderSync::sync_motion(BL::RenderSettings& b_render,
 		b_engine.frame_set(frame, subframe);
 		python_thread_state_save(python_thread_state);
 		sync_camera_motion(b_render, b_cam, width, height, 0.0f);
-		sync_objects(b_v3d, 0.0f);
+		sync_objects(0.0f);
 	}
 
 	/* always sample these times for camera motion */
@@ -688,7 +616,7 @@ void Blen

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list