[Bf-blender-cvs] [f5200ea] fluid-mantaflow: added macros to kernel code to use new manta smoke api

Sebastián Barschkis noreply at git.blender.org
Thu Mar 17 19:11:10 CET 2016


Commit: f5200ea512f79ec34e84aed7e7b7fcbc021f6838
Author: Sebastián Barschkis
Date:   Wed Mar 16 21:54:46 2016 +0100
Branches: fluid-mantaflow
https://developer.blender.org/rBf5200ea512f79ec34e84aed7e7b7fcbc021f6838

added macros to kernel code to use new manta smoke api

===================================================================

M	source/blender/blenkernel/intern/pointcache.c
M	source/blender/blenkernel/intern/smoke.c
M	source/blender/editors/physics/physics_fluid.c
M	source/blender/editors/space_view3d/drawobject.c
M	source/blender/gpu/intern/gpu_draw.c
M	source/blender/makesrna/intern/rna_smoke.c
M	source/blender/render/intern/source/voxeldata.c

===================================================================

diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c
index 4eb3af6..2da127f 100644
--- a/source/blender/blenkernel/intern/pointcache.c
+++ b/source/blender/blenkernel/intern/pointcache.c
@@ -80,7 +80,11 @@
 
 /* both in intern */
 #ifdef WITH_SMOKE
-#include "smoke_API.h"
+#ifndef WITH_MANTA
+	#include "smoke_API.h"
+#else
+	#include "manta_smoke_API.h"
+#endif
 #endif
 
 #ifdef WITH_LZO
@@ -638,7 +642,11 @@ static int  ptcache_smoke_write(PTCacheFile *pf, void *smoke_v)
 		ret = 1;
 	}
 
