diff --git a/Engine/source/gfx/gfxDrawUtil.cpp b/Engine/source/gfx/gfxDrawUtil.cpp index 36b921f8a..49de99d5e 100644 --- a/Engine/source/gfx/gfxDrawUtil.cpp +++ b/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 diff --git a/Engine/source/gui/shaderEditor/guiShaderEditor.cpp b/Engine/source/gui/shaderEditor/guiShaderEditor.cpp index 54aa11847..f5ff22af7 100644 --- a/Engine/source/gui/shaderEditor/guiShaderEditor.cpp +++ b/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 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& conn) +{ + bool ret = false; + + for (NodeConnection* con : mCurrConnections) + { + if (con->inSocket == dynamic_cast(inSocket) || con->outSocket == dynamic_cast(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; } diff --git a/Engine/source/gui/shaderEditor/guiShaderEditor.h b/Engine/source/gui/shaderEditor/guiShaderEditor.h index 4cb7fd5fd..a853951a4 100644 --- a/Engine/source/gui/shaderEditor/guiShaderEditor.h +++ b/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& conn); bool hasConnection(NodeSocket* inSocket, NodeConnection*& conn); void findNodesInRect(const RectI& rect, Vector& outResult); diff --git a/Engine/source/gui/shaderEditor/nodes/materialOutputNode.cpp b/Engine/source/gui/shaderEditor/nodes/materialOutputNode.cpp index c53fc0925..a0b4d10c2 100644 --- a/Engine/source/gui/shaderEditor/nodes/materialOutputNode.cpp +++ b/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; diff --git a/Engine/source/gui/shaderEditor/nodes/materialOutputNode.h b/Engine/source/gui/shaderEditor/nodes/materialOutputNode.h index a3b496c0a..023fb869e 100644 --- a/Engine/source/gui/shaderEditor/nodes/materialOutputNode.h +++ b/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."); }; diff --git a/Engine/source/gui/shaderEditor/nodes/mathNode.cpp b/Engine/source/gui/shaderEditor/nodes/mathNode.cpp new file mode 100644 index 000000000..ebcf13284 --- /dev/null +++ b/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"; +} diff --git a/Engine/source/gui/shaderEditor/nodes/mathNode.h b/Engine/source/gui/shaderEditor/nodes/mathNode.h new file mode 100644 index 000000000..92a177aba --- /dev/null +++ b/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."); +}; diff --git a/Templates/BaseGame/game/core/rendering/shaders/fixedFunction/roundedRectangleP.hlsl b/Templates/BaseGame/game/core/rendering/shaders/fixedFunction/roundedRectangleP.hlsl index dea3e6bee..9dbffc4f4 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/fixedFunction/roundedRectangleP.hlsl +++ b/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;