diff options
-rw-r--r-- | intern/cycles/render/blackbody.cpp | 2 | ||||
-rw-r--r-- | intern/cycles/render/blackbody.h | 2 | ||||
-rw-r--r-- | intern/cycles/render/shader.cpp | 14 | ||||
-rw-r--r-- | intern/cycles/render/shader.h | 3 |
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; }; |