Browse Source

bug fix

deleteSelection when an output node had multiple connections only the first one was deleted, needed a new function to return a vector of connections that are now looped and deleted at the end of delete selection.

few other minor additions and fixes.
marauder2k7 1 year ago
parent
commit
d9c4269d8b

+ 1 - 1
Engine/source/gfx/gfxDrawUtil.cpp

@@ -1294,7 +1294,7 @@ void GFXDrawUtil::drawObjectBox( const GFXStateBlockDesc &desc, const Point3F &s
    Point3F cubePts[8];
    for (U32 i = 0; i < 8; i++)
    {
-	   cubePts[i] = cubePoints[i]/2;
+      cubePts[i] = cubePoints[i]/2;
    }
 
    // 8 corner points of the box

+ 29 - 23
Engine/source/gui/shaderEditor/guiShaderEditor.cpp

@@ -23,6 +23,7 @@
 #include "platform/platform.h"
 #include "gui/shaderEditor/guiShaderEditor.h"
 #include "gui/shaderEditor/nodes/materialOutputNode.h"
+#include "gui/shaderEditor/nodes/mathNode.h"
 
 #include "core/frameAllocator.h"
 #include "core/stream/fileStream.h"
@@ -62,7 +63,8 @@ GuiShaderEditor::GuiShaderEditor()
    mTempConnection = NULL;
    mNodeSize = 10;
    // test
-   addNode(new MaterialOutputNode());
+   addNode(new BRDFOutputNode());
+   addNode(new MathAddNode());
    addNode(new GuiShaderNode());
 }
 
