Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiika Hamalainen <blender@miikah.org>2013-05-20 21:48:16 +0400
committerMiika Hamalainen <blender@miikah.org>2013-05-20 21:48:16 +0400
commit53fd499d28077144ddb97237aced8b26ca5744cc (patch)
treed0103a772c1d46cc55181ee62b2ea03f2b683d96 /intern/smoke
parent7759b2743a5a41c16fd4ddc2943ba49c70a078b5 (diff)
Fix: smoke noise tile was saved in Blender executable directory, which is often write protected on modern systems.
This caused high resolution smoke to always regenerate new tile when domain was reinitialized, slowing down especially adaptive domain simulations. Now noise tile is saved in Blender temp directory instead.
Diffstat (limited to 'intern/smoke')
-rw-r--r--intern/smoke/extern/smoke_API.h4
-rw-r--r--intern/smoke/intern/WTURBULENCE.cpp18
-rw-r--r--intern/smoke/intern/WTURBULENCE.h4
-rw-r--r--intern/smoke/intern/smoke_API.cpp8
4 files changed, 13 insertions, 21 deletions
diff --git a/intern/smoke/extern/smoke_API.h b/intern/smoke/extern/smoke_API.h
index 98c63f08fbd..08dbded176e 100644
--- a/intern/smoke/extern/smoke_API.h
+++ b/intern/smoke/extern/smoke_API.h
@@ -74,7 +74,7 @@ size_t smoke_get_index2d(int x, int max_x, int y);
void smoke_dissolve(struct FLUID_3D *fluid, int speed, int log);
// wavelet turbulence functions
-struct WTURBULENCE *smoke_turbulence_init(int *res, int amplify, int noisetype, int use_fire, int use_colors);
+struct WTURBULENCE *smoke_turbulence_init(int *res, int amplify, int noisetype, const char *noisefile_path, int use_fire, int use_colors);
void smoke_turbulence_free(struct WTURBULENCE *wt);
void smoke_turbulence_step(struct WTURBULENCE *wt, struct FLUID_3D *fluid);
@@ -89,7 +89,7 @@ float *smoke_turbulence_get_fuel(struct WTURBULENCE *wt);
float *smoke_turbulence_get_react(struct WTURBULENCE *wt);
void smoke_turbulence_get_res(struct WTURBULENCE *wt, int *res);
int smoke_turbulence_get_cells(struct WTURBULENCE *wt);
-void smoke_turbulence_set_noise(struct WTURBULENCE *wt, int type);
+void smoke_turbulence_set_noise(struct WTURBULENCE *wt, int type, const char *noisefile_path);
void smoke_initWaveletBlenderRNA(struct WTURBULENCE *wt, float *strength);
void smoke_dissolve_wavelet(struct WTURBULENCE *wt, int speed, int log);
diff --git a/intern/smoke/intern/WTURBULENCE.cpp b/intern/smoke/intern/WTURBULENCE.cpp
index efc6c19a4c5..3d712d2124a 100644
--- a/intern/smoke/intern/WTURBULENCE.cpp
+++ b/intern/smoke/intern/WTURBULENCE.cpp
@@ -51,7 +51,7 @@ static const float persistence = 0.56123f;
//////////////////////////////////////////////////////////////////////
// constructor
//////////////////////////////////////////////////////////////////////
-WTURBULENCE::WTURBULENCE(int xResSm, int yResSm, int zResSm, int amplify, int noisetype, int init_fire, int init_colors)
+WTURBULENCE::WTURBULENCE(int xResSm, int yResSm, int zResSm, int amplify, int noisetype, const char *noisefile_path, int init_fire, int init_colors)
{
// if noise magnitude is below this threshold, its contribution
// is negilgible, so stop evaluating new octaves
@@ -131,15 +131,7 @@ WTURBULENCE::WTURBULENCE(int xResSm, int yResSm, int zResSm, int amplify, int no
// noise tiles
_noiseTile = new float[noiseTileSize * noiseTileSize * noiseTileSize];
- /*
- std::string noiseTileFilename = std::string("noise.wavelets");
- generateTile_WAVELET(_noiseTile, noiseTileFilename);
- */
- setNoise(noisetype);
- /*
- std::string noiseTileFilename = std::string("noise.fft");
- generatTile_FFT(_noiseTile, noiseTileFilename);
- */
+ setNoise(noisetype, noisefile_path);
}
void WTURBULENCE::initFire()
@@ -216,13 +208,13 @@ WTURBULENCE::~WTURBULENCE() {
// type (1<<1) = FFT / 4
// type (1<<2) = curl / 8
//////////////////////////////////////////////////////////////////////
-void WTURBULENCE::setNoise(int type)
+void WTURBULENCE::setNoise(int type, const char *noisefile_path)
{
if(type == (1<<1)) // FFT
{
#ifdef WITH_FFTW3
// needs fft
- std::string noiseTileFilename = std::string("noise.fft");
+ std::string noiseTileFilename = std::string(noisefile_path) + std::string("noise.fft");
generatTile_FFT(_noiseTile, noiseTileFilename);
return;
#else
@@ -237,7 +229,7 @@ void WTURBULENCE::setNoise(int type)
}
#endif
- std::string noiseTileFilename = std::string("noise.wavelets");
+ std::string noiseTileFilename = std::string(noisefile_path) + std::string("noise.wavelets");
generateTile_WAVELET(_noiseTile, noiseTileFilename);
}
diff --git a/intern/smoke/intern/WTURBULENCE.h b/intern/smoke/intern/WTURBULENCE.h
index 4e76466bde5..36635325f62 100644
--- a/intern/smoke/intern/WTURBULENCE.h
+++ b/intern/smoke/intern/WTURBULENCE.h
@@ -36,7 +36,7 @@ struct WTURBULENCE
{
public:
// both config files can be NULL, altCfg might override values from noiseCfg
- WTURBULENCE(int xResSm, int yResSm, int zResSm, int amplify, int noisetype, int init_fire, int init_colors);
+ WTURBULENCE(int xResSm, int yResSm, int zResSm, int amplify, int noisetype, const char *noisefile_path, int init_fire, int init_colors);
/// destructor
virtual ~WTURBULENCE();
@@ -44,7 +44,7 @@ struct WTURBULENCE
void initFire();
void initColors(float init_r, float init_g, float init_b);
- void setNoise(int type);
+ void setNoise(int type, const char *noisefile_path);
void initBlenderRNA(float *strength);
// step more readable version -- no rotation correction
diff --git a/intern/smoke/intern/smoke_API.cpp b/intern/smoke/intern/smoke_API.cpp
index 67f1ea29533..e25dff00d23 100644
--- a/intern/smoke/intern/smoke_API.cpp
+++ b/intern/smoke/intern/smoke_API.cpp
@@ -44,10 +44,10 @@ extern "C" FLUID_3D *smoke_init(int *res, float dx, float dtdef, int use_heat, i
return fluid;
}
-extern "C" WTURBULENCE *smoke_turbulence_init(int *res, int amplify, int noisetype, int use_fire, int use_colors)
+extern "C" WTURBULENCE *smoke_turbulence_init(int *res, int amplify, int noisetype, const char *noisefile_path, int use_fire, int use_colors)
{
if (amplify)
- return new WTURBULENCE(res[0],res[1],res[2], amplify, noisetype, use_fire, use_colors);
+ return new WTURBULENCE(res[0],res[1],res[2], amplify, noisetype, noisefile_path, use_fire, use_colors);
else
return NULL;
}
@@ -436,9 +436,9 @@ extern "C" unsigned char *smoke_get_obstacle_anim(FLUID_3D *fluid)
}
#endif
-extern "C" void smoke_turbulence_set_noise(WTURBULENCE *wt, int type)
+extern "C" void smoke_turbulence_set_noise(WTURBULENCE *wt, int type, const char *noisefile_path)
{
- wt->setNoise(type);
+ wt->setNoise(type, noisefile_path);
}
extern "C" void flame_get_spectrum(unsigned char *spec, int width, float t1, float t2)