diff --git a/Engine/source/gui/shaderEditor/guiShaderEditor.cpp b/Engine/source/gui/shaderEditor/guiShaderEditor.cpp index 549609cb0..5bd6262a6 100644 --- a/Engine/source/gui/shaderEditor/guiShaderEditor.cpp +++ b/Engine/source/gui/shaderEditor/guiShaderEditor.cpp @@ -22,6 +22,7 @@ #include "platform/platform.h" #include "gui/shaderEditor/guiShaderEditor.h" +#include "gui/shaderEditor/nodes/materialOutputNode.h" #include "core/frameAllocator.h" #include "core/stream/fileStream.h" @@ -61,7 +62,7 @@ GuiShaderEditor::GuiShaderEditor() mTempConnection = NULL; mNodeSize = 10; // test - addNode(new GuiShaderNode()); + addNode(new MaterialOutputNode()); addNode(new GuiShaderNode()); } @@ -180,15 +181,12 @@ void GuiShaderEditor::renderNodes(Point2I offset, const RectI& updateRect) { Point2I pos = node->localToGlobalCoord(input->pos) + offset; - ColorI border = mProfile->mBorderColor; - - if (node->mSelected) - border = mProfile->mBorderColorSEL; + ColorI border = input->col; ColorI fill = mProfile->mFillColor; if (hasConnection(input)) { - fill = ColorI::WHITE; + fill = input->col; } RectI socketRect(pos, Point2I(mNodeSize, mNodeSize)); @@ -199,18 +197,12 @@ void GuiShaderEditor::renderNodes(Point2I offset, const RectI& updateRect) { Point2I pos = node->localToGlobalCoord(output->pos) + offset; - ColorI border = mProfile->mBorderColor; - - if (node->mSelected) - border = mProfile->mBorderColorSEL; - - if(node->mSelected) - border = mProfile->mBorderColorSEL; + ColorI border = output->col; ColorI fill = mProfile->mFillColor; if (hasConnection(output)) { - fill = ColorI::WHITE; + fill = output->col; } RectI socketRect(pos, Point2I(mNodeSize, mNodeSize)); diff --git a/Engine/source/gui/shaderEditor/guiShaderEditor.h b/Engine/source/gui/shaderEditor/guiShaderEditor.h index 0a8f6ccff..4cb7fd5fd 100644 --- a/Engine/source/gui/shaderEditor/guiShaderEditor.h +++ b/Engine/source/gui/shaderEditor/guiShaderEditor.h @@ -34,7 +34,7 @@ #endif #ifndef _SHADERNODE_H_ -#include "gui/shaderEditor/nodes/shaderNode.h" +#include "gui/shaderEditor/guiShaderNode.h" #endif // !_SHADERNODE_H_ struct NodeConnection diff --git a/Engine/source/gui/shaderEditor/nodes/shaderNode.cpp b/Engine/source/gui/shaderEditor/guiShaderNode.cpp similarity index 89% rename from Engine/source/gui/shaderEditor/nodes/shaderNode.cpp rename to Engine/source/gui/shaderEditor/guiShaderNode.cpp index be024db68..fb3e377e4 100644 --- a/Engine/source/gui/shaderEditor/nodes/shaderNode.cpp +++ b/Engine/source/gui/shaderEditor/guiShaderNode.cpp @@ -21,7 +21,7 @@ //----------------------------------------------------------------------------- #include "platform/platform.h" -#include "gui/shaderEditor/nodes/shaderNode.h" +#include "gui/shaderEditor/guiShaderNode.h" #include "gui/core/guiCanvas.h" @@ -48,18 +48,8 @@ GuiShaderNode::GuiShaderNode() if (Sim::findObject("GuiShaderEditorProfile", profile)) setControlProfile(profile); - mInputNodes.push_back(new NodeInput("RGBA", DataDimensions::Dynamic)); - mInputNodes.push_back(new NodeInput("RGBA", DataDimensions::Dynamic)); - mInputNodes.push_back(new NodeInput("RGBA", DataDimensions::Dynamic)); - mInputNodes.push_back(new NodeInput("RGBA", DataDimensions::Dynamic)); - - mOutputNodes.push_back(new NodeOutput("RGBA", DataDimensions::Dynamic)); - mOutputNodes.push_back(new NodeOutput("RGBA", DataDimensions::Dynamic)); - mOutputNodes.push_back(new NodeOutput("RGBA", DataDimensions::Dynamic)); - mOutputNodes.push_back(new NodeOutput("RGBA", DataDimensions::Dynamic)); - // fixed extent for all nodes, only height should be changed - setExtent(210, 35); + setExtent(180, 35); mPrevNodeSize = -1; } diff --git a/Engine/source/gui/shaderEditor/nodes/shaderNode.h b/Engine/source/gui/shaderEditor/guiShaderNode.h similarity index 83% rename from Engine/source/gui/shaderEditor/nodes/shaderNode.h rename to Engine/source/gui/shaderEditor/guiShaderNode.h index cbfd4f701..25f702ee1 100644 --- a/Engine/source/gui/shaderEditor/nodes/shaderNode.h +++ b/Engine/source/gui/shaderEditor/guiShaderNode.h @@ -63,12 +63,37 @@ struct NodeSocket { String name; DataDimensions dimensions; + ColorI col = ColorI::WHITE; NodeSocket() :name(String::EmptyString), dimensions(DataDimensions::Dynamic) {} NodeSocket(String inName, DataDimensions inDim) :name(inName), dimensions(inDim) - {} + { + switch (inDim) + { + case DataDimensions::Dynamic: + col = ColorI(200, 200, 200, 200); + break; + case DataDimensions::Scalar: + col = ColorI(210, 105, 30, 200); + break; + case DataDimensions::Vector2: + col = ColorI(152, 251,152, 200); + break; + case DataDimensions::Vector3: + col = ColorI(127, 255, 212, 200); + break; + case DataDimensions::Vector4: + col = ColorI(100, 149, 237, 200); + break; + case DataDimensions::Mat4x4: + col = ColorI(153, 50, 204, 200); + break; + default: + break; + } + } public: virtual ~NodeSocket() {} diff --git a/Engine/source/gui/shaderEditor/nodes/materialOutputNode.cpp b/Engine/source/gui/shaderEditor/nodes/materialOutputNode.cpp new file mode 100644 index 000000000..c53fc0925 --- /dev/null +++ b/Engine/source/gui/shaderEditor/nodes/materialOutputNode.cpp @@ -0,0 +1,47 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +//----------------------------------------------------------------------------- +#include "platform/platform.h" +#include "gui/shaderEditor/nodes/materialOutputNode.h" + +IMPLEMENT_CONOBJECT(MaterialOutputNode); + +ConsoleDocClass(MaterialOutputNode, + "@brief Deferred Material output.\n\n" + "Editor use only.\n\n" + "@internal" +); + +MaterialOutputNode::MaterialOutputNode() + : GuiShaderNode() +{ + mNodeType = NodeTypes::Output; + + mInputNodes.push_back(new NodeInput("Albedo", DataDimensions::Vector3)); + mInputNodes.push_back(new NodeInput("Normal", DataDimensions::Vector3)); + mInputNodes.push_back(new NodeInput("Ambient Occlusion", DataDimensions::Scalar)); + mInputNodes.push_back(new NodeInput("Metallic", DataDimensions::Scalar)); + mInputNodes.push_back(new NodeInput("Roughness", DataDimensions::Scalar)); + mInputNodes.push_back(new NodeInput("Emissive Color", DataDimensions::Vector3)); + mInputNodes.push_back(new NodeInput("Opacity", DataDimensions::Scalar)); + + mTitle = "Standard BRDF"; +} diff --git a/Engine/source/gui/shaderEditor/nodes/materialOutputNode.h b/Engine/source/gui/shaderEditor/nodes/materialOutputNode.h new file mode 100644 index 000000000..a3b496c0a --- /dev/null +++ b/Engine/source/gui/shaderEditor/nodes/materialOutputNode.h @@ -0,0 +1,35 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +//----------------------------------------------------------------------------- + +#include "gui/shaderEditor/guiShaderNode.h" + +class MaterialOutputNode : public GuiShaderNode +{ + typedef GuiShaderNode Parent; +public: + MaterialOutputNode(); + + // is the parent that all other nodes are derived from. + DECLARE_CONOBJECT(MaterialOutputNode); + DECLARE_CATEGORY("Shader Output"); + DECLARE_DESCRIPTION("Deferred Material output."); +};