svn merge -r 16866:17042 https://svn.blender.org/svnroot/bf-blender/trunk/blender
[blender-staging.git] / source / blender / render / intern / source / shadeinput.c
index 476330152ecd47dbf90f67ff1dc55fa6dd2df9a3..aa11e3d75ddaf2e23d5a9cb101f906ed3f7d3ec0 100644 (file)
@@ -135,6 +135,12 @@ void shade_material_loop(ShadeInput *shi, ShadeResult *shr)
        }       
 }
 
+/* delivers a fully filled in ShadeResult, for all passes */
+void shade_volume_loop(ShadeInput *shi, ShadeResult *shr)
+{
+       if(R.r.mode & R_RAYTRACE) volume_trace(shi, shr);
+}
+
 
 /* do a shade, finish up some passes, apply mist */
 void shade_input_do_shade(ShadeInput *shi, ShadeResult *shr)
@@ -151,7 +157,8 @@ void shade_input_do_shade(ShadeInput *shi, ShadeResult *shr)
                memcpy(&shi->r, &shi->mat->r, 23*sizeof(float));
                shi->har= shi->mat->har;
                
-               shade_material_loop(shi, shr);
+               if (shi->mat->material_type == MA_SOLID) shade_material_loop(shi, shr);
+               else if (shi->mat->material_type == MA_VOLUME) shade_volume_loop(shi, shr);
        }
        
        /* copy additional passes */
@@ -667,6 +674,10 @@ void shade_input_calc_viewco(ShadeInput *shi, float x, float y, float z, float *
                }
        }
        
+       /* set camera coords - for scanline, it's always 0.0,0.0,0.0 (render is in camera space)
+        * however for raytrace it can be different - the position of the last intersection */
+       shi->camera_co[0] = shi->camera_co[1] = shi->camera_co[2] = 0.0f;
+       
        /* cannot normalize earlier, code above needs it at viewplane level */
        Normalize(view);
 }