fix [#32020] Image will not render in second (any scene other than first) if scene...
authorCampbell Barton <ideasman42@gmail.com>
Sun, 8 Jul 2012 00:04:41 +0000 (00:04 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Sun, 8 Jul 2012 00:04:41 +0000 (00:04 +0000)
source/blender/editors/space_image/image_buttons.c
source/blender/imbuf/intern/openexr/openexr_api.cpp
source/blender/imbuf/intern/openexr/openexr_multi.h
source/blender/imbuf/intern/openexr/openexr_stub.cpp
source/blender/makesdna/DNA_ID.h
source/blender/render/extern/include/RE_pipeline.h
source/blender/render/intern/source/convertblender.c
source/blender/render/intern/source/external_engine.c
source/blender/render/intern/source/occlusion.c
source/blender/render/intern/source/pipeline.c
source/blender/render/intern/source/render_result.c

index 92c339d767284219778b7dac392ad04da2b64fdf..116e155f50151817bcc2cce7566e08a69494d5cc 100644 (file)
@@ -372,7 +372,7 @@ static char *slot_menu(void)
 static char *layer_menu(RenderResult *rr, short *UNUSED(curlay))
 {
        RenderLayer *rl;
-       int len = 64 + 32 * BLI_countlist(&rr->layers);
+       int len = 64 + RE_MAXNAME * BLI_countlist(&rr->layers);
        short a, nr = 0;
        char *str = MEM_callocN(len, "menu layers");
        
index 18957cb826048116a7a017c334cff683e4e38ed5..f5479bce5706154f7ff69dc34ca3373c9e3fc6a4 100644 (file)
@@ -665,9 +665,9 @@ void IMB_exr_read_channels(void *handle)
 }
 
 void IMB_exr_multilayer_convert(void *handle, void *base,
-                                void * (*addlayer)(void *base, char *str),
-                                void (*addpass)(void *base, void *lay, char *str,
-                                                float *rect, int totchan, char *chan_id))
+                                void * (*addlayer)(void *base, const char *str),
+                                void (*addpass)(void *base, void *lay, const char *str,
+                                                float *rect, int totchan, const char *chan_id))
 {
        ExrHandle *data = (ExrHandle *)handle;
        ExrLayer *lay;
@@ -908,14 +908,6 @@ static ExrHandle *imb_exr_begin_read_mem(InputFile *file, int width, int height)
 
 /* ********************************************************* */
 
-typedef struct RGBA {
-       float r;
-       float g;
-       float b;
-       float a;
-} RGBA;
-
-
 /* debug only */
 static void exr_print_filecontents(InputFile *file)
 {
index 523dc8120c4b9fa48aead9ca0ebe07316d2d23db..78071975c72616327dcadc62a264b0469d12bed0 100644 (file)
@@ -37,9 +37,9 @@
 
 /* Note: as for now openexr only supports 32 chars in channel names.
  * This api also supports max 8 channels per pass now. easy to fix! */
-#define EXR_LAY_MAXNAME     19
+#define EXR_LAY_MAXNAME     51
 #define EXR_PASS_MAXNAME    11
-#define EXR_TOT_MAXNAME     32
+#define EXR_TOT_MAXNAME     64
 #define EXR_PASS_MAXCHAN    8
 
 
@@ -62,8 +62,8 @@ void    IMB_exrtile_write_channels(void *handle, int partx, int party, int level
 void    IMB_exrtile_clear_channels(void *handle);
 
 void    IMB_exr_multilayer_convert(void *handle, void *base,
-                                   void * (*addlayer)(void *base, char *str),
-                                   void (*addpass)(void *base, void *lay, char *str, float *rect, int totchan, char *chan_id));
+                                   void * (*addlayer)(void *base, const char *str),
+                                   void (*addpass)(void *base, void *lay, const char *str, float *rect, int totchan, const char *chan_id));
 
 void    IMB_exr_close(void *handle);
 
index e896fc58cf3077f7fe6a1989e314bd90b9e3f743..7262656d4e82565e3bb12b65f2abdbeb922606cf 100644 (file)
@@ -48,8 +48,8 @@ void  IMB_exrtile_write_channels      (void *handle, int partx, int party, int level)
 void   IMB_exrtile_clear_channels      (void *handle) { (void)handle; }
 
 void    IMB_exr_multilayer_convert     (void *handle, void *base,  
-                                                                        void * (*addlayer)(void *base, char *str), 
-                                                                        void (*addpass)(void *base, void *lay, char *str, float *rect, int totchan, char *chan_id))
+                                                                        void * (*addlayer)(void *base, const char *str),
+                                                                        void (*addpass)(void *base, void *lay, const char *str, float *rect, int totchan, const char *chan_id))
                                                                        {
                                                                                (void)handle; (void)base; (void)addlayer; (void)addpass;
                                                                        }
index 95eadc23ef476bbbab63ccbf51107ce684717e99..fe2e218637a9d17fdf9dbc18bed842d51d585c5c 100644 (file)
@@ -108,7 +108,7 @@ typedef struct ID {
        void *next, *prev;
        struct ID *newid;
        struct Library *lib;
-       char name[66];
+       char name[66]; /* MAX_ID_NAME */
        short pad, us;
        /**
         * LIB_... flags report on status of the datablock this ID belongs
index 4e33e4d7e2d0ef32c59e7ce6f219dd5bcd6d7d7b..8ca229c1a1b2edecd538c93499a576789be5c4af 100644 (file)
@@ -51,8 +51,8 @@ struct EnvMap;
 /* this include is what is exposed of render to outside world */
 /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
 
-
-#define RE_MAXNAME     32
+/* length of the scene name + passname */
+#define RE_MAXNAME     ((MAX_ID_NAME - 2) + 10)
 
 /* only used as handle */
 typedef struct Render Render;
@@ -81,7 +81,7 @@ typedef struct RenderLayer {
        struct RenderLayer *next, *prev;
        
        /* copy of RenderData */
-       char name[RE_MAXNAME];          
+       char name[RE_MAXNAME];
        unsigned int lay, lay_zmask, lay_exclude;
        int layflag, passflag, pass_xor;                
        
@@ -144,8 +144,7 @@ typedef struct RenderStats {
        short curfield, curblur, curpart, partsdone, convertdone, curfsa;
        double starttime, lastframetime;
        const char *infostr, *statstr;
-       char scenename[32];
-       
+       char scene_name[MAX_ID_NAME - 2];
 } RenderStats;
 
 /* *********************** API ******************** */
index cb6a0fd1198c1dc79bc5afdde95a04ae07360794..803a9a95571ccafc8c30aa6deb546c7627c5e75a 100644 (file)
@@ -5038,7 +5038,7 @@ void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int l
        /* per second, per object, stats print this */
        re->i.infostr= "Preparing Scene data";
        re->i.cfra= scene->r.cfra;
-       BLI_strncpy(re->i.scenename, scene->id.name+2, sizeof(re->i.scenename));
+       BLI_strncpy(re->i.scene_name, scene->id.name + 2, sizeof(re->i.scene_name));
        
        /* XXX add test if dbase was filled already? */
        
index 75206f10f847e935b55f6506644cd2d15a1876f7..1180e74d39184974709a4145ffa82fc72952b477 100644 (file)
@@ -305,7 +305,7 @@ int RE_engine_render(Render *re, int do_all)
 
        /* set render info */
        re->i.cfra = re->scene->r.cfra;
-       BLI_strncpy(re->i.scenename, re->scene->id.name + 2, sizeof(re->i.scenename));
+       BLI_strncpy(re->i.scene_name, re->scene->id.name + 2, sizeof(re->i.scene_name));
        re->i.totface = re->i.totvert = re->i.totstrand = re->i.totlamp = re->i.tothalo = 0;
 
        /* render */
index e8765b4c3ac84b68694feecf44e188fed8dc5882..485dd005be7e3c5331c661f05eac01ae39ffceb8 100644 (file)
@@ -768,6 +768,8 @@ static void vec_add_dir(float r[3], const float v1[3], const float v2[3], const
        r[2] = v1[2] + fac * (v2[2] - v1[2]);
 }
 
+/* TODO: exact duplicate of ff_visible_quad() in math_geom.c
+ *       why not de-duplicate? (also above helper func) */
 static int occ_visible_quad(const float p[3], const float n[3],
                             const float v0[3], const float v1[3], const float v2[3],
                             float q0[3], float q1[3], float q2[3], float q3[3])
@@ -1129,6 +1131,8 @@ static void normalizef(float *n)
        } 
 }
 
+/* TODO: exact duplicate of ff_quad_form_factor() in math_geom.c
+ *       why not de-duplicate? (also above helper func) */
 static float occ_quad_form_factor(const float p[3], const float n[3], const float q0[3], const float q1[3], const float q2[3], const float q3[3])
 {
        float r0[3], r1[3], r2[3], r3[3], g0[3], g1[3], g2[3], g3[3];
index 3de64996311f05aa63b4bfa30553f572730f5bac..77f75caa36a91725b1299fad6aeef15be5d9b8d3 100644 (file)
@@ -166,9 +166,9 @@ static void stats_background(void *UNUSED(arg), RenderStats *rs)
        }
        else {
                if (rs->tothalo)
-                       fprintf(stdout, "Sce: %s Ve:%d Fa:%d Ha:%d La:%d", rs->scenename, rs->totvert, rs->totface, rs->tothalo, rs->totlamp);
+                       fprintf(stdout, "Sce: %s Ve:%d Fa:%d Ha:%d La:%d", rs->scene_name, rs->totvert, rs->totface, rs->tothalo, rs->totlamp);
                else
-                       fprintf(stdout, "Sce: %s Ve:%d Fa:%d La:%d", rs->scenename, rs->totvert, rs->totface, rs->totlamp);
+                       fprintf(stdout, "Sce: %s Ve:%d Fa:%d La:%d", rs->scene_name, rs->totvert, rs->totface, rs->totlamp);
        }
 
        BLI_callback_exec(G.main, NULL, BLI_CB_EVT_RENDER_STATS);
index ddb24e134df3e4ec4b69adf31b135f11381f3175..5da661e718263cc4d6b9caba6a1977fe04c754f8 100644 (file)
@@ -582,7 +582,7 @@ RenderResult *render_result_new_full_sample(Render *re, ListBase *lb, rcti *part
 }
 
 /* callbacks for render_result_new_from_exr */
-static void *ml_addlayer_cb(void *base, char *str)
+static void *ml_addlayer_cb(void *base, const char *str)
 {
        RenderResult *rr = base;
        RenderLayer *rl;
@@ -594,7 +594,7 @@ static void *ml_addlayer_cb(void *base, char *str)
        return rl;
 }
 
-static void ml_addpass_cb(void *UNUSED(base), void *lay, char *str, float *rect, int totchan, char *chan_id)
+static void ml_addpass_cb(void *UNUSED(base), void *lay, const char *str, float *rect, int totchan, const char *chan_id)
 {
        RenderLayer *rl = lay;
        RenderPass *rpass = MEM_callocN(sizeof(RenderPass), "loaded pass");
@@ -618,7 +618,7 @@ static void ml_addpass_cb(void *UNUSED(base), void *lay, char *str, float *rect,
 /* from imbuf, if a handle was returned we convert this to render result */
 RenderResult *render_result_new_from_exr(void *exrhandle, int rectx, int recty)
 {
-       RenderResult *rr = MEM_callocN(sizeof(RenderResult), "loaded render result");
+       RenderResult *rr = MEM_callocN(sizeof(RenderResult), __func__);
        RenderLayer *rl;
        RenderPass *rpass;