rj-action-library/Runtime/Rendering/Compositor/CompositorEffects/AlphaGrabTest/AlphaGrabTestEffect.cs

68 lines
1.6 KiB
C#
Raw Normal View History

2025-04-25 08:13:22 +00:00
using Godot;
using Godot.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Rokojori
{
[Tool]
[GlobalClass]
public partial class AlphaGrabTestEffect:SingleShaderCompositorEffect
{
2025-04-26 20:04:11 +00:00
public static readonly string shaderPath = Path( "AlphaGrabTest/AlphaGrabTestShader.glsl" );
2025-04-25 08:13:22 +00:00
protected override void OnConfigure()
{
EffectCallbackType = EffectCallbackTypeEnum.PostTransparent;
_shaderPath = shaderPath;
_groupSize = 32;
}
RDTexture _bufferTexture;
RDTexture _copyTexture;
bool _grabFlag;
byte[] _data;
bool _ready = false;
bool _canDraw = true;
2025-04-26 20:04:11 +00:00
2025-04-25 08:13:22 +00:00
public async Task<Texture2D> GetImageTexture( System.Func<Task> waiter )
{
var fmt = _bufferTexture.format;
var imgF = Image.Format.Rgbah;
2025-04-26 20:04:11 +00:00
var data = context.renderingDevice.TextureGetData( _bufferTexture.rid, 0 );
2025-04-25 08:13:22 +00:00
var image = Image.CreateFromData( (int) fmt.Width, (int)fmt.Height, false, imgF, data );
return ImageTexture.CreateFromImage( image );
}
protected override void SetConstants()
{
// constants.Set(
// center,
// radius,
// intensity,
// samples,
// Vector2.Zero
// );
}
protected override void RenderView()
{
2025-04-26 20:04:11 +00:00
_bufferTexture = RDTexture.EnsureScreenSizeTexture( _bufferTexture, context );
_copyTexture = RDTexture.EnsureScreenSizeTexture( _copyTexture, context );
2025-04-25 08:13:22 +00:00
context.AssignScreenColorTexture();
context.AssignTexture( _bufferTexture );
// context.pushConstants = constants;
2025-04-26 20:04:11 +00:00
context.ProcessComputeProgram();
2025-04-25 08:13:22 +00:00
}
}
}