[Bf-blender-cvs] [89823c2] bake-cycles: Cycles-Bake: [review] restoring SAMPLING_PATTERN_CMJ test and adding a is_baking variable

Dalai Felinto noreply at git.blender.org
Wed Apr 23 02:47:56 CEST 2014


Commit: 89823c20b18c66656ac292993a17bb230c53a812
Author: Dalai Felinto
Date:   Tue Apr 1 20:26:22 2014 -0300
https://developer.blender.org/rB89823c20b18c66656ac292993a17bb230c53a812

Cycles-Bake: [review] restoring SAMPLING_PATTERN_CMJ test and adding a is_baking variable

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

M	intern/cycles/blender/blender_session.cpp
M	intern/cycles/render/bake.cpp
M	intern/cycles/render/bake.h
M	intern/cycles/render/session.cpp

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

diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index 8d0e618..7725e79 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -540,11 +540,6 @@ void BlenderSession::bake(BL::Object b_object, const string& pass_type, BL::Bake
 	SessionParams session_params = BlenderSync::get_session_params(b_engine, b_userpref, b_scene, background);
 	BufferParams buffer_params = BlenderSync::get_buffer_params(b_render, b_scene, b_v3d, b_rv3d, scene->camera, width, height);
 
-	/* set number of samples */
-	session->tile_manager.set_samples(session_params.samples);
-	session->reset(buffer_params, session_params.samples);
-	session->update_scene();
-
 	/* find object index. todo: is arbitrary - copied from mesh_displace.cpp */
 	for(size_t i = 0; i < scene->objects.size(); i++) {
 		if(strcmp(scene->objects[i]->name.c_str(), b_object.name().c_str()) == 0) {
@@ -561,6 +556,11 @@ void BlenderSession::bake(BL::Object b_object, const string& pass_type, BL::Bake
 
 	populate_bake_data(bake_data, pixel_array, num_pixels);
 
+	/* set number of samples */
+	session->tile_manager.set_samples(session_params.samples);
+	session->reset(buffer_params, session_params.samples);
+	session->update_scene();
+
 	scene->bake_manager->bake(scene->device, &scene->dscene, scene, session->progress, shader_type, bake_data, result);
 
 	/* free all memory used (host and device), so we wouldn't leave render
diff --git a/intern/cycles/render/bake.cpp b/intern/cycles/render/bake.cpp
index 0aff4a0..cd7c57c 100644
--- a/intern/cycles/render/bake.cpp
+++ b/intern/cycles/render/bake.cpp
@@ -62,20 +62,22 @@ uint4 BakeData::data(int i) {
 
 BakeManager::BakeManager()
 {
-	bake_data = NULL;
+	m_bake_data = NULL;
+	m_is_baking = false;
 	need_update = true;
 }
 
 BakeManager::~BakeManager()
 {
-	if(bake_data)
-		delete bake_data;
+	if(m_bake_data)
+		delete m_bake_data;
 }
 
 BakeData *BakeManager::init(const int object, const int tri_offset, const int num_pixels)
 {
-	bake_data = new BakeData(object, tri_offset, num_pixels);
-	return bake_data;
+	m_is_baking = true;
+	m_bake_data = new BakeData(object, tri_offset, num_pixels);
+	return m_bake_data;
 }
 
 bool BakeManager::bake(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress, ShaderEvalType shader_type, BakeData *bake_data, float result[])
@@ -118,6 +120,7 @@ bool BakeManager::bake(Device *device, DeviceScene *dscene, Scene *scene, Progre
 	if(progress.get_cancel()) {
 		device->mem_free(d_input);
 		device->mem_free(d_output);
+		m_is_baking = false;
 		return false;
 	}
 
@@ -139,6 +142,7 @@ bool BakeManager::bake(Device *device, DeviceScene *dscene, Scene *scene, Progre
 			result[index + j] = out[j];
 	}
 
+	m_is_baking = false;
 	return true;
 }
 
@@ -154,4 +158,9 @@ void BakeManager::device_update(Device *device, DeviceScene *dscene, Scene *scen
 
 void BakeManager::device_free(Device *device, DeviceScene *dscene) {}
 
+bool BakeManager::is_baking()
+{
+	return m_is_baking;
+}
+
 CCL_NAMESPACE_END
diff --git a/intern/cycles/render/bake.h b/intern/cycles/render/bake.h
index 24a3443..abe5efe 100644
--- a/intern/cycles/render/bake.h
+++ b/intern/cycles/render/bake.h
@@ -45,9 +45,6 @@ private:
 
 class BakeManager {
 public:
-
-	bool need_update;
-
 	BakeManager();
 	~BakeManager();
 
@@ -58,8 +55,12 @@ public:
 	void device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress);
 	void device_free(Device *device, DeviceScene *dscene);
 
+	bool is_baking();
+	bool need_update;
+
 private:
-	BakeData *bake_data;
+	BakeData *m_bake_data;
+	bool m_is_baking;
 };
 
 CCL_NAMESPACE_END
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index 0d999dd..c3e0c4f 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -23,6 +23,7 @@
 #include "integrator.h"
 #include "scene.h"
 #include "session.h"
+#include "bake.h"
 
 #include "util_foreach.h"
 #include "util_function.h"
@@ -736,12 +737,17 @@ void Session::update_scene()
 	/* number of samples is needed by multi jittered
 	 * sampling pattern and by baking */
 	Integrator *integrator = scene->integrator;
+	BakeManager *bake_manager = scene->bake_manager;
 
-	int aa_samples = tile_manager.num_samples;
+	if(integrator->sampling_pattern == SAMPLING_PATTERN_CMJ ||
+	   bake_manager->is_baking()
+	   ) {
+		int aa_samples = tile_manager.num_samples;
 
-	if(aa_samples != integrator->aa_samples) {
-		integrator->aa_samples = aa_samples;
-		integrator->tag_update(scene);
+		if(aa_samples != integrator->aa_samples) {
+			integrator->aa_samples = aa_samples;
+			integrator->tag_update(scene);
+		}
 	}
 
 	/* update scene */




More information about the Bf-blender-cvs mailing list