QML: чтение буфера, с которым работает вычислительный шейдер

У меня есть вычислительный шейдер, работающий с моим буфером в моем приложении QML (5.8), проблема в том, что я не могу читать этот буфер, а только записывать в него.

Мой буфер Qt3DRender::QBufferЯ установил его содержимое с помощью

Qt3DRender::QBuffer::setData(QByteArray::fromRawData(reinterpret_cast<const char*>(points_.linearize()), static_cast<int>(sizeof(PointType) * pc)));

где pc это количество очков.

Чтобы использовать его, я создал QGeometry который устанавливает QAttributeи применить компьютерный шейдер как компонент материала к Entity

Мой материал:

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 иметь доступ для чтения / записи, и есть даже QOpenGLBuffer у него есть ENUM для установки доступа аналогичным образом, но я не могу использовать ни один из них; то есть Я не могу найти способ сопоставить свой буфер, и QOpenGLBuffer не кажется совместимым ни с одним из визуализаторов.

0

Решение

Я думаю, что решение заключается в использовании BufferCapture, функция добавлена ​​в 5.9 (альфа-версия которого была выпущена только в этом месяце.)

Я еще не смог попробовать это решение, и я обновлю этот ответ, когда я это сделаю.

Есть пример этого в qt5/qt3d/tests/manual/buffercapture-qml

Источник информации: Список рассылки Qt Interest

Для решения до 5.9 я переписал все, чтобы быть похожим на пример Squircle SceneGraph, где я использую «сырье«OpenGL призывает рисовать то, что мне нужно. Одним из огромных преимуществ этого является то, что, поскольку я могу добавить к QOpenGLBufferМне даже не нужно больше читать буфер.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector