Revision: 41295
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41295
Author:   blendix
Date:     2011-10-26 14:05:01 +0000 (Wed, 26 Oct 2011)
Log Message:
-----------
Fix #29030: render operator only used scene property if layers was used, now it
is possible to specify the scene without the layer too.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/render/render_internal.c

Modified: trunk/blender/source/blender/editors/render/render_internal.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_internal.c       
2011-10-26 13:24:58 UTC (rev 41294)
+++ trunk/blender/source/blender/editors/render/render_internal.c       
2011-10-26 14:05:01 UTC (rev 41295)
@@ -187,10 +187,42 @@
 /* set callbacks, exported to sequence render too.
  Only call in foreground (UI) renders. */
 
+static void screen_render_scene_layer_set(wmOperator *op, Main *mainp, Scene 
**scene, SceneRenderLayer **srl)
+{
+       /* single layer re-render */
+       if(RNA_property_is_set(op->ptr, "scene")) {
+               Scene *scn;
+               char scene_name[MAX_ID_NAME-2];
+
+               RNA_string_get(op->ptr, "scene", scene_name);
+               scn = (Scene *)BLI_findstring(&mainp->scene, scene_name, 
offsetof(ID, name) + 2);
+               
+               if (scn) {
+                       /* camera switch wont have updated */
+                       scn->r.cfra= (*scene)->r.cfra;
+                       scene_camera_switch_update(scn);
+
+                       *scene = scn;
+               }
+       }
+
+       if(RNA_property_is_set(op->ptr, "layer")) {
+               SceneRenderLayer *rl;
+               char rl_name[RE_MAXNAME];
+
+               RNA_string_get(op->ptr, "layer", rl_name);
+               rl = (SceneRenderLayer *)BLI_findstring(&(*scene)->r.layers, 
rl_name, offsetof(SceneRenderLayer, name));
+               
+               if (rl)
+                       *srl = rl;
+       }
+}
+
 /* executes blocking render */
 static int screen_render_exec(bContext *C, wmOperator *op)
 {
        Scene *scene= CTX_data_scene(C);
+       SceneRenderLayer *srl= NULL;
        Render *re= RE_NewRender(scene->id.name);
        Image *ima;
        View3D *v3d= CTX_wm_view3d(C);
@@ -220,10 +252,13 @@
 
        RE_SetReports(re, op->reports);
 
+       /* custom scene and single layer re-render */
+       screen_render_scene_layer_set(op, mainp, &scene, &srl);
+
        if(is_animation)
                RE_BlenderAnim(re, mainp, scene, camera_override, lay, 
scene->r.sfra, scene->r.efra, scene->r.frame_step);
        else
-               RE_BlenderFrame(re, mainp, scene, NULL, camera_override, lay, 
scene->r.cfra, is_write_still);
+               RE_BlenderFrame(re, mainp, scene, srl, camera_override, lay, 
scene->r.cfra, is_write_still);
 
        RE_SetReports(re, NULL);
 
@@ -518,28 +553,11 @@
 
        jobflag= WM_JOB_EXCL_RENDER|WM_JOB_PRIORITY|WM_JOB_PROGRESS;
        
-       /* single layer re-render */
-       if(RNA_property_is_set(op->ptr, "layer")) {
-               SceneRenderLayer *rl;
-               Scene *scn;
-               char scene_name[MAX_ID_NAME-2], rl_name[RE_MAXNAME];
+       /* custom scene and single layer re-render */
+       screen_render_scene_layer_set(op, mainp, &scene, &srl);
 
-               RNA_string_get(op->ptr, "layer", rl_name);
-               RNA_string_get(op->ptr, "scene", scene_name);
-
-               scn = (Scene *)BLI_findstring(&mainp->scene, scene_name, 
offsetof(ID, name) + 2);
-               rl = (SceneRenderLayer *)BLI_findstring(&scene->r.layers, 
rl_name, offsetof(SceneRenderLayer, name));
-               
-               if (scn && rl) {
-                       /* camera switch wont have updated */
-                       scn->r.cfra= scene->r.cfra;
-                       scene_camera_switch_update(scn);
-
-                       scene = scn;
-                       srl = rl;
-               }
+       if(RNA_property_is_set(op->ptr, "layer"))
                jobflag |= WM_JOB_SUSPEND;
-       }
 
        /* job custom data */
        rj= MEM_callocN(sizeof(RenderJob), "render job");
@@ -611,7 +629,7 @@
 
        RNA_def_boolean(ot->srna, "animation", 0, "Animation", "Render files 
from the animation range of this scene");
        RNA_def_boolean(ot->srna, "write_still", 0, "Write Image", "Save 
rendered the image to the output path (used only when animation is disabled)");
-       RNA_def_string(ot->srna, "layer", "", RE_MAXNAME, "Render Layer", 
"Single render layer to re-render");
-       RNA_def_string(ot->srna, "scene", "", MAX_ID_NAME-2, "Scene", 
"Re-render single layer in this scene");
+       RNA_def_string(ot->srna, "layer", "", RE_MAXNAME, "Render Layer", 
"Single render layer to re-render (used only when animation is disabled)");
+       RNA_def_string(ot->srna, "scene", "", MAX_ID_NAME-2, "Scene", "Scene to 
render, current scene if not specified");
 }
 

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to