[Bf-blender-cvs] [473255d] soc-2014-fluid: method for frame_step in separate thread added
Roman Pogribnyi
noreply at git.blender.org
Fri Aug 1 19:36:50 CEST 2014
Commit: 473255d2f77aa6b5a3ee9ede939d8b9c4fc3edcc
Author: Roman Pogribnyi
Date: Thu Jul 31 13:13:35 2014 +0200
Branches: soc-2014-fluid
https://developer.blender.org/rB473255d2f77aa6b5a3ee9ede939d8b9c4fc3edcc
method for frame_step in separate thread added
===================================================================
M intern/smoke/intern/MANTA.cpp
M intern/smoke/intern/MANTA.h
M source/blender/python/manta_pp/pwrapper/pymain.cpp
===================================================================
diff --git a/intern/smoke/intern/MANTA.cpp b/intern/smoke/intern/MANTA.cpp
index 50ee200..f72ffe3 100644
--- a/intern/smoke/intern/MANTA.cpp
+++ b/intern/smoke/intern/MANTA.cpp
@@ -163,6 +163,7 @@ void manta_cache_path(char *filepath)
char *name="manta";
BLI_make_file_string("/", filepath, BLI_temporary_dir(), name);
}
+
//void BLI_dir_create_recursive(const char *filepath);
void create_manta_folder()
{
@@ -195,19 +196,40 @@ void *run_manta_scene_thread(void *arguments)
void run_manta_scene(char *filepath)
{
- //vector<string> a;
- //a.push_back(filepath);
+ vector<string> a;
+ a.push_back(filepath);
//PyGILState_STATE gilstate = PyGILState_Ensure();
- //runMantaScript(a);
+ runMantaScript(a);
//PyGILState_Release(gilstate);
pthread_t manta_thread;
struct manta_arg_struct args;
args.filepath = filepath;
- int rc = pthread_create(&manta_thread, NULL, run_manta_scene_thread, (void *)&args);
+ args.frame_num = 7;
+ int rc = pthread_create(&manta_thread, NULL, run_manta_sim_thread, (void *)&args);
pthread_detach(manta_thread);
}
+void *run_manta_sim_thread(void *arguments)
+//void manta_sim_step(int frame)
+{
+ struct manta_arg_struct *args = (struct manta_arg_struct *)arguments;
+
+ PyGILState_STATE gilstate = PyGILState_Ensure();
+ for (int fr=0; fr<args->frame_num; ++fr) {
+ cout<< "cansimulate? "<<manta_sim_running<<endl;
+ if (! manta_sim_running)
+ break;
+ std::string frame_str = static_cast<ostringstream*>( &(ostringstream() << fr) )->str();
+ std::string py_string_0 = string("sim_step(").append(frame_str);
+ std::string py_string_1 = py_string_0.append(")\0");
+ PyRun_SimpleString(py_string_1.c_str());
+ cout<< "done"<<manta_sim_running<<endl;
+ }
+ cout<< "doubledone"<<endl;
+ PyGILState_Release(gilstate);
+}
+
void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd)
{
/*for now, simpleplume file creation
@@ -409,5 +431,9 @@ void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd)
manta_setup_file << ss.rdbuf();
manta_setup_file.close();
run_manta_scene("manta_scene.py");
+// for (int frame=0; frame< 20; frame++)
+// {
+// manta_sim_step(frame);
+// }
}
diff --git a/intern/smoke/intern/MANTA.h b/intern/smoke/intern/MANTA.h
index 8801f42..1ec633c 100644
--- a/intern/smoke/intern/MANTA.h
+++ b/intern/smoke/intern/MANTA.h
@@ -17,6 +17,7 @@
struct manta_arg_struct {
std::string filepath;
+ int frame_num;
};
void runMantaScript(vector<string>& args);//defined in manta_pp/pwrapper/pymain.cpp
@@ -43,14 +44,20 @@ void add_mesh_transform_method(stringstream& ss);
void manta_cache_path(char *filepath);
+static bool manta_sim_running=true;
+
//void BLI_dir_create_recursive(const char *filepath);
void create_manta_folder();
void *run_manta_scene_thread(void *threadid);
+void *run_manta_sim_thread(void *threadid);
+
void run_manta_scene(char * filepath);
void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd);
+void manta_sim_step(int frame);
+
#endif /* MANTA_H */
diff --git a/source/blender/python/manta_pp/pwrapper/pymain.cpp b/source/blender/python/manta_pp/pwrapper/pymain.cpp
index 72a8534..70f1971 100644
--- a/source/blender/python/manta_pp/pwrapper/pymain.cpp
+++ b/source/blender/python/manta_pp/pwrapper/pymain.cpp
@@ -86,13 +86,13 @@ void runMantaScript(vector<string>& args) {
#else
// for linux, use this as it produces nicer error messages
PyRun_SimpleFileEx(fp, filename.c_str(), 1);
- for (int frame=0; frame < 4; ++frame)
- {
- std::string frame_str = static_cast<ostringstream*>( &(ostringstream() << frame) )->str();
- std::string py_string_0 = string("sim_step(").append(frame_str);
- std::string py_string_1 = py_string_0.append(")\0");
- PyRun_SimpleString(py_string_1.c_str());
- }
+// for (int frame=0; frame < 4; ++frame)
+// {
+// std::string frame_str = static_cast<ostringstream*>( &(ostringstream() << frame) )->str();
+// std::string py_string_0 = string("sim_step(").append(frame_str);
+// std::string py_string_1 = py_string_0.append(")\0");
+// PyRun_SimpleString(py_string_1.c_str());
+// }
fclose(fp);
#endif
More information about the Bf-blender-cvs
mailing list