@@ -648,31 +650,23 @@ void GuiShaderEditor::deleteSelection()
    {
       mTrash->addObject(node);
 
+      Vector<NodeConnection*> connVec;
       for (NodeInput* input : node->mInputNodes)
       {
-         NodeConnection* conn;
-         if (hasConnection(input, conn))
-         {
-            // selecting one node, push it to the front of the mcurrnodes stack so its rendered on top.
-            Vector< NodeConnection* >::iterator i = T3D::find(mCurrConnections.begin(), mCurrConnections.end(), conn);
-            if (i != mCurrConnections.end())
-            {
-               mCurrConnections.erase(i);
-            }
-         }
+         hasConnection(input, connVec);
       }
 
       for (NodeOutput* output : node->mOutputNodes)
       {
-         NodeConnection* conn;
-         if (hasConnection(output, conn))
+         hasConnection(output, connVec);
+      }
+
+      for (NodeConnection* conn : connVec)
+      {
+         Vector< NodeConnection* >::iterator i = T3D::find(mCurrConnections.begin(), mCurrConnections.end(), conn);
+         if (i != mCurrConnections.end())
          {
-            // selecting one node, push it to the front of the mcurrnodes stack so its rendered on top.
-            Vector< NodeConnection* >::iterator i = T3D::find(mCurrConnections.begin(), mCurrConnections.end(), conn);
-            if (i != mCurrConnections.end())
-            {
-               mCurrConnections.erase(i);
-            }
+            mCurrConnections.erase(i);
          }
       }
 
@@ -857,7 +851,6 @@ U32 GuiShaderEditor::finishConnection(const Point2I& pt)
             NodeConnection* conn;
             if(hasConnection(inNode, conn))
             {
-               // selecting one node, push it to the front of the mcurrnodes stack so its rendered on top.
                Vector< NodeConnection* >::iterator i = T3D::find(mCurrConnections.begin(), mCurrConnections.end(), conn);
                if (i != mCurrConnections.end())
                {
@@ -886,7 +879,6 @@ U32 GuiShaderEditor::finishConnection(const Point2I& pt)
             NodeConnection* conn;
             if (hasConnection(mTempConnection->inSocket, conn))
             {
-               // selecting one node, push it to the front of the mcurrnodes stack so its rendered on top.
                Vector< NodeConnection* >::iterator i = T3D::find(mCurrConnections.begin(), mCurrConnections.end(), conn);
                if (i != mCurrConnections.end())
                {
@@ -916,6 +908,22 @@ bool GuiShaderEditor::hasConnection(NodeSocket* inSocket)
    return false;
 }
 
+bool GuiShaderEditor::hasConnection(NodeSocket* inSocket, Vector<NodeConnection*>& conn)
+{
+   bool ret = false;
+
+   for (NodeConnection* con : mCurrConnections)
+   {
+      if (con->inSocket == dynamic_cast<NodeInput*>(inSocket) || con->outSocket == dynamic_cast<NodeOutput*>(inSocket))
+      {
+         conn.push_back(con);
+         ret = true;
+      }
+   }
+
+   return ret;
+}
+
 bool GuiShaderEditor::hasConnection(NodeSocket* inSocket, NodeConnection*& conn)
 {
    for (NodeConnection* con : mCurrConnections)
@@ -924,11 +932,9 @@ bool GuiShaderEditor::hasConnection(NodeSocket* inSocket, NodeConnection*& conn)
       {
          if (conn != nullptr)
             conn = con;
-
          return true;
       }
    }
-
    return false;
 }
 

+ 1 - 0
Engine/source/gui/shaderEditor/guiShaderEditor.h

@@ -92,6 +92,7 @@ protected:
    bool findHitSocket(const Point2I& pt);
    U32 finishConnection(const Point2I& pt);
    bool hasConnection(NodeSocket* inSocket);
+   bool hasConnection(NodeSocket* inSocket, Vector<NodeConnection*>& conn);
    bool hasConnection(NodeSocket* inSocket, NodeConnection*& conn);
 
    void findNodesInRect(const RectI& rect, Vector<GuiShaderNode*>& outResult);

+ 7 - 3
Engine/source/gui/shaderEditor/nodes/materialOutputNode.cpp

@@ -22,15 +22,19 @@
 #include "platform/platform.h"
 #include "gui/shaderEditor/nodes/materialOutputNode.h"
 
-IMPLEMENT_CONOBJECT(MaterialOutputNode);
+//-----------------------------------------------------------------
+// BRDF Output Node.
+//-----------------------------------------------------------------
 
-ConsoleDocClass(MaterialOutputNode,
+IMPLEMENT_CONOBJECT(BRDFOutputNode);
+
+ConsoleDocClass(BRDFOutputNode,
    "@brief Deferred Material output.\n\n"
    "Editor use only.\n\n"
    "@internal"
 );
 
-MaterialOutputNode::MaterialOutputNode()
+BRDFOutputNode::BRDFOutputNode()
    : GuiShaderNode()
 {
    mNodeType = NodeTypes::Output;

+ 7 - 3
Engine/source/gui/shaderEditor/nodes/materialOutputNode.h

@@ -22,14 +22,18 @@
 
 #include "gui/shaderEditor/guiShaderNode.h"
 
-class MaterialOutputNode : public GuiShaderNode
+//-----------------------------------------------------------------
+// Put all material output nodes here.
+//-----------------------------------------------------------------
+
+class BRDFOutputNode : public GuiShaderNode
 {
    typedef GuiShaderNode Parent;
 public:
-   MaterialOutputNode();
+   BRDFOutputNode();
 
    // is the parent that all other nodes are derived from.
-   DECLARE_CONOBJECT(MaterialOutputNode);
+   DECLARE_CONOBJECT(BRDFOutputNode);
    DECLARE_CATEGORY("Shader Output");
    DECLARE_DESCRIPTION("Deferred Material output.");
 };

+ 50 - 0
Engine/source/gui/shaderEditor/nodes/mathNode.cpp

@@ -0,0 +1,50 @@
+//-----------------------------------------------------------------------------
+// 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/mathNode.h"
+
+//-----------------------------------------------------------------
+// Math addition Node.
+//-----------------------------------------------------------------
+
+IMPLEMENT_CONOBJECT(MathAddNode);
+
+ConsoleDocClass(MathAddNode,
+   "@brief Math addition node.\n\n"
+   "Editor use only.\n\n"
+   "@internal"
+);
+
+
+MathAddNode::MathAddNode()
+   : GuiShaderNode()
+{
+   mNodeType = NodeTypes::MathOperation;
+
+   mInputNodes.push_back(new NodeInput("A", DataDimensions::Dynamic));
+   mInputNodes.push_back(new NodeInput("B", DataDimensions::Dynamic));
+
+   mOutputNodes.push_back(new NodeOutput("Result", DataDimensions::Dynamic));
+
+   mTitle = "Math Node";
+}

+ 39 - 0
Engine/source/gui/shaderEditor/nodes/mathNode.h

@@ -0,0 +1,39 @@
+//-----------------------------------------------------------------------------
+// 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"
+
+//-----------------------------------------------------------------
+// Put all Math nodes here.
+//-----------------------------------------------------------------
+
+class MathAddNode : public GuiShaderNode
+{
+   typedef GuiShaderNode Parent;
+public:
+   MathAddNode();
+
+   // is the parent that all other nodes are derived from.
+   DECLARE_CONOBJECT(MathAddNode);
+   DECLARE_CATEGORY("Shader Math");
+   DECLARE_DESCRIPTION("Math addition node.");
+};

+ 3 - 2
Templates/BaseGame/game/core/rendering/shaders/fixedFunction/roundedRectangleP.hlsl

@@ -84,9 +84,10 @@ float4 main(Conn IN) : TORQUE_TARGET0
                 //     (p.x >= halfSize.x - radius + halfBorder && p.x <= halfSize.x + radius - halfBorder) ) {    // right border
                     
                 // }
-                toColor = IN.color;  
+                toColor = IN.color;
+                sdf = abs(sdf) / borderSize;
             } 
-            sdf = abs(sdf) / borderSize;
+            
         } 
         else{
             fromColor = IN.color;