+#ifndef WITH_MANTA
 	if (sds->wt) {
+#else
+	if (sds->fluid && sds->flags & MOD_SMOKE_HIGHRES) {
+#endif
 		int res_big_array[3];
 		int res_big;
 		int res = sds->res[0]*sds->res[1]*sds->res[2];
@@ -648,7 +656,11 @@ static int  ptcache_smoke_write(PTCacheFile *pf, void *smoke_v)
 		unsigned char *out;
 		int mode;
 
+#ifndef WITH_MANTA
 		smoke_turbulence_get_res(sds->wt, res_big_array);
+#else
+		smoke_turbulence_get_res(sds->fluid, res_big_array);
+#endif
 		res_big = res_big_array[0]*res_big_array[1]*res_big_array[2];
 		//mode =  res_big >= 1000000 ? 2 : 1;
 		mode = 1;	// light
@@ -656,7 +668,11 @@ static int  ptcache_smoke_write(PTCacheFile *pf, void *smoke_v)
 
 		in_len_big = sizeof(float) * (unsigned int)res_big;
 
+#ifndef WITH_MANTA
 		smoke_turbulence_export(sds->wt, &dens, &react, &flame, &fuel, &r, &g, &b, &tcu, &tcv, &tcw);
+#else
+		smoke_turbulence_export(sds->fluid, &dens, &react, &flame, &fuel, &r, &g, &b, &tcu, &tcv, &tcw);
+#endif
 
 		out = (unsigned char *)MEM_callocN(LZO_OUT_LEN(in_len_big), "pointcache_lzo_buffer");
 		ptcache_file_compressed_write(pf, (unsigned char *)dens, in_len_big, out, mode);
@@ -732,18 +748,30 @@ static int ptcache_smoke_read_old(PTCacheFile *pf, void *smoke_v)
 
 		MEM_freeN(tmp_array);
 
+#ifndef WITH_MANTA
 		if (pf->data_types & (1<<BPHYS_DATA_SMOKE_HIGH) && sds->wt) {
+#else
+		if (pf->data_types & (1<<BPHYS_DATA_SMOKE_HIGH) && sds->fluid && sds->flags & MOD_SMOKE_HIGHRES) {
+#endif
 			int res_big, res_big_array[3];
 			float *tcu, *tcv, *tcw;
 			unsigned int out_len_big;
 			unsigned char *tmp_array_big;
+#ifndef WITH_MANTA
 			smoke_turbulence_get_res(sds->wt, res_big_array);
+#else
+			smoke_turbulence_get_res(sds->fluid, res_big_array);
+#endif
 			res_big = res_big_array[0]*res_big_array[1]*res_big_array[2];
 			out_len_big = sizeof(float) * (unsigned int)res_big;
 
 			tmp_array_big = MEM_callocN(out_len_big, "Smoke old cache tmp");
 
+#ifndef WITH_MANTA
 			smoke_turbulence_export(sds->wt, &dens, NULL, NULL, NULL, NULL, NULL, NULL, &tcu, &tcv, &tcw);
+#else
+			smoke_turbulence_export(sds->fluid, &dens, NULL, NULL, NULL, NULL, NULL, NULL, &tcu, &tcv, &tcw);
+#endif
 
 			ptcache_file_compressed_read(pf, (unsigned char*)dens, out_len_big);
 			ptcache_file_compressed_read(pf, (unsigned char*)tmp_array_big, out_len_big);
@@ -854,19 +882,30 @@ static int ptcache_smoke_read(PTCacheFile *pf, void *smoke_v)
 		ptcache_file_read(pf, &sds->active_color, 3, sizeof(float));
 	}
 
+#ifndef WITH_MANTA
 	if (pf->data_types & (1<<BPHYS_DATA_SMOKE_HIGH) && sds->wt) {
+#else
+	if (pf->data_types & (1<<BPHYS_DATA_SMOKE_HIGH) && sds->fluid && sds->flags & MOD_SMOKE_HIGHRES) {
+#endif
 			int res = sds->res[0]*sds->res[1]*sds->res[2];
 			int res_big, res_big_array[3];
 			float *dens, *react, *fuel, *flame, *tcu, *tcv, *tcw, *r, *g, *b;
 			unsigned int out_len = sizeof(float)*(unsigned int)res;
 			unsigned int out_len_big;
 
+#ifndef WITH_MANTA
 			smoke_turbulence_get_res(sds->wt, res_big_array);
+#else
+			smoke_turbulence_get_res(sds->fluid, res_big_array);
+#endif
 			res_big = res_big_array[0]*res_big_array[1]*res_big_array[2];
 			out_len_big = sizeof(float) * (unsigned int)res_big;
 
+#ifndef WITH_MANTA
 			smoke_turbulence_export(sds->wt, &dens, &react, &flame, &fuel, &r, &g, &b, &tcu, &tcv, &tcw);
-
+#else
+			smoke_turbulence_export(sds->fluid, &dens, &react, &flame, &fuel, &r, &g, &b, &tcu, &tcv, &tcw);
+#endif
 			ptcache_file_compressed_read(pf, (unsigned char *)dens, out_len_big);
 			if (cache_fields & SM_ACTIVE_FIRE) {
 				ptcache_file_compressed_read(pf, (unsigned char *)flame, out_len_big);
@@ -1258,8 +1297,13 @@ void BKE_ptcache_id_from_smoke(PTCacheID *pid, struct Object *ob, struct SmokeMo
 
 	if (sds->fluid)
 		pid->data_types |= (1<<BPHYS_DATA_SMOKE_LOW);
+#ifndef WITH_MANTA
 	if (sds->wt)
 		pid->data_types |= (1<<BPHYS_DATA_SMOKE_HIGH);
+#else
+	if (sds->fluid && sds->flags & MOD_SMOKE_HIGHRES)
+		pid->data_types |= (1<<BPHYS_DATA_SMOKE_HIGH);
+#endif
 
 	pid->default_step = 1;
 	pid->max_step = 1;
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index 363765d..219d97b 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -176,6 +176,7 @@ void flame_get_spectrum(unsigned char *UNUSED(spec), int UNUSED(width), float UN
 
 void smoke_reallocate_fluid(SmokeDomainSettings *sds, float dx, int res[3], int free_old)
 {
+#ifndef WITH_MANTA
 	int use_heat = (sds->active_fields & SM_ACTIVE_HEAT);
 	int use_fire = (sds->active_fields & SM_ACTIVE_FIRE);
 	int use_colors = (sds->active_fields & SM_ACTIVE_COLORS);
@@ -187,14 +188,19 @@ void smoke_reallocate_fluid(SmokeDomainSettings *sds, float dx, int res[3], int
 		return;
 	}
 	
-	#ifndef WITH_MANTA
-		sds->fluid = smoke_init(res, dx, DT_DEFAULT, use_heat, use_fire, use_colors);
-	#else
-		sds->fluid = smoke_init(res, dx, DT_DEFAULT, use_heat, use_fire, use_colors, sds->smd);
-	#endif
-
+	sds->fluid = smoke_init(res, dx, DT_DEFAULT, use_heat, use_fire, use_colors);
 	smoke_initBlenderRNA(sds->fluid, &(sds->alpha), &(sds->beta), &(sds->time_scale), &(sds->vorticity), &(sds->border_collisions),
-	                     &(sds->burning_rate), &(sds->flame_smoke), sds->flame_smoke_color, &(sds->flame_vorticity), &(sds->flame_ignition), &(sds->flame_max_temp));
+					 &(sds->burning_rate), &(sds->flame_smoke), sds->flame_smoke_color, &(sds->flame_vorticity), &(sds->flame_ignition), &(sds->flame_max_temp));
+#else
+	if (free_old && sds->fluid)
+		smoke_free(sds->fluid);
+	if (!min_iii(res[0], res[1], res[2])) {
+		sds->fluid = NULL;
+		return;
+	}
+	
+	sds->fluid = smoke_init(res, sds->smd);
+#endif
 
 	/* reallocate shadow buffer */
 	if (sds->shadow)
@@ -204,6 +210,7 @@ void smoke_reallocate_fluid(SmokeDomainSettings *sds, float dx, int res[3], int
 
 void smoke_reallocate_highres_fluid(SmokeDomainSettings *sds, float dx, int res[3], int free_old)
 {
+#ifndef WITH_MANTA
 	int use_fire = (sds->active_fields & (SM_ACTIVE_HEAT | SM_ACTIVE_FIRE));
 	int use_colors = (sds->active_fields & SM_ACTIVE_COLORS);
 
@@ -217,19 +224,19 @@ void smoke_reallocate_highres_fluid(SmokeDomainSettings *sds, float dx, int res[
 	/* smoke_turbulence_init uses non-threadsafe functions from fftw3 lib (like fftw_plan & co). */
 	BLI_lock_thread(LOCK_FFTW);
 
-	#ifndef WITH_MANTA
-		sds->wt = smoke_turbulence_init(res, sds->amplify + 1, sds->noise, BKE_tempdir_session(), use_fire, use_colors);
-	#else
-		sds->wt = smoke_turbulence_init(res, sds->amplify + 1, sds->noise, BKE_tempdir_session(), use_fire, use_colors, sds);
-	#endif
+	sds->wt = smoke_turbulence_init(res, sds->amplify + 1, sds->noise, BKE_tempdir_session(), use_fire, use_colors);
 
 	BLI_unlock_thread(LOCK_FFTW);
+#endif
 
 	sds->res_wt[0] = res[0] * (sds->amplify + 1);
 	sds->res_wt[1] = res[1] * (sds->amplify + 1);
 	sds->res_wt[2] = res[2] * (sds->amplify + 1);
 	sds->dx_wt = dx / (sds->amplify + 1);
+	
+#ifndef WITH_MANTA
 	smoke_initWaveletBlenderRNA(sds->wt, &(sds->strength));
+#endif
 }
 
 /* convert global position to domain cell space */
@@ -400,8 +407,10 @@ static void smokeModifier_freeDomain(SmokeModifierData *smd)
 		if (smd->domain->fluid_mutex)
 			BLI_rw_mutex_free(smd->domain->fluid_mutex);
 
+#ifndef WITH_MANTA
 		if (smd->domain->wt)
 			smoke_turbulence_free(smd->domain->wt);
+#endif
 
 		if (smd->domain->effector_weights)
 			MEM_freeN(smd->domain->effector_weights);
@@ -452,11 +461,13 @@ static void smokeModifier_freeCollision(SmokeModifierData *smd)
 
 void smokeModifier_reset_turbulence(struct SmokeModifierData *smd)
 {
+#ifndef WITH_MANTA
 	if (smd && smd->domain && smd->domain->wt)
 	{
 		smoke_turbulence_free(smd->domain->wt);
 		smd->domain->wt = NULL;
 	}
+#endif
 }
 
 static void smokeModifier_reset_ex(struct SmokeModifierData *smd, bool need_lock)
@@ -1761,16 +1772,27 @@ static void adjustDomainResolution(SmokeDomainSettings *sds, int new_shift[3], E
 	int x, y, z;
 	float *density = smoke_get_density(sds->fluid);
 	float *fuel = smoke_get_fuel(sds->fluid);
+#ifndef WITH_MANTA
 	float *bigdensity = smoke_turbulence_get_density(sds->wt);
 	float *bigfuel = smoke_turbulence_get_fuel(sds->wt);
+#else
+	float *bigdensity = smoke_turbulence_get_density(sds->fluid);
+	float *bigfuel = smoke_turbulence_get_fuel(sds->fluid);
+#endif
 	float *vx = smoke_get_velocity_x(sds->fluid);
 	float *vy = smoke_get_velocity_y(sds->fluid);
 	float *vz = smoke_get_velocity_z(sds->fluid);
 	int wt_res[3];
 
+#ifndef WITH_MANTA
 	if (sds->flags & MOD_SMOKE_HIGHRES && sds->wt) {
 		smoke_turbulence_get_res(sds->wt, wt_res);
 	}
+#else
+	if (sds->flags & MOD_SMOKE_HIGHRES && sds->fluid) {
+		smoke_turbulence_get_res(sds->fluid, wt_res);
+	}
+#endif
 
 	INIT_MINMAX(min_vel, max_vel);
 
@@ -1793,7 +1815,11 @@ static void adjustDomainResolution(SmokeDomainSettings *sds, int new_shift[3], E
 				max_den = (fuel) ? MAX2(density[index], fuel[index]) : density[index];
 
 				/* check high resolution bounds if max density isnt already high enough */
+#ifndef WITH_MANTA
 				if (max_den < sds->adapt_threshold && sds->flags & MOD_SMOKE_HIGHRES && sds->wt) {
+#else
+				if (max_den < sds->adapt_threshold && sds->flags & MOD_SMOKE_HIGHRES && sds->fluid) {
+#endif
 					int i, j, k;
 					/* high res grid index */
 					int xx = (x - sds->res_min[0]) * block_size;
@@ -1884,8 +1910,12 @@ static void adjustDomainResolution(SmokeDomainSettings *sds, int new_shift[3], E
 	}
 
 	if (res_changed || shift_changed) {
+#ifndef WITH_MANTA
 		struct FLUID_3D *fluid_old = sds->fluid;
 		struct WTURBULENCE *turb_old = sds->wt;
+#else
+		struct MANTA *fluid_old = sds->fluid;
+#endif
 		/* al

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list