[Bf-blender-cvs] [d1170bf] bake-cycles: Cycles-Bake: fix for regression introduced on: "[review] restoring SAMPLING_PATTERN_CMJ test and adding a is_baking variable"

Dalai Felinto noreply at git.blender.org
Wed Apr 23 02:48:00 CEST 2014


Commit: d1170bf1c8fd8254ef74b48362966ebcd0a9072a
Author: Dalai Felinto
Date:   Fri Apr 4 18:57:31 2014 -0300
https://developer.blender.org/rBd1170bf1c8fd8254ef74b48362966ebcd0a9072a

Cycles-Bake: fix for regression introduced on: "[review] restoring SAMPLING_PATTERN_CMJ test and adding a
is_baking variable"

The bug was: scenes with more than one object will misbehave.

We can't get the object id before the scene is updated, so we now
set the baking variable before we call bake_manager->init.

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

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 7725e79..6f959d4 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -515,7 +515,7 @@ static bool is_light_pass(ShaderEvalType type)
 void BlenderSession::bake(BL::Object b_object, const string& pass_type, BL::BakePixel pixel_array, int num_pixels, int depth, float result[])
 {
 	ShaderEvalType shader_type = get_shader_type(pass_type);
-	size_t object_index = ~0;
+	size_t object_index = OBJECT_NONE;
 	int tri_offset = 0;
 
 	if(shader_type == SHADER_EVAL_UV) {
@@ -540,6 +540,13 @@ 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);
 
+	scene->bake_manager->set_baking(true);
+
+	/* 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) {
diff --git a/intern/cycles/render/bake.cpp b/intern/cycles/render/bake.cpp
index cd7c57c..eb729d3 100644
--- a/intern/cycles/render/bake.cpp
+++ b/intern/cycles/render/bake.cpp
@@ -73,9 +73,18 @@ BakeManager::~BakeManager()
 		delete m_bake_data;
 }
 
+bool BakeManager::get_baking()
+{
+	return m_is_baking;
+}
+
+void BakeManager::set_baking(const bool value)
+{
+	m_is_baking = value;
+}
+
 BakeData *BakeManager::init(const int object, const int tri_offset, const int num_pixels)
 {
-	m_is_baking = true;
 	m_bake_data = new BakeData(object, tri_offset, num_pixels);
 	return m_bake_data;
 }
@@ -158,9 +167,4 @@ 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 abe5efe..38ac51b 100644
--- a/intern/cycles/render/bake.h
+++ b/intern/cycles/render/bake.h
@@ -48,6 +48,9 @@ public:
 	BakeManager();
 	~BakeManager();
 
+	bool get_baking();
+	void set_baking(const bool value);
+
 	BakeData *init(const int object, const int tri_offset, const int num_pixels);
 
 	bool bake(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress, ShaderEvalType shader_type, BakeData *bake_data, float result[]);
@@ -55,7 +58,6 @@ 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:
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index c3e0c4f..341cd3c 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -740,7 +740,7 @@ void Session::update_scene()
 	BakeManager *bake_manager = scene->bake_manager;
 
 	if(integrator->sampling_pattern == SAMPLING_PATTERN_CMJ ||
-	   bake_manager->is_baking()
+	   bake_manager->get_baking()
 	   ) {
 		int aa_samples = tile_manager.num_samples;




More information about the Bf-blender-cvs mailing list