关于Unity ComputeShader AppendStructuredBuffer的使用
Shader部分
struct TestStruct
{
float mat;
int rel;
};
#pragma kernel GpuAppendStructuredBuffer
AppendStructuredBuffer<TestStruct> appendData;
[numthreads(1, 1, 1)]
void GpuAppendStructuredBuffer(uint3 id : SV_DispatchThreadID)
{
TestStructvp;
vp.mat = 5;
vp.rel = id.x;
appendData.Append(vp);
}
Unity部分
//定义与shader对应的结构体
public struct TestStruct
{
public float mat;
public byte rel;
}
void AppendStructuredBuffer()
{
var buffer = new ComputeBuffer(64, 8, ComputeBufferType.Append);
int k = shader.FindKernel("GpuAppendStructuredBuffer");
buffer.SetCounterValue(0);//计数器值为0
shader.SetBuffer(k, "appendData", buffer);//绑定
shader.Dispatch(k, 9, 1, 1);//执行
//--获取ComputeShader内AppendStructuredBuffer对象大小---
uint[] countData = new uint[1] { 0 };
var countBuffer = new ComputeBuffer(1, sizeof(uint), ComputeBufferType.IndirectArguments);
ComputeBuffer.CopyCount(buffer, countBuffer, 0);
countBuffer.GetData(countData);//输出大小
TestStruct[] outputData = new TestStruct[countData[0]];
buffer.GetData(outputData);//输出内容
}