[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22788] branches/blender2.5/blender/source /blender: Smoke:
Daniel Genrich
daniel.genrich at gmx.net
Wed Aug 26 01:39:49 CEST 2009
Revision: 22788
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22788
Author: genscher
Date: 2009-08-26 01:39:49 +0200 (Wed, 26 Aug 2009)
Log Message:
-----------
Smoke:
*Bugfix for crash on using a plane as smoke domain (reported by DingTo)
* Bringing slowly high res back, not yet working
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/blenkernel/intern/pointcache.c
branches/blender2.5/blender/source/blender/blenkernel/intern/smoke.c
branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c
branches/blender2.5/blender/source/blender/editors/space_view3d/drawobject.c
branches/blender2.5/blender/source/blender/makesdna/DNA_smoke_types.h
branches/blender2.5/blender/source/blender/makesrna/intern/rna_smoke.c
Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/pointcache.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/pointcache.c 2009-08-25 22:56:08 UTC (rev 22787)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/pointcache.c 2009-08-25 23:39:49 UTC (rev 22788)
@@ -703,11 +703,11 @@
pid->calldata= smd;
pid->type= PTCACHE_TYPE_SMOKE_DOMAIN;
- pid->stack_index= sds->point_cache->index;
+ pid->stack_index= sds->point_cache[0]->index;
- pid->cache= sds->point_cache;
- pid->cache_ptr= &sds->point_cache;
- pid->ptcaches= &sds->ptcaches;
+ pid->cache= sds->point_cache[0];
+ pid->cache_ptr= &(sds->point_cache[0]);
+ pid->ptcaches= &(sds->ptcaches[0]);
pid->totpoint= pid->totwrite= ptcache_totpoint_smoke;
@@ -726,6 +726,39 @@
pid->info_types= 0;
}
+void BKE_ptcache_id_from_smoke_turbulence(PTCacheID *pid, struct Object *ob, struct SmokeModifierData *smd)
+{
+ SmokeDomainSettings *sds = smd->domain;
+
+ memset(pid, 0, sizeof(PTCacheID));
+
+ pid->ob= ob;
+ pid->calldata= smd;
+
+ pid->type= PTCACHE_TYPE_SMOKE_HIGHRES;
+ pid->stack_index= sds->point_cache[1]->index;
+
+ pid->cache= sds->point_cache[1];
+ pid->cache_ptr= &sds->point_cache[1];
+ pid->ptcaches= &sds->ptcaches[1];
+
+ pid->totpoint= pid->totwrite= ptcache_totpoint_smoke;
+
+ pid->write_elem= NULL;
+ pid->read_elem= NULL;
+
+ pid->read_stream = ptcache_read_smoke;
+ pid->write_stream = ptcache_write_smoke;
+
+ pid->interpolate_elem= NULL;
+
+ pid->write_header= ptcache_write_basic_header;
+ pid->read_header= ptcache_read_basic_header;
+
+ pid->data_types= (1<<BPHYS_DATA_LOCATION); // bogus values tot make pointcache happy
+ pid->info_types= 0;
+}
+
void BKE_ptcache_id_from_cloth(PTCacheID *pid, Object *ob, ClothModifierData *clmd)
{
memset(pid, 0, sizeof(PTCacheID));
@@ -1792,10 +1825,7 @@
else if(pid->type == PTCACHE_TYPE_PARTICLES)
psys_reset(pid->calldata, PSYS_RESET_DEPSGRAPH);
else if(pid->type == PTCACHE_TYPE_SMOKE_DOMAIN)
- {
smokeModifier_reset(pid->calldata);
- printf("reset PTCACHE_TYPE_SMOKE_DOMAIN\n");
- }
}
if(clear)
BKE_ptcache_id_clear(pid, PTCACHE_CLEAR_ALL, 0);
Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/smoke.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/smoke.c 2009-08-25 22:56:08 UTC (rev 22787)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/smoke.c 2009-08-25 23:39:49 UTC (rev 22788)
@@ -166,6 +166,10 @@
// calc other res with max_res provided
VECSUB(size, max, min);
+
+ if((size[0] < FLT_EPSILON) || (size[1] < FLT_EPSILON) || (size[2] < FLT_EPSILON))
+ return 0;
+
if(size[0] > size[1])
{
if(size[0] > size[1])
@@ -213,13 +217,11 @@
smd->time = scene->r.cfra;
smd->domain->firstframe = smd->time;
- /*
- if(!smd->domain->wt)
+ if(!smd->domain->wt && (smd->domain->flags & MOD_SMOKE_HIGHRES))
{
- smd->domain->wt = smoke_turbulence_init(sds->res, smd->domain->amplify + 1, smd->domain->noise);
+ smd->domain->wt = smoke_turbulence_init(smd->domain->res, smd->domain->amplify + 1, smd->domain->noise);
smoke_turbulence_initBlenderRNA(smd->domain->wt, &smd->domain->strength);
}
- */
if(!smd->domain->view3d)
{
@@ -409,10 +411,10 @@
{
smd->coll->bvhtree = NULL; // bvhtree_build_from_smoke ( ob->obmat, dm->getFaceArray(dm), dm->getNumFaces(dm), dm->getVertArray(dm), dm->getNumVerts(dm), 0.0 );
}
-
+ return 1;
}
- return 0;
+ return 1;
}
/*! init triangle divisions */
@@ -529,8 +531,10 @@
if(smd->domain->wt)
smoke_turbulence_free(smd->domain->wt);
- BKE_ptcache_free_list(&smd->domain->ptcaches);
- smd->domain->point_cache = NULL;
+ BKE_ptcache_free_list(&(smd->domain->ptcaches[0]));
+ smd->domain->point_cache[0] = NULL;
+ BKE_ptcache_free_list(&(smd->domain->ptcaches[1]));
+ smd->domain->point_cache[1] = NULL;
MEM_freeN(smd->domain);
smd->domain = NULL;
@@ -603,11 +607,16 @@
smd->domain->wt = NULL;
}
- smd->domain->point_cache->flag &= ~PTCACHE_SIMULATION_VALID;
- smd->domain->point_cache->flag |= PTCACHE_OUTDATED;
- smd->domain->point_cache->simframe= 0;
- smd->domain->point_cache->last_exact= 0;
+ smd->domain->point_cache[0]->flag &= ~PTCACHE_SIMULATION_VALID;
+ smd->domain->point_cache[0]->flag |= PTCACHE_OUTDATED;
+ smd->domain->point_cache[0]->simframe= 0;
+ smd->domain->point_cache[0]->last_exact= 0;
+ smd->domain->point_cache[1]->flag &= ~PTCACHE_SIMULATION_VALID;
+ smd->domain->point_cache[1]->flag |= PTCACHE_OUTDATED;
+ smd->domain->point_cache[1]->simframe= 0;
+ smd->domain->point_cache[1]->last_exact= 0;
+
// printf("reset_domain\n");
}
else if(smd->flow)
@@ -666,10 +675,14 @@
smd->domain->smd = smd;
- smd->domain->point_cache = BKE_ptcache_add(&smd->domain->ptcaches);
- smd->domain->point_cache->flag |= PTCACHE_DISK_CACHE;
- smd->domain->point_cache->step = 1;
+ smd->domain->point_cache[0] = BKE_ptcache_add(&(smd->domain->ptcaches[0]));
+ smd->domain->point_cache[0]->flag |= PTCACHE_DISK_CACHE;
+ smd->domain->point_cache[0]->step = 1;
+ smd->domain->point_cache[1] = BKE_ptcache_add(&(smd->domain->ptcaches[1]));
+ smd->domain->point_cache[1]->flag |= PTCACHE_DISK_CACHE;
+ smd->domain->point_cache[1]->step = 1;
+
/* set some standard values */
smd->domain->fluid = NULL;
smd->domain->eff_group = NULL;
@@ -775,8 +788,9 @@
}
else if(smd->type & MOD_SMOKE_TYPE_DOMAIN)
{
- PointCache *cache;
+ PointCache *cache, *cache_wt;
PTCacheID pid;
+ PTCacheID pid_wt;
float timescale;
int cache_result = 0;
int startframe, endframe, framenr;
@@ -788,7 +802,7 @@
framenr = scene->r.cfra;
- cache = sds->point_cache;
+ cache = sds->point_cache[0];
BKE_ptcache_id_from_smoke(&pid, ob, smd);
BKE_ptcache_id_time(&pid, scene, framenr, &startframe, &endframe, ×cale);
@@ -800,12 +814,15 @@
cache->simframe= 0;
cache->last_exact= 0;
- smokeModifier_init(smd, ob, scene, dm);
+ if(!smokeModifier_init(smd, ob, scene, dm))
+ return;
+ if(!smd->domain->fluid)
+ return;
+
smoke_simulate_domain(smd, scene, ob, dm);
{
- // float light[3] = {0.0,0.0,0.0}; // TODO: take real LAMP coordinates - dg
Base *base_tmp = NULL;
for(base_tmp = scene->base.first; base_tmp; base_tmp= base_tmp->next)
@@ -852,8 +869,12 @@
BKE_ptcache_id_reset(scene, &pid, PTCACHE_RESET_OUTDATED);
}
- smokeModifier_init(smd, ob, scene, dm);
+ if(!smokeModifier_init(smd, ob, scene, dm))
+ return;
+ if(!smd->domain->fluid)
+ return;
+
/* try to read from cache */
cache_result = BKE_ptcache_read_cache(&pid, (float)framenr, scene->r.frs_sec);
// printf("cache_result: %d\n", cache_result);
@@ -904,8 +925,10 @@
smoke_simulate_domain(smd, scene, ob, dm);
+ if(sds->wt)
+ smoke_turbulence_step(sds->wt, sds->fluid);
+
{
- // float light[3] = {0.0,0.0,0.0}; // TODO: take real LAMP coordinates - dg
Base *base_tmp = NULL;
for(base_tmp = scene->base.first; base_tmp; base_tmp= base_tmp->next)
Modified: branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c 2009-08-25 22:56:08 UTC (rev 22787)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c 2009-08-25 23:39:49 UTC (rev 22788)
@@ -3695,7 +3695,8 @@
smd->domain->view3d = NULL;
smd->domain->tex = NULL;
- direct_link_pointcache_list(fd, &smd->domain->ptcaches, &smd->domain->point_cache);
+ direct_link_pointcache_list(fd, &(smd->domain->ptcaches[0]), &(smd->domain->point_cache[0]));
+ direct_link_pointcache_list(fd, &(smd->domain->ptcaches[1]), &(smd->domain->point_cache[1]));
}
else if(smd->type==MOD_SMOKE_TYPE_FLOW)
{
Modified: branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c 2009-08-25 22:56:08 UTC (rev 22787)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c 2009-08-25 23:39:49 UTC (rev 22788)
@@ -1136,7 +1136,10 @@
*/
if((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain)
- write_pointcaches(wd, &smd->domain->ptcaches);
+ {
+ write_pointcaches(wd, &(smd->domain->ptcaches[0]));
+ write_pointcaches(wd, &(smd->domain->ptcaches[1]));
+ }
}
else if(md->type==eModifierType_Fluidsim) {
FluidsimModifierData *fluidmd = (FluidsimModifierData*) md;
Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/drawobject.c 2009-08-25 22:56:08 UTC (rev 22787)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/drawobject.c 2009-08-25 23:39:49 UTC (rev 22788)
@@ -5316,7 +5316,7 @@
md = modifiers_findByType(ob, eModifierType_Smoke);
if (md) {
SmokeModifierData *smd = (SmokeModifierData *)md;
- if(smd->type & MOD_SMOKE_TYPE_DOMAIN && smd->domain) {
+ if(smd->type & MOD_SMOKE_TYPE_DOMAIN && smd->domain && smd->domain->fluid) {
GPU_create_smoke(smd);
draw_volume(scene, ar, v3d, base, smd->domain->tex, smd->domain->res);
GPU_free_smoke(smd);
Modified: branches/blender2.5/blender/source/blender/makesdna/DNA_smoke_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesdna/DNA_smoke_types.h 2009-08-25 22:56:08 UTC (rev 22787)
+++ branches/blender2.5/blender/source/blender/makesdna/DNA_smoke_types.h 2009-08-25 23:39:49 UTC (rev 22788)
@@ -67,8 +67,8 @@
short diss_percent;
short pad;
int diss_speed;/* in frames */
- struct PointCache *point_cache; /* definition is in DNA_object_force.h */
- struct ListBase ptcaches;
+ struct PointCache *point_cache[2]; /* definition is in DNA_object_force.h */
+ struct ListBase ptcaches[2];
struct WTURBULENCE *wt; // WTURBULENCE object, if active
int pad3;
float strength;
Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_smoke.c
===================================================================
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list