svn merge -r 17201:17502 https://svn.blender.org/svnroot/bf-blender/trunk/blender
[blender-staging.git] / source / blender / render / intern / source / convertblender.c
index b9b151ab9fd9d3a0311bdff33b480c7657eab304..09f2d1275f4e4e167ef743a1c1e61609db1cb008 100644 (file)
@@ -2300,6 +2300,7 @@ static void displace_render_face(Render *re, ObjectRen *obr, VlakRen *vlr, float
 
        shi.vlr= vlr;           /* current render face */
        shi.mat= vlr->mat;              /* current input material */
+       shi.thread= 0;
        
        /* Displace the verts, flag is set when done */
        if (!vlr->v1->flag)
@@ -4453,6 +4454,7 @@ void RE_Database_Free(Render *re)
 
        end_radio_render();
        end_render_materials();
+       end_render_textures();
        
        free_pointdensities(re);
        
@@ -5197,23 +5199,30 @@ static int load_fluidsimspeedvectors(Render *re, ObjectInstanceRen *obi, float *
        float hoco[4], ho[4], fsvec[4], camco[4];
        float mat[4][4], winmat[4][4];
        float imat[4][4];
-       MVert *vverts;
-
+       FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(fsob, eModifierType_Fluidsim);
+       FluidsimSettings *fss = fluidmd->fss;
+       float *velarray = NULL;
+       
        /* only one step needed */
        if(step) return 1;
        
+       if(fluidmd)
+               fss = fluidmd->fss;
+       else
+               return 0;
+       
        Mat4CpyMat4(mat, re->viewmat);
        MTC_Mat4Invert(imat, mat);
 
        /* set first vertex OK */
-       if( (!fsob->fluidsimSettings) || (!fsob->fluidsimSettings->meshSurfNormals) ) return 0;
-       vverts = fsob->fluidsimSettings->meshSurfNormals;
-       //fprintf(stderr, "GZ_VEL obj '%s', calc load_fluidsimspeedvectors\n",fsob->id.name); // NT DEBUG
-
-       if( obr->totvert != fsob->fluidsimSettings->meshSurface->totvert ) {
+       if(!fss->meshSurfNormals) return 0;
+       
+       if( obr->totvert != GET_INT_FROM_POINTER(fss->meshSurface) ) {
                //fprintf(stderr, "load_fluidsimspeedvectors - modified fluidsim mesh, not using speed vectors (%d,%d)...\n", obr->totvert, fsob->fluidsimSettings->meshSurface->totvert); // DEBUG
                return 0;
        }
+       
+       velarray = (float *)fss->meshSurfNormals;
 
        if(obi->flag & R_TRANSFORMED)
                Mat4MulMat4(winmat, obi->mat, re->winmat);
@@ -5225,7 +5234,8 @@ static int load_fluidsimspeedvectors(Render *re, ObjectInstanceRen *obi, float *
        so that also small drops/little water volumes return a velocity != 0. 
        But I had no luck in fixing that function - DG */
        for(a=0; a<obr->totvert; a++) {
-               for(j=0;j<3;j++) avgvel[j] += vverts[a].co[j];
+               for(j=0;j<3;j++) avgvel[j] += velarray[3*a + j];
+               
        }
        for(j=0;j<3;j++) avgvel[j] /= (float)(obr->totvert);
        
@@ -5239,7 +5249,7 @@ static int load_fluidsimspeedvectors(Render *re, ObjectInstanceRen *obi, float *
                // get fluid velocity
                fsvec[3] = 0.; 
                //fsvec[0] = fsvec[1] = fsvec[2] = fsvec[3] = 0.; fsvec[2] = 2.; // NT fixed test
-               for(j=0;j<3;j++) fsvec[j] = vverts[a].co[j];
+               for(j=0;j<3;j++) fsvec[j] = velarray[3*a + j];
                
                /* (bad) HACK insert average velocity if none is there (see previous comment) */
                if((fsvec[0] == 0.0) && (fsvec[1] == 0.0) && (fsvec[2] == 0.0))