[Bf-blender-cvs] [db237d8] alembic_pointcache: Exporter class to handle baking of point cache data over a frame range. This uses a mutex and cancel flag to make it work in the job system.

Lukas Tönne noreply at git.blender.org
Thu Oct 16 16:52:54 CEST 2014


Commit: db237d837aa894ccc8c820cc9355dcec2da05699
Author: Lukas Tönne
Date:   Thu Nov 21 12:20:11 2013 +0100
Branches: alembic_pointcache
https://developer.blender.org/rBdb237d837aa894ccc8c820cc9355dcec2da05699

Exporter class to handle baking of point cache data over a frame range. This uses a mutex and cancel flag to make it work in the job system.

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

M	source/blender/pointcache/CMakeLists.txt
M	source/blender/pointcache/PTC_api.cpp
M	source/blender/pointcache/PTC_api.h
A	source/blender/pointcache/intern/export.cpp
A	source/blender/pointcache/intern/export.h

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

diff --git a/source/blender/pointcache/CMakeLists.txt b/source/blender/pointcache/CMakeLists.txt
index 32a0bd6..930156c 100644
--- a/source/blender/pointcache/CMakeLists.txt
+++ b/source/blender/pointcache/CMakeLists.txt
@@ -52,6 +52,8 @@ if(WITH_ALEMBIC)
 	)
 
 	list(APPEND SRC
+	intern/export.h
+	intern/export.cpp
 	intern/particles.h
 	intern/particles.cpp
 	intern/reader.h
diff --git a/source/blender/pointcache/PTC_api.cpp b/source/blender/pointcache/PTC_api.cpp
index 520d2cc..ec22d87 100644
--- a/source/blender/pointcache/PTC_api.cpp
+++ b/source/blender/pointcache/PTC_api.cpp
@@ -22,6 +22,7 @@
 
 #include "reader.h"
 #include "writer.h"
+#include "export.h"
 #include "particles.h"
 
 #include "util_path.h"
@@ -46,53 +47,11 @@ void PTC_write_sample(struct PTCWriter *_writer)
 	writer->write_sample();
 }
 
-void PTC_bake(Main *bmain, Scene *scene, struct PTCWriter *writer, int start_frame, int end_frame)
+void PTC_bake(struct Main *bmain, struct Scene *scene, struct PTCWriter *_writer, int start_frame, int end_frame)
 {
-	int /*use_timer = FALSE, */sfra, efra;
-//	double stime, ptime, ctime, fetd;
-//	char run[32], cur[32], etd[32];
-
-//	ptcache_bake_data *data = (ptcache_bake_data*)ptr;
-
-//	stime = ptime = PIL_check_seconds_timer();
-	sfra = start_frame;
-	efra = end_frame;
-
-	for (; (*data->cfra_ptr <= data->endframe) && !data->break_operation; *data->cfra_ptr+=data->step) {
-		BKE_scene_update_for_newframe(data->main, data->scene, data->scene->lay);
-#if 0
-		if (G.background) {
-			printf("bake: frame %d :: %d\n", (int)*data->cfra_ptr, data->endframe);
-		}
-		else {
-			ctime = PIL_check_seconds_timer();
-
-			fetd = (ctime-ptime)*(efra-*data->cfra_ptr)/data->step;
-
-			if (use_timer || fetd > 60.0) {
-				use_timer = TRUE;
-
-				ptcache_dt_to_str(cur, ctime-ptime);
-				ptcache_dt_to_str(run, ctime-stime);
-				ptcache_dt_to_str(etd, fetd);
-
-				printf("Baked for %s, current frame: %i/%i (%.3fs), ETC: %s\r", run, *data->cfra_ptr-sfra+1, efra-sfra+1, ctime-ptime, etd);
-			}
-			ptime = ctime;
-		}
-#endif
-	}
-
-#if 0
-	if (use_timer) {
-		/* start with newline because of \r above */
-		ptcache_dt_to_str(run, PIL_check_seconds_timer()-stime);
-		printf("\nBake %s %s (%i frames simulated).\n", (data->break_operation ? "canceled after" : "finished in"), run, *data->cfra_ptr-sfra);
-	}
-#endif
-
-//	data->thread_ended = TRUE;
-//	return NULL;
+	PTC::Writer *writer = (PTC::Writer *)_writer;
+	PTC::Exporter exporter(bmain, scene);
+	exporter.bake(writer, start_frame, end_frame);
 }
 
 
diff --git a/source/blender/pointcache/PTC_api.h b/source/blender/pointcache/PTC_api.h
index 415d83f..be111c8 100644
--- a/source/blender/pointcache/PTC_api.h
+++ b/source/blender/pointcache/PTC_api.h
@@ -36,11 +36,12 @@ struct PTCReader;
 
 void PTC_writer_free(struct PTCWriter *writer);
 void PTC_write_sample(struct PTCWriter *writer);
