[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