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

44 lines
1.4 KiB
C#

namespace Lib.render._dx11.api;
[Guid("84e02044-3011-4a5e-b76a-c904d9b4557f")]
internal sealed class UavFromTexture2d : Instance<UavFromTexture2d>
{
[Output(Guid = "{83D2DCFD-3850-45D8-BB1B-93FE9C9F4334}")]
public readonly Slot<UnorderedAccessView> UnorderedAccessView = new();
public UavFromTexture2d()
{
UnorderedAccessView.UpdateAction += Update;
}
private void Update(EvaluationContext context)
{
if (!Texture.DirtyFlag.IsDirty)
return; // nothing to do
var texture = Texture.GetValue(context);
if (texture == null || texture.IsDisposed)
return;
try
{
if (texture.Description.BindFlags.HasFlag(BindFlags.UnorderedAccess))
{
UnorderedAccessView.Value?.Dispose();
UnorderedAccessView.Value = new UnorderedAccessView(ResourceManager.Device, texture); // todo: create via resource manager
}
else
{
Log.Warning("Trying to create an unordered access view for resource which doesn't have the uav bind flag set", this);
}
}
catch (Exception e)
{
Log.Error("UavFromTexture2d exception: " + e.Message, this);
UnorderedAccessView.Value = null;
}
}
[Input(Guid = "{4A4F6830-1809-42C9-91EB-D4DBD0290043}")]
public readonly InputSlot<Texture2D> Texture = new();
}