Add Double, Vector2/3/4 nodes to Visject graphs
This commit is contained in:
@@ -1,3 +1,9 @@
|
||||
#if USE_LARGE_WORLDS
|
||||
using Real = System.Double;
|
||||
#else
|
||||
using Real = System.Single;
|
||||
#endif
|
||||
|
||||
// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved.
|
||||
|
||||
using System;
|
||||
@@ -683,6 +689,89 @@ namespace FlaxEditor.Surface.Archetypes
|
||||
DefaultValues = new object[] { typeof(int).FullName, typeof(string).FullName },
|
||||
Elements = new[] { NodeElementArchetype.Factory.Output(0, string.Empty, null, 0) }
|
||||
},
|
||||
new NodeArchetype
|
||||
{
|
||||
TypeID = 15,
|
||||
Title = "Double",
|
||||
Description = "Constant floating point",
|
||||
Flags = NodeFlags.AllGraphs,
|
||||
Size = new Float2(110, 20),
|
||||
DefaultValues = new object[]
|
||||
{
|
||||
0.0d
|
||||
},
|
||||
Elements = new[]
|
||||
{
|
||||
NodeElementArchetype.Factory.Output(0, "Value", typeof(double), 0),
|
||||
NodeElementArchetype.Factory.Float(0, 0, 0)
|
||||
},
|
||||
},
|
||||
new NodeArchetype
|
||||
{
|
||||
TypeID = 16,
|
||||
Title = "Vector2",
|
||||
Description = "Constant Vector2",
|
||||
Flags = NodeFlags.AllGraphs,
|
||||
Size = new Float2(130, 60),
|
||||
DefaultValues = new object[]
|
||||
{
|
||||
Vector2.Zero
|
||||
},
|
||||
Elements = new[]
|
||||
{
|
||||
NodeElementArchetype.Factory.Output(0, "Value", typeof(Vector2), 0),
|
||||
NodeElementArchetype.Factory.Output(1, "X", typeof(Real), 1),
|
||||
NodeElementArchetype.Factory.Output(2, "Y", typeof(Real), 2),
|
||||
NodeElementArchetype.Factory.Vector_X(0, 1 * Surface.Constants.LayoutOffsetY, 0),
|
||||
NodeElementArchetype.Factory.Vector_Y(0, 2 * Surface.Constants.LayoutOffsetY, 0)
|
||||
}
|
||||
},
|
||||
new NodeArchetype
|
||||
{
|
||||
TypeID = 17,
|
||||
Title = "Vector3",
|
||||
Description = "Constant Vector3",
|
||||
Flags = NodeFlags.AllGraphs,
|
||||
Size = new Float2(130, 80),
|
||||
DefaultValues = new object[]
|
||||
{
|
||||
Vector3.Zero
|
||||
},
|
||||
Elements = new[]
|
||||
{
|
||||
NodeElementArchetype.Factory.Output(0, "Value", typeof(Vector3), 0),
|
||||
NodeElementArchetype.Factory.Output(1, "X", typeof(Real), 1),
|
||||
NodeElementArchetype.Factory.Output(2, "Y", typeof(Real), 2),
|
||||
NodeElementArchetype.Factory.Output(3, "Z", typeof(Real), 3),
|
||||
NodeElementArchetype.Factory.Vector_X(0, 1 * Surface.Constants.LayoutOffsetY, 0),
|
||||
NodeElementArchetype.Factory.Vector_Y(0, 2 * Surface.Constants.LayoutOffsetY, 0),
|
||||
NodeElementArchetype.Factory.Vector_Z(0, 3 * Surface.Constants.LayoutOffsetY, 0)
|
||||
}
|
||||
},
|
||||
new NodeArchetype
|
||||
{
|
||||
TypeID = 18,
|
||||
Title = "Vector4",
|
||||
Description = "Constant Vector4",
|
||||
Flags = NodeFlags.AllGraphs,
|
||||
Size = new Float2(130, 100),
|
||||
DefaultValues = new object[]
|
||||
{
|
||||
Vector4.Zero
|
||||
},
|
||||
Elements = new[]
|
||||
{
|
||||
NodeElementArchetype.Factory.Output(0, "Value", typeof(Vector4), 0),
|
||||
NodeElementArchetype.Factory.Output(1, "X", typeof(Real), 1),
|
||||
NodeElementArchetype.Factory.Output(2, "Y", typeof(Real), 2),
|
||||
NodeElementArchetype.Factory.Output(3, "Z", typeof(Real), 3),
|
||||
NodeElementArchetype.Factory.Output(4, "W", typeof(Real), 4),
|
||||
NodeElementArchetype.Factory.Vector_X(0, 1 * Surface.Constants.LayoutOffsetY, 0),
|
||||
NodeElementArchetype.Factory.Vector_Y(0, 2 * Surface.Constants.LayoutOffsetY, 0),
|
||||
NodeElementArchetype.Factory.Vector_Z(0, 3 * Surface.Constants.LayoutOffsetY, 0),
|
||||
NodeElementArchetype.Factory.Vector_W(0, 4 * Surface.Constants.LayoutOffsetY, 0)
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -69,60 +69,26 @@ void ShaderGenerator::ProcessGroupConstants(Box* box, Node* node, Value& value)
|
||||
case 2:
|
||||
case 3:
|
||||
case 12:
|
||||
case 15:
|
||||
value = Value(node->Values[0]);
|
||||
break;
|
||||
// Float2/3/4, Color
|
||||
case 4:
|
||||
{
|
||||
const Variant& cv = node->Values[0];
|
||||
if (box->ID == 0)
|
||||
value = Value(cv);
|
||||
else if (box->ID == 1)
|
||||
value = Value(cv.AsFloat2().X);
|
||||
else if (box->ID == 2)
|
||||
value = Value(cv.AsFloat2().Y);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
const Variant& cv = node->Values[0];
|
||||
if (box->ID == 0)
|
||||
value = Value(cv);
|
||||
else if (box->ID == 1)
|
||||
value = Value(cv.AsFloat3().X);
|
||||
else if (box->ID == 2)
|
||||
value = Value(cv.AsFloat3().Y);
|
||||
else if (box->ID == 3)
|
||||
value = Value(cv.AsFloat3().Z);
|
||||
break;
|
||||
}
|
||||
case 6:
|
||||
{
|
||||
const Variant& cv = node->Values[0];
|
||||
if (box->ID == 0)
|
||||
value = Value(cv);
|
||||
else if (box->ID == 1)
|
||||
value = Value(cv.AsFloat4().X);
|
||||
else if (box->ID == 2)
|
||||
value = Value(cv.AsFloat4().Y);
|
||||
else if (box->ID == 3)
|
||||
value = Value(cv.AsFloat4().Z);
|
||||
else if (box->ID == 4)
|
||||
value = Value(cv.AsFloat4().W);
|
||||
break;
|
||||
}
|
||||
case 7:
|
||||
{
|
||||
const Variant& cv = node->Values[0];
|
||||
const Float4 cv = (Float4)node->Values[0];
|
||||
if (box->ID == 0)
|
||||
value = Value(cv);
|
||||
else if (box->ID == 1)
|
||||
value = Value(cv.AsColor().R);
|
||||
value = Value(cv.X);
|
||||
else if (box->ID == 2)
|
||||
value = Value(cv.AsColor().G);
|
||||
value = Value(cv.Y);
|
||||
else if (box->ID == 3)
|
||||
value = Value(cv.AsColor().B);
|
||||
value = Value(cv.Z);
|
||||
else if (box->ID == 4)
|
||||
value = Value(cv.AsColor().A);
|
||||
value = Value(cv.W);
|
||||
break;
|
||||
}
|
||||
case 8:
|
||||
@@ -136,6 +102,24 @@ void ShaderGenerator::ProcessGroupConstants(Box* box, Node* node, Value& value)
|
||||
value = Value(PI);
|
||||
break;
|
||||
}
|
||||
// Vector2/3/4
|
||||
case 16:
|
||||
case 17:
|
||||
case 18:
|
||||
{
|
||||
const Vector4 cv = (Vector4)node->Values[0];
|
||||
if (box->ID == 0)
|
||||
value = Value(cv);
|
||||
else if (box->ID == 1)
|
||||
value = Value(cv.X);
|
||||
else if (box->ID == 2)
|
||||
value = Value(cv.Y);
|
||||
else if (box->ID == 3)
|
||||
value = Value(cv.Z);
|
||||
else if (box->ID == 4)
|
||||
value = Value(cv.W);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -56,46 +56,26 @@ void VisjectExecutor::ProcessGroupConstants(Box* box, Node* node, Value& value)
|
||||
case 2:
|
||||
case 3:
|
||||
case 12:
|
||||
case 15:
|
||||
value = node->Values[0];
|
||||
break;
|
||||
// Float2/3/4, Color
|
||||
case 4:
|
||||
{
|
||||
const Value& cv = node->Values[0];
|
||||
if (box->ID == 0)
|
||||
value = cv;
|
||||
else if (box->ID == 1)
|
||||
value = cv.AsFloat2().X;
|
||||
else if (box->ID == 2)
|
||||
value = cv.AsFloat2().Y;
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
const Value& cv = node->Values[0];
|
||||
if (box->ID == 0)
|
||||
value = cv;
|
||||
else if (box->ID == 1)
|
||||
value = cv.AsFloat3().X;
|
||||
else if (box->ID == 2)
|
||||
value = cv.AsFloat3().Y;
|
||||
else if (box->ID == 3)
|
||||
value = cv.AsFloat3().Z;
|
||||
break;
|
||||
}
|
||||
case 6:
|
||||
case 7:
|
||||
{
|
||||
const Value& cv = node->Values[0];
|
||||
const Float4 cv = (Float4)node->Values[0];
|
||||
if (box->ID == 0)
|
||||
value = cv;
|
||||
else if (box->ID == 1)
|
||||
value = cv.AsFloat4().X;
|
||||
value = cv.X;
|
||||
else if (box->ID == 2)
|
||||
value = cv.AsFloat4().Y;
|
||||
value = cv.Y;
|
||||
else if (box->ID == 3)
|
||||
value = cv.AsFloat4().Z;
|
||||
value = cv.Z;
|
||||
else if (box->ID == 4)
|
||||
value = cv.AsFloat4().W;
|
||||
value = cv.W;
|
||||
break;
|
||||
}
|
||||
case 8:
|
||||
@@ -145,6 +125,24 @@ void VisjectExecutor::ProcessGroupConstants(Box* box, Node* node, Value& value)
|
||||
value.Type.SetTypeName(typeName);
|
||||
break;
|
||||
}
|
||||
// Vector2/3/4
|
||||
case 16:
|
||||
case 17:
|
||||
case 18:
|
||||
{
|
||||
const Vector4 cv = (Vector4)node->Values[0];
|
||||
if (box->ID == 0)
|
||||
value = cv;
|
||||
else if (box->ID == 1)
|
||||
value = cv.X;
|
||||
else if (box->ID == 2)
|
||||
value = cv.Y;
|
||||
else if (box->ID == 3)
|
||||
value = cv.Z;
|
||||
else if (box->ID == 4)
|
||||
value = cv.W;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user