TerraForge3D  2.3.1
3D Terrain And Landscape Generator

◆ OnEvaluate()

void CustomShaderNode::OnEvaluate ( GLSLFunction function,
GLSLLine line 
)
overridevirtual

Implements SNENode.

Definition at line 21 of file CustomShaderNode.cpp.

22{
23 GLSLFunction ft = *func;
24 std::string cline = code;
25 // Add code symbols
26 cline = ReplaceString(cline, "{ID}", STR(id));
27 cline = ReplaceString(cline, "{OFFSET}", STR(dataBlobOffset));
28 int did = 0;
29 for(auto it : sharedDataTemplate)
30 {
31 cline = ReplaceString(cline, it.alias, SDATA(did));
32 did++;
33 }
34 ft.AddLine(GLSLLine(cline));
35 handler->AddFunction(ft);
36 int i = 0;
37
38 if(!useArrayParams)
39 {
40 i = 0;
41 for(auto &param : params)
42 {
43 function->AddLine(GLSLLine(param.first + " " + VAR(param.second + STR(i)) + " = " + param.first + "(0.0f);"));
44
45 if(inputPins[i]->IsLinked())
46 {
47 GLSLLine tmp("");
48 inputPins[i]->other->Evaluate(GetParams(function, &tmp));
49 function->AddLine(GLSLLine(VAR(param.second + STR(i)) + " = " + tmp.line + ";"));
50 }
51
52 i++;
53 }
54 }
55 else
56 {
57 i = 0;
58 for(auto &param: params)
59 {
60 function->AddLine(GLSLLine(param.first + " " + VAR(param.second + STR(i)) + "[" + STR(paramCount) + "];"));
61 for(int k = 0 ; k < paramCount ; k++)
62 {
63 if (inputPins[k * params.size() + i]->IsLinked())
64 {
65 GLSLLine tmp("");
66 inputPins[k * params.size() + i]->other->Evaluate(GetParams(function, &tmp));
67 function->AddLine(GLSLLine(VAR(param.second + STR(i)) + "[" + STR(k) + "]" + " = " + tmp.line + ";"));
68 }
69 else
70 {
71 function->AddLine(GLSLLine(VAR(param.second + STR(i)) + "[" + STR(k) + "]" + " = " + param.first + "(0.0f);"));
72 }
73 }
74 }
75 i++;
76 }
77
78 line->line = func->name + "(";
79 i = 0;
80 int n = params.size();
81
82 for(auto &param : params)
83 {
84 line->line += VAR(param.second + STR(i));
85
86 if(i < n - 1)
87 {
88 line->line += ", ";
89 }
90
91 i++;
92 }
93 int callerPin = 0;
94 for(int i = 0;i<outputPins.size();i++)
95 {
96 if(outputPins[i]->id == callerPinId)
97 {
98 callerPin = i;
99 break;
100 }
101 }
102 line->line += (params.size() == 0 ? "" : ", ") + STR(callerPin) + ")";
103}