[Bf-blender-cvs] [031a9d64248] master: Merge branch 'blender2.7'

Lukas Stockner noreply at git.blender.org
Fri Jan 18 01:50:22 CET 2019


Commit: 031a9d6424815ce73897e25800356c9888b1cde2
Author: Lukas Stockner
Date:   Fri Jan 18 01:47:32 2019 +0100
Branches: master
https://developer.blender.org/rB031a9d6424815ce73897e25800356c9888b1cde2

Merge branch 'blender2.7'

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



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

diff --cc source/blender/nodes/composite/nodes/node_composite_image.c
index 856b87631d7,7f906ae27ce..ce41e309527
--- a/source/blender/nodes/composite/nodes/node_composite_image.c
+++ b/source/blender/nodes/composite/nodes/node_composite_image.c
@@@ -214,6 -213,21 +214,23 @@@ void node_cmp_rlayers_register_pass(bNo
  	}
  }
  
 -static void cmp_node_rlayer_create_outputs_cb(RenderEngine *UNUSED(engine), Scene *scene, SceneRenderLayer *srl,
++static void cmp_node_rlayer_create_outputs_cb(RenderEngine *UNUSED(engine), Scene *scene, ViewLayer *view_layer,
+                                               const char *name, int UNUSED(channels), const char *UNUSED(chanid), int type)
+ {
+ 	/* Register the pass in all scenes that have a render layer node for this layer.
+ 	 * Since multiple scenes can be used in the compositor, the code must loop over all scenes
+ 	 * and check whether their nodetree has a node that needs to be updated. */
+ 	/* NOTE: using G_MAIN seems valid here,
+ 	 * unless we want to register that for every other temp Main we could generate??? */
++	ntreeCompositRegisterPass(scene->nodetree, scene, view_layer, name, type);
++
+ 	for (Scene *sce = G_MAIN->scene.first; sce; sce = sce->id.next) {
 -		if (sce->nodetree) {
 -			ntreeCompositRegisterPass(sce->nodetree, scene, srl, name, type);
++		if (sce->nodetree && sce != scene) {
++			ntreeCompositRegisterPass(sce->nodetree, scene, view_layer, name, type);
+ 		}
+ 	}
+ }
+ 
  static void cmp_node_rlayer_create_outputs(bNodeTree *ntree, bNode *node, LinkNodePair *available_sockets)
  {
  	Scene *scene = (Scene *)node->id;
@@@ -229,7 -243,7 +246,7 @@@
  				node->storage = data;
  
  				RenderEngine *engine = RE_engine_create(engine_type);
- 				engine_type->update_render_passes(engine, scene, view_layer);
 -				RE_engine_update_render_passes(engine, scene, srl, cmp_node_rlayer_create_outputs_cb);
++				RE_engine_update_render_passes(engine, scene, view_layer, cmp_node_rlayer_create_outputs_cb);
  				RE_engine_free(engine);
  
  				MEM_freeN(data);
diff --cc source/blender/render/extern/include/RE_engine.h
index faa4c8b3184,e23d881c7b1..8a6282aee01
--- a/source/blender/render/extern/include/RE_engine.h
+++ b/source/blender/render/extern/include/RE_engine.h
@@@ -37,12 -37,10 +37,14 @@@
  #include "RNA_types.h"
  #include "RE_bake.h"
  
+ #include "BLI_threads.h"
+ 
  struct bNode;
  struct bNodeTree;
 +struct BakePixel;
 +struct Depsgraph;
 +struct IDProperty;
 +struct Main;
  struct Object;
  struct Render;
  struct RenderData;
@@@ -111,6 -104,9 +113,9 @@@ typedef struct RenderEngineType 
  	ExtensionRNA ext;
  } RenderEngineType;
  
 -typedef void (*update_render_passes_cb_t)(struct RenderEngine *engine, struct Scene *scene, struct SceneRenderLayer *srl,
++typedef void (*update_render_passes_cb_t)(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer,
+                                           const char *name, int channels, const char *chanid, int type);
+ 
  typedef struct RenderEngine {
  	RenderEngineType *type;
  	void *py_instance;
@@@ -175,7 -172,9 +184,9 @@@ bool RE_engine_is_external(struct Rende
  
  void RE_engine_frame_set(struct RenderEngine *engine, int frame, float subframe);
  
 -void RE_engine_update_render_passes(struct RenderEngine *engine, struct Scene *scene, struct SceneRenderLayer *srl,
++void RE_engine_update_render_passes(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer,
+                                     update_render_passes_cb_t callback);
 -void RE_engine_register_pass(struct RenderEngine *engine, struct Scene *scene, struct SceneRenderLayer *srl,
 +void RE_engine_register_pass(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer,
                               const char *name, int channels, const char *chanid, int type);
  
  /* Engine Types */
diff --cc source/blender/render/intern/source/external_engine.c
index 283f4c414ee,01044804d3e..7e531511944
--- a/source/blender/render/intern/source/external_engine.c
+++ b/source/blender/render/intern/source/external_engine.c
@@@ -711,8 -728,11 +715,8 @@@ int RE_engine_render(Render *re, int do
  	engine->tile_y = re->party;
  
  	if (re->result->do_exr_tile)
- 		render_result_exr_file_begin(re);
+ 		render_result_exr_file_begin(re, engine);
  
 -	if (type->update)
 -		type->update(engine, re->main, re->scene);
 -
  	/* Clear UI drawing locks. */
  	if (re->draw_lock) {
  		re->draw_lock(re->dlh, 0);
@@@ -798,40 -782,27 +802,42 @@@
  	return 1;
  }
  
- void RE_engine_register_pass(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer,
-                              const char *name, int UNUSED(channels), const char *UNUSED(chanid), int type)
 -void RE_engine_update_render_passes(struct RenderEngine *engine, struct Scene *scene, struct SceneRenderLayer *srl,
++void RE_engine_update_render_passes(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer,
+                                     update_render_passes_cb_t callback)
  {
- 	/* The channel information is currently not used, but is part of the API in case it's needed in the future. */
- 
- 	if (!(scene && view_layer && engine)) {
 -	if (!(scene && srl && engine && callback && engine->type->update_render_passes)) {
++	if (!(scene && view_layer && engine && callback && engine->type->update_render_passes)) {
  		return;
  	}
  
- 	/* Register the pass in all scenes that have a render layer node for this layer.
- 	 * Since multiple scenes can be used in the compositor, the code must loop over all scenes
- 	 * and check whether their nodetree has a node that needs to be updated. */
- 	/* NOTE: using G_MAIN seems valid here,
- 	 * unless we want to register that for every other temp Main we could generate??? */
- 	ntreeCompositRegisterPass(scene->nodetree, scene, view_layer, name, type);
+ 	BLI_mutex_lock(&engine->update_render_passes_mutex);
  
- 	for (Scene *sce = G_MAIN->scene.first; sce; sce = sce->id.next) {
- 		if (sce->nodetree && sce != scene) {
- 			ntreeCompositRegisterPass(sce->nodetree, scene, view_layer, name, type);
- 		}
+ 	engine->update_render_passes_cb = callback;
 -	engine->type->update_render_passes(engine, scene, srl);
++	engine->type->update_render_passes(engine, scene, view_layer);
+ 
+ 	BLI_mutex_unlock(&engine->update_render_passes_mutex);
+ }
+ 
 -void RE_engine_register_pass(struct RenderEngine *engine, struct Scene *scene, struct SceneRenderLayer *srl,
++void RE_engine_register_pass(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer,
+                              const char *name, int channels, const char *chanid, int type)
+ {
 -	if (!(scene && srl && engine && engine->update_render_passes_cb)) {
++	if (!(scene && view_layer && engine && engine->update_render_passes_cb)) {
+ 		return;
  	}
+ 
 -	engine->update_render_passes_cb(engine, scene, srl, name, channels, chanid, type);
++	engine->update_render_passes_cb(engine, scene, view_layer, name, channels, chanid, type);
 +}
 +
 +void RE_engine_free_blender_memory(RenderEngine *engine)
 +{
 +	/* Weak way to save memory, but not crash grease pencil.
 +	 *
 +	 * TODO(sergey): Find better solution for this.
 +	 * TODO(sergey): Try to find solution which does not involve looping over
 +	 * all the objects.
 +	 */
 +	if (DRW_render_check_grease_pencil(engine->depsgraph)) {
 +		return;
 +	}
 +	DEG_graph_free(engine->depsgraph);
 +	engine->depsgraph = NULL;
  }
diff --cc source/blender/render/intern/source/render_result.c
index 7efe0a5da60,abd23541326..9ec7054ecdf
--- a/source/blender/render/intern/source/render_result.c
+++ b/source/blender/render/intern/source/render_result.c
@@@ -1063,8 -1116,25 +1066,25 @@@ void render_result_save_empty_result_ti
  	}
  }
  
 -static void render_result_register_pass_cb(RenderEngine *engine, Scene *UNUSED(scene), SceneRenderLayer *srl,
++static void render_result_register_pass_cb(RenderEngine *engine, Scene *UNUSED(scene), ViewLayer *view_layer,
+                                            const char *name, int channels, const char *chanid, int UNUSED(type))
+ {
 -	RE_engine_add_pass(engine, name, channels, chanid, srl->name);
++	RE_engine_add_pass(engine, name, channels, chanid, view_layer->name);
+ }
+ 
+ static void render_result_create_all_passes(RenderEngine *engine, Render *re, RenderLayer *rl)
+ {
+ 	if (engine && engine->type->update_render_passes) {
 -		SceneRenderLayer *srl;
 -		srl = BLI_findstring(&re->r.layers, rl->name, offsetof(SceneRenderLayer, name));
 -		if (srl) {
 -			RE_engine_update_render_passes(engine, re->scene, srl, render_result_register_pass_cb);
++		ViewLayer *view_layer;
++		view_layer = BLI_findstring(&re->view_layers, rl->name, offsetof(ViewLayer, name));
++		if (view_layer) {
++			RE_engine_update_render_passes(engine, re->scene, view_layer, render_result_register_pass_cb);
+ 		}
+ 	}
+ }
+ 
  /* begin write of exr tile file */
- void render_result_exr_file_begin(Render *re)
+ void render_result_exr_file_begin(Render *re, RenderEngine *engine)
  {
  	RenderResult *rr;
  	RenderLayer *rl;



More information about the Bf-blender-cvs mailing list