This commit is contained in:
Stedd 2023-10-08 02:28:17 +02:00
parent 3378a181a8
commit 92a46ea5e0
2 changed files with 19 additions and 40 deletions

View File

@ -1,6 +1,4 @@
using UnityEngine; using UnityEngine;
using UnityEngine.Serialization;
using UnityEngine.UIElements;
public class ComputeController : MonoBehaviour public class ComputeController : MonoBehaviour
{ {
@ -9,14 +7,10 @@ public class ComputeController : MonoBehaviour
[SerializeField] private Texture2D _inputTexture; [SerializeField] private Texture2D _inputTexture;
[SerializeField] private RenderTexture _resultTexture; [SerializeField] private RenderTexture _resultTexture;
[Header("Config")] [Header("State")]
[SerializeField] private int _width; [SerializeField] private int _width;
[SerializeField] private int _height; [SerializeField] private int _height;
[SerializeField] private float _scale = 1; [SerializeField] private float _sin;
[SerializeField] private bool _resize;
[Header("state")]
[SerializeField] private float sin;
private int _kernelHandle; private int _kernelHandle;
private const int NumThreadX = 8; private const int NumThreadX = 8;
@ -32,36 +26,37 @@ public class ComputeController : MonoBehaviour
private void Start() private void Start()
{ {
SetWidthHeight(); InitializeTextures();
InitializeShader();
_kernelHandle = _computeShader.FindKernel("cs_main");
RunComputeShader(); RunComputeShader();
} }
private void RunComputeShader() private void InitializeTextures()
{ {
_width = Mathf.RoundToInt(_inputTexture.width);
_height = Mathf.RoundToInt(_inputTexture.height);
_resultTexture = new(_width, _height, 24); _resultTexture = new(_width, _height, 24);
_resultTexture.name = "ResultTexture"; _resultTexture.name = "ResultTexture";
_resultTexture.enableRandomWrite = true; _resultTexture.enableRandomWrite = true;
_resultTexture.Create(); _resultTexture.Create();
_computeShader.SetTexture(_kernelHandle, SourceTexture, _inputTexture);
_computeShader.SetTexture(_kernelHandle, Result, _resultTexture);
DispatchShader();
} }
private void DispatchShader() private void InitializeShader()
{
_kernelHandle = _computeShader.FindKernel("cs_main");
_computeShader.SetTexture(_kernelHandle, SourceTexture, _inputTexture);
_computeShader.SetTexture(_kernelHandle, Result, _resultTexture);
}
private void RunComputeShader()
{ {
_computeShader.Dispatch(_kernelHandle, _width / NumThreadX, _height / NumThreadY, 1); _computeShader.Dispatch(_kernelHandle, _width / NumThreadX, _height / NumThreadY, 1);
} }
private void OnGUI() private void OnGUI()
{ {
CheckScale();
ShaderUpdate(); ShaderUpdate();
GUI.DrawTexture(new Rect(0, 0, _width, _height), _inputTexture); GUI.DrawTexture(new Rect(0, 0, _width, _height), _inputTexture);
@ -70,24 +65,8 @@ public class ComputeController : MonoBehaviour
private void ShaderUpdate() private void ShaderUpdate()
{ {
sin = (Mathf.Sin(Time.unscaledTime) + 1) / 2; _sin = (Mathf.Sin(Time.unscaledTime) + 1) / 2;
_computeShader.SetFloat(SinScaled, sin); _computeShader.SetFloat(SinScaled, _sin);
DispatchShader(); RunComputeShader();
}
private void CheckScale()
{
if (_resize)
{
_resize = false;
SetWidthHeight();
RunComputeShader();
}
}
private void SetWidthHeight()
{
_width = Mathf.RoundToInt(_inputTexture.width * _scale);
_height = Mathf.RoundToInt(_inputTexture.height * _scale);
} }
} }

View File

@ -9,6 +9,6 @@ float sin_scaled;
void cs_main(uint3 id : SV_DispatchThreadID) void cs_main(uint3 id : SV_DispatchThreadID)
{ {
float4 color = source_texture[id.xy]; float4 color = source_texture[id.xy];
color.rgb = color.rgb * sin_scaled * 2; color.rgb = color.rgb * sin_scaled;
result[id.xy] = color; result[id.xy] = color;
} }