-void PTC_bake(struct PTCWriter *writer, int start_frame, int end_frame);
 
 void PTC_reader_free(struct PTCReader *reader);
 void PTC_read_sample(struct PTCReader *reader);
 
+void PTC_bake(struct Main *bmain, struct Scene *scene, struct PTCWriter *writer, int start_frame, int end_frame);
+
 
 /* Particles */
 struct PTCWriter *PTC_writer_particles(struct Object *ob, struct ParticleSystem *psys);
diff --git a/source/blender/pointcache/PTC_api.h b/source/blender/pointcache/intern/export.cpp
similarity index 52%
copy from source/blender/pointcache/PTC_api.h
copy to source/blender/pointcache/intern/export.cpp
index 415d83f..c908295 100644
--- a/source/blender/pointcache/PTC_api.h
+++ b/source/blender/pointcache/intern/export.cpp
@@ -16,38 +16,49 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-#ifndef PTC_API_H
-#define PTC_API_H
+#include "export.h"
+#include "writer.h"
 
-#ifdef __cplusplus
 extern "C" {
-#endif
+#include "DNA_scene_types.h"
 
-struct Main;
-struct Scene;
-struct Object;
-struct ParticleSystem;
+#include "BKE_main.h"
+#include "BKE_scene.h"
+}
 
-void PTC_test_archive(void);
+namespace PTC {
 
+Exporter::Exporter(Main *bmain, Scene *scene) :
+    m_bmain(bmain),
+    m_scene(scene),
+    m_cancel(false)
+{
+}
 
-struct PTCWriter;
-struct PTCReader;
+void Exporter::bake(Writer *writer, int start_frame, int end_frame)
+{
+	thread_scoped_lock(m_mutex);
 
-void PTC_writer_free(struct PTCWriter *writer);
-void PTC_write_sample(struct PTCWriter *writer);
-void PTC_bake(struct PTCWriter *writer, int start_frame, int end_frame);
+	for (int cfra = start_frame; cfra <= end_frame; ++cfra) {
+		BKE_scene_update_for_newframe(m_bmain, m_scene, m_scene->lay);
 
-void PTC_reader_free(struct PTCReader *reader);
-void PTC_read_sample(struct PTCReader *reader);
+		writer->write_sample();
 
+		if (m_cancel)
+			break;
+	}
+}
 
-/* Particles */
-struct PTCWriter *PTC_writer_particles(struct Object *ob, struct ParticleSystem *psys);
-struct PTCReader *PTC_reader_particles(struct Object *ob, struct ParticleSystem *psys);
+bool Exporter::cancel() const
+{
+	thread_scoped_lock(m_mutex);
+	return m_cancel;
+}
 
-#ifdef __cplusplus
-} /* extern C */
-#endif
+void Exporter::cancel(bool value)
+{
+	thread_scoped_lock(m_mutex);
+	m_cancel = value;
+}
 
-#endif  /* PTC_API_H */
+} /* namespace PTC */
diff --git a/source/blender/pointcache/PTC_api.h b/source/blender/pointcache/intern/export.h
similarity index 53%
copy from source/blender/pointcache/PTC_api.h
copy to source/blender/pointcache/intern/export.h
index 415d83f..510f4d2 100644
--- a/source/blender/pointcache/PTC_api.h
+++ b/source/blender/pointcache/intern/export.h
@@ -16,38 +16,37 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-#ifndef PTC_API_H
-#define PTC_API_H
+#ifndef PTC_EXPORT_H
+#define PTC_EXPORT_H
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+#include "thread.h"
 
 struct Main;
 struct Scene;
-struct Object;
-struct ParticleSystem;
 
-void PTC_test_archive(void);
+namespace PTC {
 
+class Writer;
 
-struct PTCWriter;
-struct PTCReader;
+class Exporter
+{
+public:
+	Exporter(Main *bmain, Scene *scene);
+	
+	void bake(Writer *writer, int start_frame, int end_frame);
 
-void PTC_writer_free(struct PTCWriter *writer);
-void PTC_write_sample(struct PTCWriter *writer);
-void PTC_bake(struct PTCWriter *writer, int start_frame, int end_frame);
+	bool cancel() const;
+	void cancel(bool value);
 
-void PTC_reader_free(struct PTCReader *reader);
-void PTC_read_sample(struct PTCReader *reader);
+private:
+	thread_mutex m_mutex;
+	
+	Main *m_bmain;
+	Scene *m_scene;
+	
+	bool m_cancel;
+};
 
+} /* namespace PTC */
 
-/* Particles */
-struct PTCWriter *PTC_writer_particles(struct Object *ob, struct ParticleSystem *psys);
-struct PTCReader *PTC_reader_particles(struct Object *ob, struct ParticleSystem *psys);
-
-#ifdef __cplusplus
-} /* extern C */
-#endif
-
-#endif  /* PTC_API_H */
+#endif  /* PTC_EXPORT_H */




More information about the Bf-blender-cvs mailing list