using Godot; namespace Cirno.Scripts.Components.Actors._3D; [Tool] public partial class OutlineEffect : CompositorEffect { private RenderingDevice RenderingDevice => RenderingServer.GetRenderingDevice(); private Rid _shader; private Rid _pipeline; private Rid _parameterStorageBuffer; // tutorial: https://www.youtube.com/watch?v=PQHExF-sbB4 public OutlineEffect() { var shaderFile = GD.Load("res://Shaders/outline3D.glsl"); var shaderSpirv = shaderFile.GetSpirV(); _shader = RenderingDevice.ShaderCreateFromSpirV(shaderSpirv); _pipeline = RenderingDevice.ComputePipelineCreate(_shader); byte[] parameterData = [0, 0, 0, 0]; _parameterStorageBuffer = RenderingDevice.StorageBufferCreate((uint)parameterData.Length, parameterData); } public override void _RenderCallback(int effectCallbackType, RenderData renderData) { //base._RenderCallback(effectCallbackType, renderData); var renderSceneBuffers = renderData.GetRenderSceneBuffers(); if (renderSceneBuffers is null) { return; } //var size = renderSceneBuffers.get } }