forked from przemyslawzaworski/Unity3D-CG-programming
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrw_structured_buffer.cs
42 lines (37 loc) · 1.14 KB
/
rw_structured_buffer.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// https://github.com/przemyslawzaworski
// Set plane position (Y=0.0)
// Collider is generated from vertex shader, using RWStructuredBuffer to transfer data.
using UnityEngine;
public class rw_structured_buffer : MonoBehaviour
{
public Material material;
public GameObject plane;
ComputeBuffer compute_buffer;
Mesh mesh;
Vector3[] data;
void Start()
{
mesh = plane.GetComponent<Collider>().GetComponent<MeshFilter>().sharedMesh;
data = mesh.vertices;
compute_buffer = new ComputeBuffer(data.Length, sizeof(float)*3, ComputeBufferType.Default);
}
void Update()
{
Graphics.ClearRandomWriteTargets();
material.SetPass(0);
material.SetBuffer("data", compute_buffer);
Graphics.SetRandomWriteTarget(1, compute_buffer,false);
compute_buffer.GetData(data);
if (data!=null && plane.GetComponent<Renderer>().isVisible && Time.frameCount % 2 == 0)
{
mesh.vertices = data;
DestroyImmediate(plane.GetComponent<MeshCollider>());
MeshCollider mesh_collider = plane.AddComponent<MeshCollider>();
mesh_collider.sharedMesh = mesh;
}
}
void OnDestroy()
{
compute_buffer.Dispose();
}
}