Unsolved Reading a buffer operated on by a compute shader
-
I have a compute shader operating on my buffer in my QML (5.8) app, the problem is that I cannot seem to read this buffer, only write to it.
My buffer is a
Qt3DRender::QBuffer
, I set its contents withQt3DRender::QBuffer::setData(QByteArray::fromRawData(reinterpret_cast<const char*>(points_.linearize()), static_cast<int>(sizeof(PointType) * pc)));
where
pc
is the number of points.To use it, I created a
QGeometry
which sets upQAttribute
s, and apply the computer shader as a material component to theEntity
My material:
Material { property PointBuffer dataBuffer; ShaderProgram { id: computeShader computeShaderCode: loadSource("qrc:/shaders/pointcloud.comp") } effect: Effect { techniques: [ Technique { renderPasses: [ RenderPass { shaderProgram: computeShader parameters: [ // Point buffer Parameter { name: "Particles"; value: dataBuffer } ] } ] // renderpasses filterKeys: [ FilterKey { name: "type"; value: "compute" } ] graphicsApiFilter { api: GraphicsApiFilter.OpenGL profile: GraphicsApiFilter.CoreProfile majorVersion: 4 minorVersion: 3 } } // technique ] // techniques } }
In my buffer code though, whenever I read from the buffer (
Qt3DRender::buffer::data()
), I only get the data I wrote to it, not the result of the compute shader.I've tried setting the
usage
to various things, but no dice.In my OpenGL book, I see that one can
glMapBuffer
to have read/write access, and there's even aQOpenGLBuffer
that has an ENUM to set the access in a similar way, but I can't seem to make use of either of these; i.e. I can't find a way to map my buffer, and theQOpenGLBuffer
doesn't seem compatible with any of the renderers.