ComputeShader/Assets/Scripts/ComputeController.cs

34 lines
1.2 KiB
C#

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);
}
}