[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25759] trunk/blender/source/blender: Restored Compositor 're-render single layer' functionality ( buttons on renderlayer comp nodes).

Matt Ebb matt at mke3.net
Wed Jan 6 01:09:07 CET 2010


Revision: 25759
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25759
Author:   broken
Date:     2010-01-06 01:09:07 +0100 (Wed, 06 Jan 2010)

Log Message:
-----------
Restored Compositor 're-render single layer' functionality (buttons on renderlayer comp nodes).

This works with operator properties - if you pass the name of a scene and renderlayer to 
the screen.render operator, it will render that layer as a single layer re-render.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/sequencer.c
    trunk/blender/source/blender/editors/render/render_preview.c
    trunk/blender/source/blender/editors/screen/screen_ops.c
    trunk/blender/source/blender/editors/space_node/drawnode.c
    trunk/blender/source/blender/editors/space_node/node_edit.c
    trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
    trunk/blender/source/blender/render/extern/include/RE_pipeline.h
    trunk/blender/source/blender/render/intern/source/convertblender.c
    trunk/blender/source/blender/render/intern/source/envmap.c
    trunk/blender/source/blender/render/intern/source/pipeline.c

Modified: trunk/blender/source/blender/blenkernel/intern/sequencer.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequencer.c	2010-01-06 00:02:37 UTC (rev 25758)
+++ trunk/blender/source/blender/blenkernel/intern/sequencer.c	2010-01-06 00:09:07 UTC (rev 25759)
@@ -2094,7 +2094,7 @@
 			doseq= scene->r.scemode & R_DOSEQ;
 			scene->r.scemode &= ~R_DOSEQ;
 			
