1) Revert previous commit, rendering negative won't work that simple...
authorTon Roosendaal <ton@blender.org>
Thu, 14 Feb 2008 18:56:14 +0000 (18:56 +0000)
committerTon Roosendaal <ton@blender.org>
Thu, 14 Feb 2008 18:56:14 +0000 (18:56 +0000)
   Needs much more attention.
2) Fix for zcombine node:
   - it skipped execution when no image rgba out was used
   - didnt work for FSA yet

source/blender/makesdna/DNA_scene_types.h
source/blender/nodes/intern/CMP_nodes/CMP_zcombine.c
source/blender/render/intern/source/shadeoutput.c

index e600b3ea2429970d2ec940c6dc65196b76b1d0f5..a87722c42df4afa9c129ffdd62fe906210b5f7c5 100644 (file)
@@ -306,6 +306,19 @@ typedef struct RenderData {
        float simplify_aosss;
 } RenderData;
 
+/* control render convert and shading engine */
+typedef struct RenderProfile {
+       struct RenderProfile *next, *prev;
+       char name[32];
+       
+       short particle_perc;
+       short subsurf_max;
+       short shadbufsample_max;
+       short pad1;
+       
+       float ao_error, pad2;
+       
+} RenderProfile;
 
 typedef struct GameFraming {
        float col[3];
@@ -330,7 +343,7 @@ typedef struct ImagePaintSettings {
 } ImagePaintSettings;
 
 typedef struct ParticleBrushData {
-       short size, strength;   /* commong settings */
+       short size, strength;   /* common settings */
        short step, invert;             /* for specific brushes only */
 } ParticleBrushData;
 
index eb9391006446679bc6c4ea31aededd60ffd567ae..daf61609692c09a30c81d30fa394f0f85b40297e 100644 (file)
@@ -52,6 +52,9 @@ static void do_zcombine(bNode *node, float *out, float *src1, float *z1, float *
        }
        else {
                QUATCOPY(out, src2);
+               
+               if(node->custom1)
+                       *z1= *z2;
        }
 }
 
@@ -78,54 +81,57 @@ static void do_zcombine_add(bNode *node, float *out, float *col1, float *col2, f
 static void node_composit_exec_zcombine(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
 {
        RenderData *rd= data;
-       
+       CompBuf *cbuf= in[0]->data;
+       CompBuf *zbuf;
+
        /* stack order in: col z col z */
        /* stack order out: col z */
-       if(out[0]->hasoutput==0) 
+       if(out[0]->hasoutput==0 && out[1]->hasoutput==0
                return;
        
        /* no input image; do nothing now */
        if(in[0]->data==NULL) {
                return;
        }
-       else if(rd->scemode & R_FULL_SAMPLE) {
+       
+       if(out[1]->hasoutput) {
+               /* copy or make a buffer for for the first z value, here we write result in */
+               if(in[1]->data)
+                       zbuf= dupalloc_compbuf(in[1]->data);
+               else {
+                       float *zval;
+                       int tot= cbuf->x*cbuf->y;
+                       
+                       zbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_VAL, 1);
+                       for(zval= zbuf->rect; tot; tot--, zval++)
+                               *zval= in[1]->vec[0];
+               }
+               /* lazy coder hack */
+               node->custom1= 1;
+               out[1]->data= zbuf;
+       }
+       else {
+               node->custom1= 0;
+               zbuf= in[1]->data;
+       }
+       
+       if(rd->scemode & R_FULL_SAMPLE) {
                /* make output size of first input image */
-               CompBuf *cbuf= in[0]->data;
                CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); // allocs
                
-               composit4_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, in[1]->data, in[1]->vec, in[2]->data, in[2]->vec, 
+               composit4_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, zbuf, in[1]->vec, in[2]->data, in[2]->vec, 
                                                                  in[3]->data, in[3]->vec, do_zcombine, CB_RGBA, CB_VAL, CB_RGBA, CB_VAL);
                
                out[0]->data= stackbuf;
        }
        else {
                /* make output size of first input image */
-               CompBuf *cbuf= in[0]->data;
                CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); /* allocs */
-               CompBuf *zbuf, *mbuf;
+               CompBuf *mbuf;
                float *fp;
                int x;
                char *aabuf;
                
-               if(out[1]->hasoutput) {
-                       /* copy or make a buffer for for the first z value, here we write result in */
-                       if(in[1]->data)
-                               zbuf= dupalloc_compbuf(in[1]->data);
-                       else {
-                               float *zval;
-                               int tot= cbuf->x*cbuf->y;
-                               
-                               zbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_VAL, 1);
-                               for(zval= zbuf->rect; tot; tot--, zval++)
-                                       *zval= in[1]->vec[0];
-                       }
-                       /* lazy coder hack */
-                       node->custom1= 1;
-               }
-               else {
-                       node->custom1= 0;
-                       zbuf= in[1]->data;
-               }
                
                /* make a mask based on comparison, optionally write zvalue */
                mbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_VAL, 1);
@@ -153,9 +159,8 @@ static void node_composit_exec_zcombine(void *data, bNode *node, bNodeStack **in
                MEM_freeN(aabuf);
                
                out[0]->data= stackbuf;
-               if(node->custom1)
-                       out[1]->data= zbuf;
        }
+
 }
 
 bNodeType cmp_node_zcombine= {
index 785baf5e684e50b7a038c2a57bdd3e50a67c86fb..de5cc04427442a977c6996c0672de97b29e93edc 100644 (file)
@@ -1516,25 +1516,10 @@ static void shade_lamp_loop_only_shadow(ShadeInput *shi, ShadeResult *shr)
 /* let's map negative light as if it mirrors positive light, otherwise negative values disappear */
 static void wrld_exposure_correct(float *diff)
 {
-       float f= diff[0];
-       
-       if(f>0.0f)
-               diff[0]= R.wrld.linfac*(1.0f-exp( f*R.wrld.logfac) );
-       else
-               diff[0]= - R.wrld.linfac*(1.0f-exp( - f*R.wrld.logfac) );
-       
-       f= diff[1];
-       if(f>0.0f)
-               diff[1]= R.wrld.linfac*(1.0f-exp( f*R.wrld.logfac) );
-       else
-               diff[1]= - R.wrld.linfac*(1.0f-exp( - f*R.wrld.logfac) );
-       
-       f= diff[2];
-       if(f>0.0f)
-               diff[2]= R.wrld.linfac*(1.0f-exp( f*R.wrld.logfac) );
-       else
-               diff[2]= - R.wrld.linfac*(1.0f-exp( - f*R.wrld.logfac) );
        
+       diff[0]= R.wrld.linfac*(1.0f-exp( diff[0]*R.wrld.logfac) );
+       diff[1]= R.wrld.linfac*(1.0f-exp( diff[1]*R.wrld.logfac) );
+       diff[2]= R.wrld.linfac*(1.0f-exp( diff[2]*R.wrld.logfac) );
 }
 
 void shade_lamp_loop(ShadeInput *shi, ShadeResult *shr)