Explorar el Código

material output node

material output node added

colors denoting node sockets added. this will probably be changed.
marauder2k7 hace 1 año
padre
commit
2dc623df7e

+ 6 - 14
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));

+ 1 - 1
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

+ 2 - 12
Engine/source/gui/shaderEditor/nodes/shaderNode.cpp → 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;
 }

+ 26 - 1
Engine/source/gui/shaderEditor/nodes/shaderNode.h → 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() {}

+ 47 - 0
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";
+}

+ 35 - 0
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.");
+};