[Bf-blender-cvs] [3960e05c377] fluid-mantaflow: bigger cleanup and added direct manta mesh pointer access
Sebastián Barschkis
noreply at git.blender.org
Sat May 5 21:24:54 CEST 2018
Commit: 3960e05c377c5f1dda43980f172e5478d266afcd
Author: Sebastián Barschkis
Date: Sat May 5 21:23:41 2018 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rB3960e05c377c5f1dda43980f172e5478d266afcd
bigger cleanup and added direct manta mesh pointer access
===================================================================
M intern/mantaflow/intern/FLUID.cpp
M intern/mantaflow/intern/FLUID.h
M intern/mantaflow/intern/manta_fluid_API.cpp
M intern/mantaflow/intern/manta_pp/omp/fileio/iogrids.cpp
M intern/mantaflow/intern/manta_pp/omp/fileio/iomeshes.cpp
M intern/mantaflow/intern/manta_pp/omp/gitinfo.h
M intern/mantaflow/intern/manta_pp/omp/mesh.cpp
M intern/mantaflow/intern/manta_pp/omp/mesh.h
M intern/mantaflow/intern/manta_pp/omp/mesh.h.reg
M intern/mantaflow/intern/manta_pp/omp/mesh.h.reg.cpp
M intern/mantaflow/intern/manta_pp/tbb/fileio/iogrids.cpp
M intern/mantaflow/intern/manta_pp/tbb/fileio/iomeshes.cpp
M intern/mantaflow/intern/manta_pp/tbb/gitinfo.h
M intern/mantaflow/intern/manta_pp/tbb/mesh.cpp
M intern/mantaflow/intern/manta_pp/tbb/mesh.h
M intern/mantaflow/intern/manta_pp/tbb/mesh.h.reg
M intern/mantaflow/intern/manta_pp/tbb/mesh.h.reg.cpp
M intern/mantaflow/intern/strings/liquid_script.h
M intern/mantaflow/intern/strings/shared_script.h
M intern/mantaflow/intern/strings/smoke_script.h
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/modifiers/intern/MOD_smoke.c
===================================================================
diff --git a/intern/mantaflow/intern/FLUID.cpp b/intern/mantaflow/intern/FLUID.cpp
index 0e6391a85d9..1827e8a3e0f 100644
--- a/intern/mantaflow/intern/FLUID.cpp
+++ b/intern/mantaflow/intern/FLUID.cpp
@@ -131,9 +131,9 @@ FLUID::FLUID(int *res, SmokeModifierData *smd) : mCurrentID(++solverID)
mPhiOutIn = NULL;
mPhi = NULL;
- mNumVertices = 0;
- mNumNormals = 0;
- mNumTriangles = 0;
+ // Mesh
+ mMeshNodes = NULL;
+ mMeshTriangles = NULL;
// Fluid obstacle
mPhiObsIn = NULL;
@@ -184,8 +184,6 @@ FLUID::FLUID(int *res, SmokeModifierData *smd) : mCurrentID(++solverID)
initSndParts(smd);
initLiquidSndParts(smd);
}
-
- updatePointers();
if (mUsingMesh) {
mUpresMesh = smd->domain->mesh_scale;
@@ -198,6 +196,8 @@ FLUID::FLUID(int *res, SmokeModifierData *smd) : mCurrentID(++solverID)
initMesh(smd);
initLiquidMesh(smd);
}
+ updatePointers();
+
return;
}
@@ -572,9 +572,9 @@ FLUID::~FLUID()
mPhiOutIn = NULL;
mPhi = NULL;
- mNumVertices = 0;
- mNumNormals = 0;
- mNumTriangles = 0;
+ // Mesh
+ mMeshNodes = NULL;
+ mMeshTriangles = NULL;
// Fluid obstacle
mPhiObsIn = NULL;
@@ -1067,11 +1067,16 @@ int FLUID::readCache(SmokeModifierData *smd, int framenr)
nformat = getCacheFileEnding(smd->domain->cache_noise_format);
BLI_path_join(cacheDir, sizeof(cacheDir), smd->domain->cache_directory, FLUID_CACHE_DIR_DATA, NULL);
- if (BLI_exists(cacheDir) && (smd->domain->cache_flag & FLUID_CACHE_BAKED_DATA))
+ if (BLI_exists(cacheDir) && (smd->domain->cache_flag & FLUID_CACHE_BAKED_DATA || smd->domain->cache_flag & FLUID_CACHE_BAKING_DATA))
{
ss.str("");
ss << "smoke_load_data_" << mCurrentID << "('" << cacheDir << "', " << framenr << ", '" << dformat << "')";
pythonCommands.push_back(ss.str());
+
+ ss.str("");
+ ss << "smoke_load_shadow_" << mCurrentID << "('" << cacheDir << "', " << framenr << ", '" << dformat << "')";
+ pythonCommands.push_back(ss.str());
+
runPythonString(pythonCommands);
updatePointers();
@@ -1080,7 +1085,7 @@ int FLUID::readCache(SmokeModifierData *smd, int framenr)
if (mUsingNoise)
{
BLI_path_join(cacheDir, sizeof(cacheDir), smd->domain->cache_directory, FLUID_CACHE_DIR_NOISE, NULL);
- if (BLI_exists(cacheDir) && (smd->domain->cache_flag & FLUID_CACHE_BAKED_NOISE))
+ if (BLI_exists(cacheDir) && (smd->domain->cache_flag & FLUID_CACHE_BAKED_NOISE || smd->domain->cache_flag & FLUID_CACHE_BAKING_NOISE))
{
ss.str("");
ss << "smoke_load_noise_" << mCurrentID << "('" << cacheDir << "', " << framenr << ", '" << nformat << "')";
@@ -1099,7 +1104,7 @@ int FLUID::readCache(SmokeModifierData *smd, int framenr)
// Data (flip particles) loading
BLI_path_join(cacheDir, sizeof(cacheDir), smd->domain->cache_directory, FLUID_CACHE_DIR_DATA, NULL);
- if (BLI_exists(cacheDir) && (smd->domain->cache_flag & FLUID_CACHE_BAKED_DATA))
+ if (BLI_exists(cacheDir) && (smd->domain->cache_flag & FLUID_CACHE_BAKED_DATA || smd->domain->cache_flag & FLUID_CACHE_BAKING_DATA))
{
ss.str("");
ss << "liquid_load_flip_" << mCurrentID << "('" << cacheDir << "', " << framenr << ", '" << pformat << "')";
@@ -1120,7 +1125,7 @@ int FLUID::readCache(SmokeModifierData *smd, int framenr)
}
if (mUsingMesh) {
BLI_path_join(cacheDir, sizeof(cacheDir), smd->domain->cache_directory, FLUID_CACHE_DIR_MESH, NULL);
- if (BLI_exists(cacheDir) && (smd->domain->cache_flag & FLUID_CACHE_BAKED_MESH))
+ if (BLI_exists(cacheDir) && (smd->domain->cache_flag & FLUID_CACHE_BAKED_MESH || smd->domain->cache_flag & FLUID_CACHE_BAKING_MESH))
{
ss.str("");
ss << "liquid_load_mesh_" << mCurrentID << "('" << cacheDir << "', " << framenr << ", '" << mformat << "')";
@@ -1148,7 +1153,7 @@ int FLUID::readCache(SmokeModifierData *smd, int framenr)
// Secondary particles loading
BLI_path_join(cacheDir, sizeof(cacheDir), smd->domain->cache_directory, FLUID_CACHE_DIR_PARTICLES, NULL);
- if (BLI_exists(cacheDir) && (smd->domain->cache_flag & FLUID_CACHE_BAKED_PARTICLES))
+ if (BLI_exists(cacheDir) && (smd->domain->cache_flag & FLUID_CACHE_BAKED_PARTICLES || smd->domain->cache_flag & FLUID_CACHE_BAKING_PARTICLES))
{
ss.str("");
ss << "liquid_load_particles_" << mCurrentID << "('" << cacheDir << "', " << framenr << ", '" << pformat << "')";
@@ -1590,74 +1595,70 @@ void FLUID::updateMeshDataFromBobj(const char* filename)
gzFile gzf;
float fbuffer[3];
int ibuffer[3];
+ int numBuffer = 0;
+
+ mMeshNodes->clear();
+ mMeshTriangles->clear();
gzf = (gzFile) BLI_gzopen(filename, "rb1"); // do some compression
if (!gzf)
std::cerr << "updateMeshData: unable to open file: " << filename << std::endl;
// Num vertices
- mNumVertices = 0;
- gzread(gzf, &mNumVertices, sizeof(int));
-
+ gzread(gzf, &numBuffer, sizeof(int));
+
if (with_debug)
- std::cout << "read mesh , num verts: " << mNumVertices << " , in file: "<< filename << std::endl;
+ std::cout << "read mesh , num verts: " << numBuffer << " , in file: "<< filename << std::endl;
- if (mNumVertices)
+ if (numBuffer)
{
- mVerticesX.resize(mNumVertices);
- mVerticesY.resize(mNumVertices);
- mVerticesZ.resize(mNumVertices);
-
// Vertices
- for (int i = 0; i < mNumVertices; i++) {
+ mMeshNodes->resize(numBuffer);
+ for (std::vector<Node>::iterator it = mMeshNodes->begin(); it != mMeshNodes->end(); ++it) {
gzread(gzf, fbuffer, sizeof(float) * 3);
-
- mVerticesX[i] = fbuffer[0];
- mVerticesY[i] = fbuffer[1];
- mVerticesZ[i] = fbuffer[2];
+ it->pos[0] = fbuffer[0];
+ it->pos[1] = fbuffer[1];
+ it->pos[2] = fbuffer[2];
}
}
// Num normals
- mNumNormals = 0;
- gzread(gzf, &mNumNormals, sizeof(float));
-
- if (mNumNormals)
+ gzread(gzf, &numBuffer, sizeof(int));
+
+ if (with_debug)
+ std::cout << "read mesh , num normals : " << numBuffer << " , in file: "<< filename << std::endl;
+
+ if (numBuffer)
{
- mNormalsX.resize(mNumNormals);
- mNormalsY.resize(mNumNormals);
- mNormalsZ.resize(mNumNormals);
-
// Normals
- for (int i = 0; i < mNumNormals; i++) {
+ if (!getNumVertices()) mMeshNodes->resize(numBuffer);
+ for (std::vector<Node>::iterator it = mMeshNodes->begin(); it != mMeshNodes->end(); ++it) {
gzread(gzf, fbuffer, sizeof(float) * 3);
-
- mNormalsX[i] = fbuffer[0];
- mNormalsY[i] = fbuffer[1];
- mNormalsZ[i] = fbuffer[2];
+ it->normal[0] = fbuffer[0];
+ it->normal[1] = fbuffer[1];
+ it->normal[2] = fbuffer[2];
}
}
// Num triangles
- mNumTriangles = 0;
- gzread(gzf, &mNumTriangles, sizeof(int));
-
- if (mNumTriangles)
+ gzread(gzf, &numBuffer, sizeof(int));
+
+ if (with_debug)
+ std::cout << "read mesh , num triangles : " << numBuffer << " , in file: "<< filename << std::endl;
+
+ if (numBuffer)
{
- mTrianglesX.resize(mNumTriangles);
- mTrianglesY.resize(mNumTriangles);
- mTrianglesZ.resize(mNumTriangles);
-
// Triangles
- for (int i = 0; i < mNumTriangles; i++) {
+ mMeshTriangles->resize(numBuffer);
+ FLUID::Triangle* bufferTriangle;
+ for (std::vector<Triangle>::iterator it = mMeshTriangles->begin(); it != mMeshTriangles->end(); ++it) {
gzread(gzf, ibuffer, sizeof(int) * 3);
-
- mTrianglesX[i] = ibuffer[0];
- mTrianglesY[i] = ibuffer[1];
- mTrianglesZ[i] = ibuffer[2];
+ bufferTriangle = (FLUID::Triangle*) ibuffer;
+ it->c[0] = bufferTriangle->c[0];
+ it->c[1] = bufferTriangle->c[1];
+ it->c[2] = bufferTriangle->c[2];
}
}
-
gzclose(gzf);
}
@@ -1666,22 +1667,10 @@ void FLUID::updateMeshDataFromObj(const char* filename)
std::ifstream ifs (filename);
float fbuffer[3];
int ibuffer[3];
+ int cntVerts = 0, cntNormals = 0, cntTris = 0;
- mNumNormals = 0;
- mNumVertices = 0;
- mNumTriangles = 0;
-
- mNormalsX.clear();
- mNormalsY.clear();
- mNormalsZ.clear();
-
- mVerticesX.clear();
- mVerticesY.clear();
- mVerticesZ.clear();
-
- mTrianglesX.clear();
- mTrianglesY.clear();
- mTrianglesZ.clear();
+ mMeshNodes->clear();
+ mMeshTriangles->clear();
if (!ifs.good())
std::cerr << "updateMeshDataFromObj: unable to open file: " << filename << std::endl;
@@ -1699,18 +1688,24 @@ void FLUID::updateMeshDataFromObj(const char* filename)
// tex coord, ignore
} else if (id == "vn") {
// normals
+ if (getNumVertices() != cntVerts)
+ std::cerr << "updateMeshDataFromObj: invalid amount of mesh nodes" << std::endl;
+
ifs >> fbuffer[0] >> fbuffer[1] >> fbuffer[2];
- mNormalsX.push_back(fbuffer[0]);
- mNormalsY.push_back(fbuffer[1]);
- mNormalsZ.push_back(fbuffer[2]);
- mNumNormals++;
+ FLUID::Node* node = &mMeshNodes->at(cntNormals);
+ (*node).normal[0] = fbuffer[0];
+ (*node).normal[1] = fbuffer[1];
+ (*node).normal[2] = fbuffer[2];
+ cntNormals++;
} else if (id == "v") {
// vertex
ifs >> fbuffer[0] >> fbuffer[1] >> fbuffer[2];
- mVerticesX.push_back(fbuffer[0]);
- mVerticesY.push_back(fbuffer[1]);
- mVerticesZ.push_back(fbuffer[2]);
- mNumVertices++;
+ FLUID::Node node;
+ node.pos[0] = fbuffer[0];
+ node.pos[1] = fbuffer[1];
+ node.pos[2] = fbuffer[2];
+ mMeshNodes->push_back(node);
+ cntVerts++;
} else if (id == "g") {
// group
std::string group;
@@ -1727,10 +1722,12 @@ void FLUID::updateMeshDataFromObj(const char* filename)
std::cerr << "updateMeshDataFromObj: invalid face encountered" << std::endl;
ibuffer[i] = idx;
}
- mTrianglesX.push_back(ibuffer[0]);
- mTrianglesY.push_back(ibuffer[1]);
- mTrianglesZ.push_back(ibuffer[2]);
- mNumTriangles++;
+ FLUID::Triangle triangle;
+ triangle.c[0] = ibuffer[0];
+ triangle.c[1] = ibuffer[1];
+ triangle.c[2] = ibuffer[2];
+ mMeshTriangles->push_back(triangle);
+ cntTris++;
} else {
// whatever, ignore
}
@@ -1859,13 +1856,18 @@ void FLUID::updatePointers()
std::cout << "FLUID::updatePointers()" << std::endl;
std::string func = "getDataPointer";
+ std::string funcNodes = "getNodesDataPointer";
+ std::string funcTris = "getTrisDataPointer";
+
std::string id = std::to_string(mCurrentID);
std::string solver = "s" + id;
std::string parts = "pp" + id;
std::string snd = "sp" + id;
+ std::string mesh = "sm" + id;
std:
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list