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/blackbody.cpp2
-rw-r--r--intern/cycles/render/blackbody.h2
-rw-r--r--intern/cycles/render/shader.cpp14
-rw-r--r--intern/cycles/render/shader.h3
4 files changed, 13 insertions, 8 deletions
diff --git a/intern/cycles/render/blackbody.cpp b/intern/cycles/render/blackbody.cpp
index 6e2cb7c62b6..04e6eaf5373 100644
--- a/intern/cycles/render/blackbody.cpp
+++ b/intern/cycles/render/blackbody.cpp
@@ -38,7 +38,7 @@
CCL_NAMESPACE_BEGIN
-vector<float> blackbody_table()
+vector<float> blackbody_table_build()
{
/* quoted from OSLs opcolor.cpp
In order to speed up the blackbody computation, we have a table
diff --git a/intern/cycles/render/blackbody.h b/intern/cycles/render/blackbody.h
index 5671cbaf9bd..6b752a227fa 100644
--- a/intern/cycles/render/blackbody.h
+++ b/intern/cycles/render/blackbody.h
@@ -21,7 +21,7 @@
CCL_NAMESPACE_BEGIN
-vector<float> blackbody_table();
+vector<float> blackbody_table_build();
CCL_NAMESPACE_END
diff --git a/intern/cycles/render/shader.cpp b/intern/cycles/render/shader.cpp
index 1fa949b17de..dbf5c5ed7ff 100644
--- a/intern/cycles/render/shader.cpp
+++ b/intern/cycles/render/shader.cpp
@@ -387,8 +387,10 @@ void ShaderManager::device_update_common(Device *device, DeviceScene *dscene, Sc
KernelTables *ktables = &dscene->data.tables;
if(has_converter_blackbody && blackbody_table_offset == TABLE_OFFSET_INVALID) {
- vector<float> table = blackbody_table();
- blackbody_table_offset = scene->lookup_tables->add_table(dscene, table);
+ if(blackbody_table.size() == 0) {
+ blackbody_table = blackbody_table_build();
+ }
+ blackbody_table_offset = scene->lookup_tables->add_table(dscene, blackbody_table);
ktables->blackbody_offset = (int)blackbody_table_offset;
}
@@ -399,10 +401,10 @@ void ShaderManager::device_update_common(Device *device, DeviceScene *dscene, Sc
/* beckmann lookup table */
if(beckmann_table_offset == TABLE_OFFSET_INVALID) {
- vector<float> table;
- beckmann_table_build(table);
- beckmann_table_offset = scene->lookup_tables->add_table(dscene, table);
-
+ if(beckmann_table.size() == 0) {
+ beckmann_table_build(beckmann_table);
+ }
+ beckmann_table_offset = scene->lookup_tables->add_table(dscene, beckmann_table);
ktables->beckmann_offset = (int)beckmann_table_offset;
}
diff --git a/intern/cycles/render/shader.h b/intern/cycles/render/shader.h
index 58960e7fc89..1d903ee3a13 100644
--- a/intern/cycles/render/shader.h
+++ b/intern/cycles/render/shader.h
@@ -170,6 +170,9 @@ protected:
typedef unordered_map<ustring, uint, ustringHash> AttributeIDMap;
AttributeIDMap unique_attribute_id;
+ vector<float> blackbody_table;
+ vector<float> beckmann_table;
+
size_t blackbody_table_offset;
size_t beckmann_table_offset;
};