Currently there seems to be no readback function for reading GraphicsBuffer back.
I've tried mapping the buffer but this leads
using Prowl.Runtime;
using Prowl.Runtime.Rendering;
using System;
using Veldrid;
public class NewScript : MonoBehaviour
{
public AssetRef<ComputeShader> shader;
GraphicsBuffer buffer;
public override void Start()
{
Debug.Log("Start");
}
public override void Update()
{
Debug.Log("Update");
ComputeDescriptor descriptor = new ComputeDescriptor(shader);
descriptor.SetInt("numElements", 128);
descriptor.SetBuffer("buffer", buffer);
ComputeDispatcher.Dispatch(descriptor, 0, 128, 1, 1);
Span<float> data = new float[128];
var mappedResource = Graphics.Device.Map(buffer.Buffer, Veldrid.MapMode.ReadWrite);
if ((data.Length * sizeof(float)) < mappedResource.SizeInBytes)
throw new ArgumentException("Insufficient space to store the requested pixel data", nameof(data));
unsafe
{
fixed (void* ptr = data)
{
Buffer.MemoryCopy((void*)mappedResource.Data, ptr, data.Length * sizeof(float), mappedResource.SizeInBytes);
}
}
Debug.Log(data[0]);
Debug.Log(data[1]);
Graphics.Device.Unmap(buffer.Buffer);
}
public override void OnEnable()
{
buffer = new GraphicsBuffer(1024 * 1024, sizeof(float), true);
}
public override void OnDisable()
{
buffer.Dispose();
}
}
#pragma kernel main
RWStructuredBuffer<float> buffer;
int numElements;
[numthreads(1, 1, 1)]
void main( uint3 id : SV_DispatchThreadID )
{
if(id.x >= numElements) return;
buffer[id.x] = (float)id.x;
}
Currently there seems to be no readback function for reading GraphicsBuffer back.
I've tried mapping the buffer but this leads
Is there some other way to do that?
CS Code:
Compute: