Add Double, Vector2/3/4 nodes to Visject graphs

This commit is contained in:
Wojtek Figat
2022-06-14 18:56:00 +02:00
parent 18cd7b657e
commit 3294624849
3 changed files with 139 additions and 68 deletions

View File

@@ -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>

View File

@@ -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;
}

View File

@@ -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;
}