Fix #32907: failure rendering a complex node setup, hitting fixed max number

of closures limit. Optimized the code now so it can handle more.

Change SVM mix/add closure handling, now we transform the node graph so that
the mix weights are fed into the closure nodes directly.
This commit is contained in:
Brecht Van Lommel
2012-11-26 21:59:41 +00:00
parent eab58bf994
commit ceed3ef640
7 changed files with 315 additions and 222 deletions

View File

@@ -130,14 +130,7 @@ protected:
void generate_closure(ShaderNode *node, set<ShaderNode*>& done);
/* multi closure */
struct MultiClosureData {
int stack_offset;
int users;
};
void generate_multi_closure(ShaderNode *node, set<ShaderNode*>& done,
map<ShaderNode*,MultiClosureData>& closure_data, uint in_offset);
void count_closure_users(ShaderNode *node, map<ShaderNode*, MultiClosureData>& closure_data);
void generate_multi_closure(ShaderNode *node, set<ShaderNode*>& done);
/* compile */
void compile_type(Shader *shader, ShaderGraph *graph, ShaderType type);