TerraForge3D  2.3.1
3D Terrain And Landscape Generator
ShaderOutputNode.cpp
1#include "Shading/ShaderNodes/ShaderOutputNode.h"
2
3#include <iostream>
4
5void ShaderOutputNode::OnEvaluate(GLSLFunction *function, GLSLLine *line)
6{
7 if (inputPins[0]->IsLinked())
8 {
9 GLSLLine ln("");
10 inputPins[0]->other->Evaluate(GetParams(function, &ln));
11 line->line = ln.line;
12 }
13
14 else
15 {
16 function->AddLine(GLSLLine("vec3 " + VAR("norm") + " = normalize(Normal);"));
17 function->AddLine(GLSLLine("vec3 " + VAR("lightDir") + " = normalize(_LightPosition - FragPos.xyz );"));
18 function->AddLine(GLSLLine("float " + VAR("diff") + " = max(dot(" + VAR("norm") + ", " + VAR("lightDir") + "), 0.0f);"));
19 function->AddLine(GLSLLine("vec3 " + VAR("diffuse") + " = " + VAR("diff") + " * _LightColor;"));
20 function->AddLine(GLSLLine("vec3 " + VAR("result") + " = (vec3(0.2, 0.2, 0.2) + " + VAR("diffuse") + ")" + \
21 " * vec3(" + SDATA(0) + ", " + SDATA(1) + ", " + SDATA(2) + ");"));
22 line->line = VAR("result");
23 }
24}
25
26void ShaderOutputNode::Load(nlohmann::json data)
27{
28 color[0] = data["color.r"];
29 color[1] = data["color.g"];
30 color[2] = data["color.b"];
31 color[3] = data["color.a"];
32}
33
34nlohmann::json ShaderOutputNode::Save()
35{
36 nlohmann::json data;
37 data["type"] = "ShaderOutput";
38 data["color.r"] = color[0];
39 data["color.g"] = color[1];
40 data["color.b"] = color[2];
41 data["color.a"] = color[3];
42 return data;
43}
44
45void ShaderOutputNode::UpdateShaders()
46{
47 sharedData->d0 = color[0];
48 sharedData->d1 = color[1];
49 sharedData->d2 = color[2];
50}
51
52void ShaderOutputNode::OnRender()
53{
54 DrawHeader("Output");
55 inputPins[0]->Render();
56
57 if (!inputPins[0]->IsLinked())
58 {
59 if(ImGui::ColorPicker4("Object Color", color))
60 {
61 sharedData->d0 = color[0];
62 sharedData->d1 = color[1];
63 sharedData->d2 = color[2];
64 }
65 }
66
67 else
68 {
69 ImGui::Dummy(ImVec2(100, 40));
70 }
71}
72
73ShaderOutputNode::ShaderOutputNode(GLSLHandler *handler)
74 :SNENode(handler)
75{
76 name = "Output";
77 color[0] = color[1] = color[2] = color[3] = 1.0f;
78 headerColor = ImColor(SHADER_OUTPUT_NODE_COLOR);
79 inputPins.push_back(new SNEPin(NodeEditorPinType::Input, SNEPinType::SNEPinType_Float3));
80}
81
82
83ShaderOutputNode::~ShaderOutputNode()
84{
85}
a class to store JSON values
Definition: json.hpp:17860