Files
2026-07-13 13:13:17 +08:00

55 lines
1.6 KiB
C#

using T3.Core.Rendering;
// SharpDX.Direct3D11.Buffer;
//using Utilities = T3.Core.Utils.Utilities;
namespace Lib.numbers.@int.process;
[Guid("2eb20a76-f8f7-49e9-93a5-1e5981122b50")]
internal sealed class IntsToBuffer : Instance<IntsToBuffer>
{
[Output(Guid = "f5531ffb-dbde-45d3-af2a-bd90bcbf3710")]
public readonly Slot<Buffer> Result = new();
public IntsToBuffer()
{
Result.UpdateAction += Update;
}
private void Update(EvaluationContext context)
{
var intParams = Params.GetCollectedTypedInputs();
var intParamCount = intParams.Count;
var arraySize = (intParamCount / 4 + (intParamCount % 4 == 0 ? 0 : 1)) * 4; // always 16byte slices for alignment
var array = new int[arraySize];
if (array.Length == 0)
{
Params.DirtyFlag.Clear();
return;
}
for (var intIndex = 0; intIndex < intParamCount; intIndex++)
{
array[intIndex] = intParams[intIndex].GetValue(context);
}
Params.DirtyFlag.Clear();
var device = ResourceManager.Device;
var size = sizeof(int) * array.Length;
if (ResourceUtils.GetDynamicConstantBuffer(device, ref Result.Value, size))
{
Result.Value.DebugName = nameof(IntsToBuffer); // no need to copy string every frame if constant
}
ResourceUtils.WriteDynamicBufferData<int>(device.ImmediateContext, Result.Value, array.AsSpan());
}
[Input(Guid = "49556D12-4CD1-4341-B9D8-C356668D296C")]
public readonly MultiInputSlot<int> Params = new();
}