-			RE_BlenderFrame(re, sce,
+			RE_BlenderFrame(re, sce, NULL,
 					seq->sfra+se->nr+seq->anim_startofs);
 			
 			if(rendering)

Modified: trunk/blender/source/blender/editors/render/render_preview.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_preview.c	2010-01-06 00:02:37 UTC (rev 25758)
+++ trunk/blender/source/blender/editors/render/render_preview.c	2010-01-06 00:09:07 UTC (rev 25759)
@@ -717,7 +717,7 @@
 		rdata.layers.first= rdata.layers.last= NULL;
 		rdata.renderer= R_INTERN;
 		 
-		RE_InitState(re, NULL, &rdata, sa->winx, sa->winy, &ri->disprect);
+		RE_InitState(re, NULL, &rdata, NULL, sa->winx, sa->winy, &ri->disprect);
 	
 		if(orth)
 			RE_SetOrtho(re, &viewplane, clipsta, clipend);
@@ -923,7 +923,7 @@
 	else sizex= sp->sizex;
 
 	/* allocates or re-uses render result */
-	RE_InitState(re, NULL, &sce->r, sizex, sp->sizey, NULL);
+	RE_InitState(re, NULL, &sce->r, NULL, sizex, sp->sizey, NULL);
 
 	/* callbacs are cleared on GetRender() */
 	if(sp->pr_method==PR_BUTS_RENDER) {

Modified: trunk/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_ops.c	2010-01-06 00:02:37 UTC (rev 25758)
+++ trunk/blender/source/blender/editors/screen/screen_ops.c	2010-01-06 00:09:07 UTC (rev 25759)
@@ -2812,7 +2812,7 @@
 	if(RNA_boolean_get(op->ptr, "animation"))
 		RE_BlenderAnim(re, scene, scene->r.sfra, scene->r.efra, scene->r.frame_step, op->reports);
 	else
-		RE_BlenderFrame(re, scene, scene->r.cfra);
+		RE_BlenderFrame(re, scene, NULL, scene->r.cfra);
 	
 	// no redraw needed, we leave state as we entered it
 	ED_update_for_newframe(C, 1);
@@ -2826,6 +2826,7 @@
 	Scene *scene;
 	Render *re;
 	wmWindow *win;
+	SceneRenderLayer *srl;
 	int anim;
 	Image *image;
 	ImageUser iuser;
@@ -3038,7 +3039,7 @@
 	if(rj->anim)
 		RE_BlenderAnim(rj->re, rj->scene, rj->scene->r.sfra, rj->scene->r.efra, rj->scene->r.frame_step, rj->reports);
 	else
-		RE_BlenderFrame(rj->re, rj->scene, rj->scene->r.cfra);
+		RE_BlenderFrame(rj->re, rj->scene, rj->srl, rj->scene->r.cfra);
 }
 
 /* called by render, check job 'stop' value or the global */
@@ -3074,6 +3075,7 @@
 {
 	/* new render clears all callbacks */
 	Scene *scene= CTX_data_scene(C);
+	SceneRenderLayer *srl=NULL;
 	Render *re;
 	wmJob *steve;
 	RenderJob *rj;
@@ -3102,10 +3104,29 @@
 	/* ensure at least 1 area shows result */
 	screen_set_image_output(C, event->x, event->y);
 	
+	/* single layer re-render */
+	if(RNA_property_is_set(op->ptr, "layer")) {
+		SceneRenderLayer *rl;
+		Scene *scn;
+		char scene_name[19], rl_name[RE_MAXNAME];
+		
+		RNA_string_get(op->ptr, "layer", rl_name);
+		RNA_string_get(op->ptr, "scene", scene_name);
+		
+		scn = (Scene *)BLI_findstring(&CTX_data_main(C)->scene, scene_name, offsetof(ID, name) + 2);
+		rl = (SceneRenderLayer *)BLI_findstring(&scene->r.layers, rl_name, offsetof(SceneRenderLayer, name));
+		
+		if (scn && rl) {
+			scene = scn;
+			srl = rl;
+		}
+	}
+	
 	/* job custom data */
 	rj= MEM_callocN(sizeof(RenderJob), "render job");
 	rj->scene= scene;
 	rj->win= CTX_wm_window(C);
+	rj->srl = srl;
 	rj->anim= RNA_boolean_get(op->ptr, "animation");
 	rj->iuser.scene= scene;
 	rj->iuser.ok= 1;
@@ -3167,6 +3188,8 @@
 	ot->poll= ED_operator_screenactive;
 	
 	RNA_def_boolean(ot->srna, "animation", 0, "Animation", "");
+	RNA_def_string(ot->srna, "layer", "", RE_MAXNAME, "Render Layer", "Single render layer to re-render");
+	RNA_def_string(ot->srna, "scene", "", 19, "Scene", "Re-render single layer in this scene");
 }
 
 /* ****************************** opengl render *************************** */
@@ -3289,7 +3312,7 @@
 	
 	/* create render and render result */
 	oglrender->re= RE_NewRender(scene->id.name);
-	RE_InitState(oglrender->re, NULL, &scene->r, sizex, sizey, NULL);
+	RE_InitState(oglrender->re, NULL, &scene->r, NULL, sizex, sizey, NULL);
 	
 	rr= RE_AcquireResultWrite(oglrender->re);
 	if(rr->rectf==NULL)

Modified: trunk/blender/source/blender/editors/space_node/drawnode.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/drawnode.c	2010-01-06 00:02:37 UTC (rev 25758)
+++ trunk/blender/source/blender/editors/space_node/drawnode.c	2010-01-06 00:09:07 UTC (rev 25759)
@@ -545,16 +545,33 @@
 static void node_composit_buts_renderlayers(uiLayout *layout, bContext *C, PointerRNA *ptr)
 {
 	bNode *node= ptr->data;
-	uiLayout *col;
-
+	uiLayout *col, *row;
+	PointerRNA op_ptr;
+	PointerRNA scn_ptr;
+	PropertyRNA *prop;
+	const char *layer_name;
+	char scene_name[19];
+	
 	uiTemplateID(layout, C, ptr, "scene", NULL, NULL, NULL);
 	
 	if(!node->id) return;
 
 	col= uiLayoutColumn(layout, 0);
-	uiItemR(col, "", 0, ptr, "layer", 0);
+	row = uiLayoutRow(col, 0);
+	uiItemR(row, "", 0, ptr, "layer", 0);
 	
-	/* XXX Missing 're-render this layer' button - needs completely new implementation */
+	prop = RNA_struct_find_property(ptr, "layer");
+	if (!(RNA_property_enum_identifier(C, ptr, prop, RNA_property_enum_get(ptr, prop), &layer_name)))
+		return;
+	
+	scn_ptr = RNA_pointer_get(ptr, "scene");
+	RNA_string_get(&scn_ptr, "name", scene_name);
+	
+	WM_operator_properties_create(&op_ptr, "SCREEN_OT_render");
+	RNA_string_set(&op_ptr, "layer", layer_name);
+	RNA_string_set(&op_ptr, "scene", scene_name);
+	uiItemFullO(row, "", ICON_RENDER_STILL, "SCREEN_OT_render", op_ptr.data, WM_OP_INVOKE_DEFAULT, 0);
+
 }
 
 

Modified: trunk/blender/source/blender/editors/space_node/node_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_edit.c	2010-01-06 00:02:37 UTC (rev 25758)
+++ trunk/blender/source/blender/editors/space_node/node_edit.c	2010-01-06 00:09:07 UTC (rev 25759)
@@ -345,49 +345,6 @@
 
 #if 0
 
-/* node has to be of type 'render layers' */
-/* is a bit clumsy copying renderdata here... scene nodes use render size of current render */
-static void composite_node_render(SpaceNode *snode, bNode *node)
-{
-	RenderData rd;
-	Scene *scene= NULL;
-	int scemode, actlay;
-	
-	/* the button press won't show up otherwise, button hilites disabled */
-	force_draw(0);
-	
-	if(node->id && node->id!=(ID *)G.scene) {
-		scene= G.scene;
-		set_scene_bg((Scene *)node->id);
-		rd= G.scene->r;
-		G.scene->r.xsch= scene->r.xsch;
-		G.scene->r.ysch= scene->r.ysch;
-		G.scene->r.size= scene->r.size;
-		G.scene->r.mode &= ~(R_BORDER|R_DOCOMP);
-		G.scene->r.mode |= scene->r.mode & R_BORDER;
-		G.scene->r.border= scene->r.border;
-		G.scene->r.cfra= scene->r.cfra;
-	}
-	
-	scemode= G.scene->r.scemode;
-	actlay= G.scene->r.actlay;
-
-	G.scene->r.scemode |= R_SINGLE_LAYER|R_COMP_RERENDER;
-	G.scene->r.actlay= node->custom1;
-	
-	BIF_do_render(0);
-	
-	G.scene->r.scemode= scemode;
-	G.scene->r.actlay= actlay;
-
-	node->custom2= 0;
-	
-	if(scene) {
-		G.scene->r= rd;
-		set_scene_bg(scene);
-	}
-}
-
 static void composit_node_event(SpaceNode *snode, short event)
 {
 	

Modified: trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_nodetree.c	2010-01-06 00:02:37 UTC (rev 25758)
+++ trunk/blender/source/blender/makesrna/intern/rna_nodetree.c	2010-01-06 00:09:07 UTC (rev 25759)
@@ -1077,12 +1077,6 @@
 	RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Node_scene_layer_itemf");
 	RNA_def_property_ui_text(prop, "Layer", "");
 	RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
-	
-	/* TODO: comments indicate this might be a hack */
-	prop = RNA_def_property(srna, "re_render", PROP_BOOLEAN, PROP_NONE);
-	RNA_def_property_boolean_sdna(prop, NULL, "custom2", 1);
-	RNA_def_property_ui_text(prop, "Re-render", "");
-	RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
 }
 
 static void def_cmp_output_file(StructRNA *srna)

Modified: trunk/blender/source/blender/render/extern/include/RE_pipeline.h
===================================================================
--- trunk/blender/source/blender/render/extern/include/RE_pipeline.h	2010-01-06 00:02:37 UTC (rev 25758)
+++ trunk/blender/source/blender/render/extern/include/RE_pipeline.h	2010-01-06 00:09:07 UTC (rev 25759)
@@ -46,6 +46,7 @@
 struct RenderResult;
 struct ReportList;
 struct Scene;
+struct SceneRenderLayer;
 
 /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
 /* this include is what is exposed of render to outside world */
@@ -169,7 +170,7 @@
 float *RE_RenderLayerGetPass(struct RenderLayer *rl, int passtype);
 
 /* obligatory initialize call, disprect is optional */
-void RE_InitState (struct Render *re, struct Render *source, struct RenderData *rd, int winx, int winy, rcti *disprect);
+void RE_InitState (struct Render *re, struct Render *source, struct RenderData *rd, struct SceneRenderLayer *srl, int winx, int winy, rcti *disprect);
 
 /* use this to change disprect of active render */
 void RE_SetDispRect (struct Render *re, rcti *disprect);
@@ -200,7 +201,7 @@
 void RE_TileProcessor(struct Render *re, int firsttile, int threaded);
 
 /* only RE_NewRender() needed, main Blender render calls */
-void RE_BlenderFrame(struct Render *re, struct Scene *scene, int frame);
+void RE_BlenderFrame(struct Render *re, struct Scene *scene, struct SceneRenderLayer *srl, int frame);
 void RE_BlenderAnim(struct Render *re, struct Scene *scene, int sfra, int efra, int tfra, struct ReportList *reports);
 
 void RE_ReadRenderResult(struct Scene *scene, struct Scene *scenode);

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2010-01-06 00:02:37 UTC (rev 25758)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2010-01-06 00:09:07 UTC (rev 25759)
@@ -5605,7 +5605,7 @@
 	}
 	
 	re= RE_NewRender("_make sticky_");

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list