[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