using UnityEngine; using UnityEngine.Serialization; public class ComputeController : MonoBehaviour { [SerializeField] private ComputeShader _computeShader; [SerializeField] private Texture2D _inputTexture; [SerializeField] private RenderTexture _resultTexture; private int _kernelHandle; private static readonly int Result = Shader.PropertyToID("result"); private static readonly int SourceTexture = Shader.PropertyToID("source_texture"); private void Start() { _kernelHandle = _computeShader.FindKernel("cs_main"); _resultTexture = new(512, 512, 24); _resultTexture.name = "ResultTexture"; _resultTexture.enableRandomWrite = true; _resultTexture.Create(); _computeShader.SetTexture(_kernelHandle, Result, _resultTexture); _computeShader.SetTexture(_kernelHandle, SourceTexture, _inputTexture); _computeShader.Dispatch(_kernelHandle, _resultTexture.width / 8, _resultTexture.height / 8, 1); } private void OnGUI() { GUI.DrawTexture(new Rect(0, 0, _resultTexture.width, _resultTexture.height), _resultTexture); GUI.DrawTexture(new Rect(0, 0, _inputTexture.width, _inputTexture.height), _inputTexture); } }