using Godot; using Godot.Collections; using System.Collections.Generic; namespace Rokojori { [Tool] [GlobalClass] public partial class DepthViewEffect:SingleShaderCompositorEffect { public static readonly string shaderPath = RokojoriPlugin.Path( "Runtime/Rendering/CompositorEffects/DepthView/DepthViewShader.glsl" ); RDPushConstants constants = new RDPushConstants(); RDSampler sampler; [Export( PropertyHint.Range, "0,1") ] public float greyAmount; [Export( PropertyHint.Range, "0,1") ] public float depthAmount; [Export( PropertyHint.Range, "0.001,3") ] public float depthPower; protected override void OnConfigure() { EffectCallbackType = EffectCallbackTypeEnum.PostTransparent; _shaderPath = shaderPath; _groupSize = 8; } protected override void OnInitialize() { base.OnInitialize(); sampler = Sampler( RenderingDevice.SamplerFilter.Nearest, RenderingDevice.SamplerRepeatMode.ClampToEdge ); } protected override void SetConstants() { constants.Set( (Vector2)context.internalSize, new Vector2( greyAmount, depthAmount ), depthPower ); } protected override void RenderView() { context.Assign_ScreenColorTexture(); context.Assign_ScreenDepthTexture( sampler ); context.pushConstants = constants; context.Render(); } } }