Ich habe einen Compute Shader auf meinem Puffer in meiner QML (5.8) -App, das Problem ist, dass ich nicht scheinen kann, diesen Puffer zu lesen, nur zu schreiben.QML: Lesen eines Puffers von einem Compute Shader
Mein Puffer ist ein Qt3DRender::QBuffer
, habe ich seinen Inhalt mit
Qt3DRender::QBuffer::setData(QByteArray::fromRawData(reinterpret_cast<const char*>(points_.linearize()), static_cast<int>(sizeof(PointType) * pc)));
wo pc
die Anzahl der Punkte ist.
es nutzen zu können, habe ich eine QGeometry
erstellt, die bis QAttribute
s setzt, und den Computer-Shader als Materialkomponente der Entity
Mein Material gelten:
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 meinem Puffer Code aber Immer, wenn ich aus dem Puffer lese (Qt3DRender::buffer::data()
), bekomme ich nur die Daten, die ich geschrieben habe, nicht das Ergebnis des Compute-Shaders.
Ich habe versucht, die usage
auf verschiedene Dinge, aber keine Würfel.
In meinem OpenGL-Buch sehe ich, dass man glMapBuffer
Lese-/Schreibzugriff haben kann, und es gibt sogar eine QOpenGLBuffer
, die ein ENUM hat, um den Zugang in ähnlicher Weise zu setzen, aber ich kann nicht scheinen zu verwenden eins von denen; , d. H. Ich kann keinen Weg finden, um meinen Puffer zuzuordnen, und die QOpenGLBuffer
scheint mit keinem der Renderer kompatibel zu sein.
Obwohl ich nicht in der Lage war, diese Arbeit zu bekommen, erhielt ich eine [Antwort auf der Qt Interesse Mailingliste] (http://lists.qt-project.org/pipermail/interest/2017-March/026278.html), die in Qt 5.9 angeben, wird es eine 'BufferCapture'-Komponente geben, die in der Lage ist, einen OpenGL-Puffer einzulesen. Ich habe jedoch einen anderen Weg gefunden, um einen direkten Zugriff auf meinen OpenGL-Puffer zu bekommen (mit einem Szenen-Diagramm ähnlich dem Squickle-Beispiel) – Matt