Made it so locked strips inside metastrips are transformed.
authorCampbell Barton <ideasman42@gmail.com>
Sun, 20 Jan 2008 17:53:58 +0000 (17:53 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Sun, 20 Jan 2008 17:53:58 +0000 (17:53 +0000)
Removed FTYPE from render output panel - was some old format that did index colors, and wasn't even used anywhere.

Added 2 options to the render output panel that can be used for a really basic local renderfarm (even artists can use it!),
"NoOverwrite" and "Touch"
When both are enabled, rendering 1 scene between many pc's on a fast network will populate the directory with frames.
Also useful to delete frames that have errors and re-render (without manually re-rendering each frame)

source/blender/blenkernel/intern/blender.c
source/blender/blenkernel/intern/scene.c
source/blender/include/butspace.h
source/blender/makesdna/DNA_scene_types.h
source/blender/python/api2_2x/sceneRender.c
source/blender/render/intern/source/pipeline.c
source/blender/src/buttons_scene.c
source/blender/src/editseq.c

index 9845f5711261983459076db438f8e5aa4ec6ed11..b470800cb8ad01f77def10192ae28633eeaddb8e 100644 (file)
@@ -307,7 +307,6 @@ static void clean_paths(Main *main)
                }
                BLI_clean(scene->r.backbuf);
                BLI_clean(scene->r.pic);
-               BLI_clean(scene->r.ftype);
                
                scene= scene->id.next;
        }
index 94dfa705dc2dc550a6e307e461a699f4ed89e8b3..23aca38463b20de67d5375b2dfbae82733182023 100644 (file)
@@ -257,7 +257,6 @@ Scene *add_scene(char *name)
 
        strcpy(sce->r.backbuf, "//backbuf");
        strcpy(sce->r.pic, U.renderdir);
-       strcpy(sce->r.ftype, "//ftype");
 
        BLI_init_rctf(&sce->r.safety, 0.1f, 0.9f, 0.1f, 0.9f);
        sce->r.osa= 8;
