Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--intern/cycles/render/camera.cpp10
-rw-r--r--intern/cycles/render/film.cpp6
-rw-r--r--intern/cycles/render/shader.cpp7
-rw-r--r--intern/cycles/render/tables.cpp10
-rw-r--r--intern/cycles/render/tables.h2
5 files changed, 15 insertions, 20 deletions
diff --git a/intern/cycles/render/camera.cpp b/intern/cycles/render/camera.cpp
index 028916c1b8f..ad96473e5d2 100644
--- a/intern/cycles/render/camera.cpp
+++ b/intern/cycles/render/camera.cpp
@@ -323,6 +323,7 @@ void Camera::device_update(Device *device, DeviceScene *dscene, Scene *scene)
#ifdef __CAMERA_MOTION__
kcam->shuttertime = (need_motion == Scene::MOTION_BLUR) ? shuttertime: -1.0f;
+ scene->lookup_tables->remove_table(&shutter_table_offset);
if(need_motion == Scene::MOTION_BLUR) {
vector<float> shutter_table;
util_cdf_inverted(SHUTTER_TABLE_SIZE,
@@ -335,10 +336,6 @@ void Camera::device_update(Device *device, DeviceScene *dscene, Scene *scene)
shutter_table);
kcam->shutter_table_offset = (int)shutter_table_offset;
}
- else if(shutter_table_offset != TABLE_OFFSET_INVALID) {
- scene->lookup_tables->remove_table(shutter_table_offset);
- shutter_table_offset = TABLE_OFFSET_INVALID;
- }
#else
kcam->shuttertime = -1.0f;
#endif
@@ -425,10 +422,7 @@ void Camera::device_free(Device * /*device*/,
DeviceScene * /*dscene*/,
Scene *scene)
{
- if(shutter_table_offset != TABLE_OFFSET_INVALID) {
- scene->lookup_tables->remove_table(shutter_table_offset);
- shutter_table_offset = TABLE_OFFSET_INVALID;
- }
+ scene->lookup_tables->remove_table(&shutter_table_offset);
}
bool Camera::modified(const Camera& cam)
diff --git a/intern/cycles/render/film.cpp b/intern/cycles/render/film.cpp
index abdd1c2cc8a..95cb10ab13b 100644
--- a/intern/cycles/render/film.cpp
+++ b/intern/cycles/render/film.cpp
@@ -428,6 +428,7 @@ void Film::device_update(Device *device, DeviceScene *dscene, Scene *scene)
/* update filter table */
vector<float> table = filter_table(filter_type, filter_width);
+ scene->lookup_tables->remove_table(&filter_table_offset);
filter_table_offset = scene->lookup_tables->add_table(dscene, table);
kfilm->filter_table_offset = (int)filter_table_offset;
@@ -443,10 +444,7 @@ void Film::device_free(Device * /*device*/,
DeviceScene * /*dscene*/,
Scene *scene)
{
- if(filter_table_offset != TABLE_OFFSET_INVALID) {
- scene->lookup_tables->remove_table(filter_table_offset);
- filter_table_offset = TABLE_OFFSET_INVALID;
- }
+ scene->lookup_tables->remove_table(&filter_table_offset);
}
bool Film::modified(const Film& film)
diff --git a/intern/cycles/render/shader.cpp b/intern/cycles/render/shader.cpp
index c07c6a04d03..82b607563ed 100644
--- a/intern/cycles/render/shader.cpp
+++ b/intern/cycles/render/shader.cpp
@@ -404,8 +404,8 @@ void ShaderManager::device_update_common(Device *device,
}
}
beckmann_table_offset = scene->lookup_tables->add_table(dscene, beckmann_table);
- ktables->beckmann_offset = (int)beckmann_table_offset;
}
+ ktables->beckmann_offset = (int)beckmann_table_offset;
/* integrator */
KernelIntegrator *kintegrator = &dscene->data.integrator;
@@ -418,10 +418,7 @@ void ShaderManager::device_update_common(Device *device,
void ShaderManager::device_free_common(Device *device, DeviceScene *dscene, Scene *scene)
{
- if(beckmann_table_offset != TABLE_OFFSET_INVALID) {
- scene->lookup_tables->remove_table(beckmann_table_offset);
- beckmann_table_offset = TABLE_OFFSET_INVALID;
- }
+ scene->lookup_tables->remove_table(&beckmann_table_offset);
device->tex_free(dscene->shader_flag);
dscene->shader_flag.clear();
diff --git a/intern/cycles/render/tables.cpp b/intern/cycles/render/tables.cpp
index cde024cc11c..dfafd99961b 100644
--- a/intern/cycles/render/tables.cpp
+++ b/intern/cycles/render/tables.cpp
@@ -94,15 +94,21 @@ size_t LookupTables::add_table(DeviceScene *dscene, vector<float>& data)
return new_table.offset;
}
-void LookupTables::remove_table(size_t offset)
+void LookupTables::remove_table(size_t *offset)
{
+ if(*offset == TABLE_OFFSET_INVALID) {
+ /* The table isn't even allocated, so just return here. */
+ return;
+ }
+
need_update = true;
list<Table>::iterator table;
for(table = lookup_tables.begin(); table != lookup_tables.end(); table++) {
- if(table->offset == offset) {
+ if(table->offset == *offset) {
lookup_tables.erase(table);
+ *offset = TABLE_OFFSET_INVALID;
return;
}
}
diff --git a/intern/cycles/render/tables.h b/intern/cycles/render/tables.h
index 4efa09fa3c1..1bb70b22762 100644
--- a/intern/cycles/render/tables.h
+++ b/intern/cycles/render/tables.h
@@ -45,7 +45,7 @@ public:
void device_free(Device *device, DeviceScene *dscene);
size_t add_table(DeviceScene *dscene, vector<float>& data);
- void remove_table(size_t offset);
+ void remove_table(size_t *offset);
};
CCL_NAMESPACE_END