내 QML (5.8) 응용 프로그램에서 내 버퍼에서 연산 쉐이더가 작동 중입니다. 문제는이 버퍼를 읽을 수없는 것입니다. 쓰기 만합니다.QML : 컴퓨팅 쉐이더에서 작동하는 버퍼 읽기
내 버퍼 나는
pc
포인트의 수는
Qt3DRender::QBuffer::setData(QByteArray::fromRawData(reinterpret_cast<const char*>(points_.linearize()), static_cast<int>(sizeof(PointType) * pc)));
과 내용을 설정하는 Qt3DRender::QBuffer
입니다.
는 Entity
내 물질 재료 구성 요소로 I가 QAttribute
의를 설정하는 QGeometry
를 생성, 사용, 컴퓨터 쉐이더를 적용하려면 : 내 버퍼 코드에서
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
}
}
을하지만, 버퍼 (Qt3DRender::buffer::data()
)에서 읽을 때마다 계산 쉐이더의 결과가 아닌 쓴 데이터 만 가져옵니다.
usage
을 여러 가지로 설정하려고했지만 주사위가 없습니다.
내 OpenGL 서적에서 읽기/쓰기 권한이있는 glMapBuffer
을 볼 수 있으며 유사한 방법으로 액세스를 설정하는 ENUM이있는 QOpenGLBuffer
도 있지만 사용하지 못하는 것 같습니다. 이 중 하나; 즉 내 버퍼를 매핑하는 방법을 찾을 수 없으며 QOpenGLBuffer
은 렌더러와 호환되지 않는 것으로 보입니다.
이 작업을 수행하지 못했지만 [Qt Interest 메일 링리스트에서 답변] (http://lists.qt-project.org/pipermail/interest/2017-March/026278.html)을 받았습니다. Qt 5.9에서는 OpenGL 버퍼에서 읽을 수있는'BufferCapture' 컴포넌트가있을 것입니다. 그러나 나는 (Squickle 예제와 비슷한 장면 그래프를 사용하여) 다른 방법으로 OpenGL 버퍼에 직접 액세스 할 수 있음을 발견했다. – Matt