index 058b811aeba6f937a9bab48d618b777fb2a798e0..6d7a73eec54c86e75fe56414d5920ef8c3e31388 100644 (file)
@@ -308,7 +308,7 @@ void curvemap_buttons(struct uiBlock *block, struct CurveMapping *cumap, char la
 #define B_FS_PIC               1601
 #define B_FS_BACKBUF   1602
 
-#define B_FS_FTYPE             1604
+#define B_FS_FTYPE             1604 /* FTYPE is no more */
 #define B_DORENDER             1605
 #define B_DOANIM               1606
 #define B_PLAYANIM             1607
@@ -325,7 +325,7 @@ void curvemap_buttons(struct uiBlock *block, struct CurveMapping *cumap, char la
 #define B_PR_PANO              1619
 #define B_PR_NTSC              1620
 
-#define B_IS_FTYPE             1622
+#define B_IS_FTYPE             1622 /* FTYPE is nomore */
 #define B_IS_BACKBUF           1623
 #define B_PR_PC                        1624
 
index d5f3ce87cffd887d5c110a4ad359baedb6a9be7e..200e904bc88673a368010538df83741063ac45b8 100644 (file)
@@ -281,7 +281,7 @@ typedef struct RenderData {
        float YF_gamma, YF_exposure, YF_raybias, YF_AApixelsize, YF_AAthreshold;
 
        /* paths to backbufffer, output, ftype */
-       char backbuf[160], pic[160], ftype[160];
+       char backbuf[160], pic[160];
 
        /* stamps flags. */
        int stamp;
@@ -551,6 +551,9 @@ typedef struct Scene {
 #define R_THREADS              0x80000
 #define R_SPEED                        0x100000
 #define R_SSS                  0x200000
+#define R_NO_OVERWRITE 0x400000 /* skip existing files */
+#define R_TOUCH                        0x800000 /* touch files before rendering */
+
 
 /* filtertype */
 #define R_FILTER_BOX   0
@@ -610,7 +613,7 @@ typedef struct Scene {
 #define R_TARGA                0
 #define R_IRIS         1
 #define R_HAMX         2
-#define R_FTYPE                3
+#define R_FTYPE                3 /* ftype is nomore */
 #define R_JPEG90       4
 #define R_MOVIE                5
 #define R_IRIZ         7
index 66e2563f1e14a5fbffd73b9df84d62b9ec63fc13..5f71cfc4bd192e13e2104e001a6566515696bb36 100644 (file)
@@ -116,8 +116,6 @@ static PyObject *RenderData_SetRenderPath( BPy_RenderData *self,
                PyObject *args );
 static PyObject *RenderData_SetBackbufPath( BPy_RenderData *self,
                PyObject *args );
-static PyObject *RenderData_SetFtypePath( BPy_RenderData *self,
-               PyObject *args );
 static PyObject *RenderData_SetOversamplingLevel( BPy_RenderData * self,
                PyObject * args );
 static PyObject *RenderData_SetRenderWinSize( BPy_RenderData * self,
@@ -982,7 +980,6 @@ static int RenderData_setImageType( BPy_RenderData *self, PyObject *value )
        case R_HAMX :
        case R_IRIS :
        case R_IRIZ :
-       case R_FTYPE :
        case R_TIFF :
        case R_CINEON :
        case R_DPX :
@@ -2220,29 +2217,6 @@ static int RenderData_setBackbufPath( BPy_RenderData *self, PyObject *value )
        return 0;
 }
 
-PyObject *RenderData_getFtypePath( BPy_RenderData * self )
-{
-       return PyString_FromString( self->renderContext->ftype );
-}
-
-static int RenderData_setFtypePath( BPy_RenderData *self, PyObject *value )
-{
-       char *name;
-
-       name = PyString_AsString( value );
-       if( !name )
-               return EXPP_ReturnIntError( PyExc_TypeError, "expected a string" );
-
-       if( strlen( name ) >= sizeof(self->renderContext->ftype) )
-               return EXPP_ReturnIntError( PyExc_ValueError,
-                               "ftype path is too long" );
-
-       strcpy( self->renderContext->ftype, name );
-       EXPP_allqueue( REDRAWBUTSSCENE, 0 );
-
-       return 0;
-}
-
 PyObject *RenderData_getRenderWinSize( BPy_RenderData * self )
 {
        return PyInt_FromLong( (long) self->renderContext->size );
@@ -2507,10 +2481,6 @@ static PyGetSetDef BPy_RenderData_getseters[] = {
         (getter)RenderData_getBackbufPath, (setter)RenderData_setBackbufPath,
         "Path to a background image (setting loads image)",
         NULL},
-       {"ftypePath",
-        (getter)RenderData_getFtypePath, (setter)RenderData_setFtypePath,
-        "The path to Ftype file",
-        NULL},
        {"edgeColor",
         (getter)RenderData_getEdgeColor, (setter)RenderData_setEdgeColor,
         "RGB color triplet for edges in Toon shading",
@@ -2730,10 +2700,6 @@ static PyMethodDef BPy_RenderData_methods[] = {
        {"enableBackbuf", ( PyCFunction ) RenderData_EnableBackbuf,
         METH_VARARGS,
         "(bool) - enable/disable the backbuf image"},
-       {"setFtypePath", ( PyCFunction ) RenderData_SetFtypePath, METH_VARARGS,
-        "(string) - get/set the path to output the Ftype file"},
-       {"getFtypePath", ( PyCFunction ) RenderData_getFtypePath, METH_NOARGS,
-        "() - get the path to Ftype file"},
        {"enableExtensions", ( PyCFunction ) RenderData_EnableExtensions,
         METH_VARARGS,
         "(bool) - enable/disable windows extensions for output files"},
@@ -3140,7 +3106,6 @@ PyObject *Render_Init( void )
        PyModule_AddIntConstant( submodule, "HAMX", R_HAMX );
        PyModule_AddIntConstant( submodule, "IRIS", R_IRIS );
        PyModule_AddIntConstant( submodule, "IRISZ", R_IRIZ );
-       PyModule_AddIntConstant( submodule, "FTYPE", R_FTYPE );
        PyModule_AddIntConstant( submodule, "PAL", B_PR_PAL );
        PyModule_AddIntConstant( submodule, "NTSC", B_PR_NTSC );
        PyModule_AddIntConstant( submodule, "DEFAULT", B_PR_PRESET );
@@ -3204,13 +3169,6 @@ static PyObject *RenderData_SetBackbufPath( BPy_RenderData *self,
                        (setter)RenderData_setBackbufPath );
 }
 
-static PyObject *RenderData_SetFtypePath( BPy_RenderData *self,
-               PyObject *args )
-{
-       return EXPP_setterWrapperTuple( (void *)self, args,
-                       (setter)RenderData_setFtypePath );
-}
-
 static PyObject *RenderData_SetOversamplingLevel( BPy_RenderData * self,
                PyObject * args )
 {
index ee50d28d55df80210075bfe69c36742e5fd60b45..ab66be1b6928d319283350fb31040536b46f347f 100644 (file)
@@ -2347,12 +2347,24 @@ void RE_BlenderAnim(Render *re, Scene *scene, int sfra, int efra)
                        }
                }
        } else {
-               for(scene->r.cfra= sfra; 
-                   scene->r.cfra<=efra; scene->r.cfra++) {
+               for(scene->r.cfra= sfra; scene->r.cfra<=efra; scene->r.cfra++) {
+                       char name[FILE_MAX];
+                       if (scene->r.mode & (R_NO_OVERWRITE | R_TOUCH) ) {
+                               BKE_makepicstring(name, scene->r.pic, scene->r.cfra, scene->r.imtype);
+                       }
+                       
+                       if (scene->r.mode & R_NO_OVERWRITE && BLI_exist(name)) {
+                               printf("skipping existing frame \"%s\"\n", name);
+                               continue;
+                       }
+                       if (scene->r.mode & R_TOUCH && !BLI_exist(name)) {
+                               BLI_touch(name);
+                       }
+
                        re->r.cfra= scene->r.cfra;         /* weak.... */
-               
+                       
                        do_render_all_options(re);
-
+                       
                        if(re->test_break() == 0) {
                                do_write_image_or_movie(re, scene, mh);
                        }
index 6c465cae95388304c4449430e2ad978874caefad..c3209dfa8148819726d1bed85d480344a9defd6f 100644 (file)
@@ -1165,12 +1165,6 @@ static void backbuf_pic(char *name)
        BIF_undo_push("Change background picture");
 }
 
-static void ftype_pic(char *name)
-{
-       strcpy(G.scene->r.ftype, name);
-       allqueue(REDRAWBUTSSCENE, 0);
-}
-
 static void run_playanim(char *file) 
 {
        extern char bprogname[];        /* usiblender.c */
@@ -1269,15 +1263,6 @@ void do_render_panels(unsigned short event)
                else
                        activate_fileselect(FILE_SPECIAL, "SELECT BACKBUF PICTURE", G.scene->r.backbuf, backbuf_pic);
                break;
-
-       case B_FS_FTYPE:
-               sa= closest_bigger_area();
-               areawinset(sa->win);
-               if(G.qual == LR_CTRLKEY)
-                       activate_imageselect(FILE_SPECIAL, "SELECT FTYPE", G.scene->r.ftype, ftype_pic);
-               else
-                       activate_fileselect(FILE_SPECIAL, "SELECT FTYPE", G.scene->r.ftype, ftype_pic);
-               break;
        
        case B_PR_PAL:
                G.scene->r.xsch= 720;
@@ -1841,7 +1826,6 @@ static void render_panel_output(void)
        uiBlock *block;
        char *strp;
 
-
        block= uiNewBlock(&curarea->uiblocks, "render_panel_output", UI_EMBOSS, UI_HELV, curarea->win);
        if(uiNewPanel(curarea, block, "Output", "Render", 0, 0, 318, 204)==0) return;
        
@@ -1850,17 +1834,19 @@ static void render_panel_output(void)
        uiDefBut(block, TEX,0,"",                                                       31, 190, 279, 20,G.scene->r.pic, 0.0,79.0, 0, 0, "Directory/name to save rendered Pics to");
        uiDefIconBut(block, BUT,B_FS_BACKBUF, ICON_FILESEL, 10, 168, 20, 20, 0, 0, 0, 0, 0, "Open Fileselect to get Backbuf image");
        uiDefBut(block, TEX,0,"",                                                       31, 168, 279, 20,G.scene->r.backbuf, 0.0,79.0, 0, 0, "Image to use as background for rendering");
-       uiDefIconBut(block, BUT,B_FS_FTYPE, ICON_FILESEL,       10, 146, 20, 20, 0, 0, 0, 0, 0, "Open Fileselect to get Ftype image");
-       uiDefBut(block, TEX,0,"",                                                       31, 146, 279, 20,G.scene->r.ftype,0.0,79.0, 0, 0, "Image to use with FTYPE Image type");
        uiBlockEndAlign(block);
        
+       uiBlockBeginAlign(block);
+       uiDefButBitI(block, TOG, R_NO_OVERWRITE, B_NOP, "No Overwrite", 10, 142, 90, 20, &G.scene->r.mode, 0.0, 0.0, 0, 0, "Skip rendering frames when the file exists (image output only)");
+       uiDefButBitI(block, TOG, R_TOUCH, B_NOP, "Touch", 100, 142, 50, 20, &G.scene->r.mode, 0.0, 0.0, 0, 0, "Create an empty file before rendering each frame");
+       uiBlockEndAlign(block);
        
        /* SET BUTTON */
        uiBlockBeginAlign(block);
        id= (ID *)G.scene->set;
        IDnames_to_pupstring(&strp, NULL, NULL, &(G.main->scene), id, &(G.buts->menunr));
        if(strp[0])
-               uiDefButS(block, MENU, B_SETBROWSE, strp, 10, 120, 20, 20, &(G.buts->menunr), 0, 0, 0, 0, "Scene to link as a Set");
+               uiDefButS(block, MENU, B_SETBROWSE, strp, 10, 114, 20, 20, &(G.buts->menunr), 0, 0, 0, 0, "Scene to link as a Set");
        MEM_freeN(strp);
 
        if(G.scene->set) {
@@ -1872,8 +1858,8 @@ static void render_panel_output(void)
        uiBlockEndAlign(block);
 
        uiBlockSetCol(block, TH_BUT_SETTING1);
-       uiDefButBitS(block, TOG, R_BACKBUF, B_NOP,"Backbuf",    10, 94, 80, 20, &G.scene->r.bufflag, 0, 0, 0, 0, "Enable/Disable use of Backbuf image");        
-       uiDefButS(block, NUM, B_NOP, "Threads:",                                10, 68, 100, 20, &G.scene->r.threads, 1, BLENDER_MAX_THREADS, 0, 0, "Amount of threads for render (takes advantage of multi-core and multi-processor computers)");
+       uiDefButBitS(block, TOG, R_BACKBUF, B_NOP,"Backbuf",    10, 89, 80, 20, &G.scene->r.bufflag, 0, 0, 0, 0, "Enable/Disable use of Backbuf image");        
+       uiDefButS(block, NUM, B_NOP, "Threads:",                                10, 63, 100, 20, &G.scene->r.threads, 1, BLENDER_MAX_THREADS, 0, 0, "Amount of threads for render (takes advantage of multi-core and multi-processor computers)");
        uiBlockSetCol(block, TH_AUTO);
                
        uiBlockBeginAlign(block);
@@ -1887,20 +1873,18 @@ static void render_panel_output(void)
        uiDefButS(block, MENU, B_REDR, "Render Display %t|Render Window %x1|Image Editor %x0|Full Screen %x2",  
                                        72, 10, 120, 19, &G.displaymode, 0.0, (float)R_DISPLAYWIN, 0, 0, "Sets render output display");
 
-       uiDefButBitS(block, TOG, R_EXTENSION, B_NOP, "Extensions", 205, 10, 105, 19, &G.scene->r.scemode, 0.0, 0.0, 0, 0, "Adds filetype extensions to the filename when rendering animations");
-
        /* Dither control */
        uiDefButF(block, NUM,B_DIFF, "Dither:",         205,31,105,19, &G.scene->r.dither_intensity, 0.0, 2.0, 0, 0, "The amount of dithering noise present in the output image (0.0 = no dithering)");
        
        /* Toon shading buttons */
        uiBlockBeginAlign(block);
-       uiDefButBitI(block, TOG, R_EDGE, B_NOP,"Edge",   100, 94, 70, 20, &G.scene->r.mode, 0, 0, 0, 0, "Enable Toon Edge-enhance");
-       uiDefBlockBut(block, edge_render_menu, NULL, "Edge Settings", 170, 94, 140, 20, "Display Edge settings");
+       uiDefButBitI(block, TOG, R_EDGE, B_NOP,"Edge",   100, 89, 70, 20, &G.scene->r.mode, 0, 0, 0, 0, "Enable Toon Edge-enhance");
+       uiDefBlockBut(block, edge_render_menu, NULL, "Edge Settings", 170, 89, 140, 20, "Display Edge settings");
        uiBlockEndAlign(block);
        
        uiBlockBeginAlign(block);
-       uiDefButBitS(block, TOG, R_NO_TEX, B_NOP, "Disable Tex", 115, 68, 70, 20, &G.scene->r.scemode, 0.0, 0.0, 0, 0, "Disables Textures for render");
-       uiDefButBitS(block, TOG, R_FREE_IMAGE, B_NOP, "Free Tex Images", 205, 68, 100, 20, &G.scene->r.scemode, 0.0, 0.0, 0, 0, "Frees all Images used by Textures after each render");
+       uiDefButBitS(block, TOG, R_NO_TEX, B_NOP, "Disable Tex", 115, 63, 70, 20, &G.scene->r.scemode, 0.0, 0.0, 0, 0, "Disables Textures for render");
+       uiDefButBitS(block, TOG, R_FREE_IMAGE, B_NOP, "Free Tex Images", 205, 63, 100, 20, &G.scene->r.scemode, 0.0, 0.0, 0, 0, "Frees all Images used by Textures after each render");
        uiBlockEndAlign(block);
 }
 
index e75a38d3a49b2fd9f4881fe66873a09829c7956f..e0774fcae44f2b41c3daae2fbea2d82d9eb282df 100644 (file)
@@ -2872,10 +2872,10 @@ static void transform_grab_xlimits(Sequence *seq, int leftflag, int rightflag)
 
 static int can_transform_seq_test_func(Sequence * seq)
 {
-       if((seq->flag & SELECT) && !(seq->flag & SEQ_LOCK)) {
+       if((seq->flag & SELECT) && !(seq->depth==0 && seq->flag & SEQ_LOCK)) {
                return BUILD_SEQAR_COUNT_CURRENT | BUILD_SEQAR_COUNT_CHILDREN;
        }
-       if ((seq->flag & SEQ_LOCK) && !(seq->type & SEQ_EFFECT)) {
+       if ((seq->depth==0 && seq->flag & SEQ_LOCK) && !(seq->type & SEQ_EFFECT)) {
                if (seq->type != SEQ_META) {
                        return BUILD_SEQAR_COUNT_NOTHING;
                } else {
@@ -2934,7 +2934,7 @@ void transform_seq(int mode, int context)
        
        if (seqar) {
                for(seq_index=0, seq=seqar[0]; seq_index < totseq_index; seq=seqar[++seq_index]) {
-                       if((seq->flag & SELECT) && !(seq->flag & SEQ_LOCK)) 
+                       if((seq->flag & SELECT) && !(seq->depth==0 && seq->flag & SEQ_LOCK)) 
                                totstrip++;
                }
        }
@@ -2957,7 +2957,7 @@ void transform_seq(int mode, int context)
        ts=transmain= MEM_callocN(totstrip*sizeof(TransSeq), "transseq");
 
        for(seq_index=0, seq=seqar[0]; seq_index < totseq_index; seq=seqar[++seq_index]) {
-               if((seq->flag & SELECT) && !(seq->flag & SEQ_LOCK)) {
+               if((seq->flag & SELECT) && !(seq->depth==0 && seq->flag & SEQ_LOCK)) {
                        ts->start= seq->start;
                        ts->machine= seq->machine;
                        ts->startstill= seq->startstill;
@@ -3143,7 +3143,7 @@ void transform_seq(int mode, int context)
                        if (mode=='g' && !snapskip) {
                                /* Grab */
                                for(seq_index=0, seq=seqar[0]; seq_index < totseq_index; seq=seqar[++seq_index]) {
-                                       if(seq->flag & SELECT && !(seq->flag & SEQ_LOCK)) {
+                                       if(seq->flag & SELECT && !(seq->depth==0 && seq->flag & SEQ_LOCK)) {
                                                int myofs;
                                                // SEQ_DEBUG_INFO(seq);
                                                
@@ -3195,7 +3195,7 @@ void transform_seq(int mode, int context)
                                
                                /* Extend, Similar to grab but operate on one side of the cursor */
                                for(seq_index=0, seq=seqar[0]; seq_index < totseq_index; seq=seqar[++seq_index]) {
-                                       if(seq->flag & SELECT && !(seq->flag & SEQ_LOCK)) {
+                                       if(seq->flag & SELECT && !(seq->depth==0 && seq->flag & SEQ_LOCK)) {
                                                /* only move the contents of the metastrip otherwise the transformation is applied twice */
                                                if (sequence_is_free_transformable(seq) && seq->type != SEQ_META) {
                                                        
@@ -3307,7 +3307,7 @@ void transform_seq(int mode, int context)
 
                        /* test for effect and overlap */
                        for(seq_index=0, seq=seqar[0]; seq_index < totseq_index; seq=seqar[++seq_index]) {
-                               if((seq->depth==0) && (seq->flag & SELECT) && !(seq->flag & SEQ_LOCK)) {
+                               if((seq->depth==0) && (seq->flag & SELECT) && !(seq->depth==0 && seq->flag & SEQ_LOCK)) {
                                        seq->flag &= ~SEQ_OVERLAP;
                                        if( test_overlap_seq(seq) ) {
                                                seq->flag |= SEQ_OVERLAP;
@@ -3358,7 +3358,7 @@ void transform_seq(int mode, int context)
 
                ts= transmain;
                for(seq_index=0, seq=seqar[0]; seq_index < totseq_index; seq=seqar[++seq_index]) {
-                       if(seq->flag & SELECT && !(seq->flag & SEQ_LOCK)) {
+                       if(seq->flag & SELECT && !(seq->depth==0 && seq->flag & SEQ_LOCK)) {
                                seq->start= ts->start;
                                seq->machine= ts->machine;
                                seq->startstill= ts->startstill;
@@ -3376,7 +3376,7 @@ void transform_seq(int mode, int context)
                                else if(seq->seq3 && seq->seq3->flag & SELECT) calc_sequence(seq);
                        }
                }
-               
+       
                /* Markers */
                if (sseq->flag & SEQ_MARKER_TRANS) {
                        for(a=0, marker= G.scene->markers.first; marker; marker= marker->next) {
@@ -3642,7 +3642,7 @@ void seq_snap(short event)
 
        /* also check metas */
        WHILE_SEQ(ed->seqbasep) {
-               if (seq->flag & SELECT && !(seq->flag & SEQ_LOCK) &&
+               if (seq->flag & SELECT && !(seq->depth==0 && seq->flag & SEQ_LOCK) &&
                    sequence_is_free_transformable(seq)) {
                        if((seq->flag & (SEQ_LEFTSEL+SEQ_RIGHTSEL))==0) {
                                seq->start= CFRA-seq->startofs+seq->startstill;
@@ -3661,7 +3661,7 @@ void seq_snap(short event)
 
        /* test for effects and overlap */
        WHILE_SEQ(ed->seqbasep) {
-               if(seq->flag & SELECT && !(seq->flag & SEQ_LOCK)) {
+               if(seq->flag & SELECT && !(seq->depth==0 && seq->flag & SEQ_LOCK)) {
                        seq->flag &= ~SEQ_OVERLAP;
                        if( test_overlap_seq(seq) ) {
                                shuffle_seq(seq);