我正在尋找使用QOpenGLFunctions_4_3_Core
OpenGL函數從Qt調用計算着色器的幫助。計算着色器不寫入緩衝區
具體而言,我對glDispatchCompute(1024, 1, 1);
的調用似乎對綁定到它的緩衝區沒有任何影響。 如何將緩衝區綁定到QT中的計算着色器,以便可以將着色器的結果讀回到C++?
我創建了一個程序,用(Squircle.cpp)將其綁定:
computeProgram_ = new QOpenGLShaderProgram();
computeProgram_->addShaderFromSourceFile(QOpenGLShader::Compute, "../app/shaders/pointcloud.comp");
computeProgram_->bindAttributeLocation("Particles", 0);
m_ParticlesLoc = 0;
computeProgram_->link();
,然後綁定我QOpenGLBuffer
用(Squircle.cpp):
// Setup our vertex buffer object.
pointOpenGLBuffer_.create();
pointOpenGLBuffer_.bind();
pointOpenGLBuffer_.allocate(pointBuffer_.data(), pointBuffer_.vertexCount() * pointBuffer_.stride_);
然後我調用與計算着色器(Squircle.cpp) :
computeProgram_->bind();
// ...
pointOpenGLBuffer_.bind();
glDispatchCompute(1024, 1, 1);
但是當我讀了我的緩衝區,無論是read()
還是map()
',值都不會改變,它們就是我最初插入的內容。
從計算着色器的角度來看,我接受我的(pointcloud.comp)輸入:
#version 430
layout(local_size_x = 1024) in;
struct ParticleData
{
vec4 position;
};
// Particles from previous frame
layout (std430, binding = 0) coherent buffer Particles
{
ParticleData particles[];
} data;
我這不是我的結合緩衝正常可能?還是有另一個OpenGL命令調用來實際調度計算?我嘗試了不同的用法等。
我已經發布了所有相關的代碼here。
它的工作!我昨天晚上也讀過了這個功能,但由於某種原因沒有嘗試。我也認爲我的注意力被我正在使用的'Format'所捕獲(我指定'Core4.3',但當前緩衝區使用'Compatibility4.5')但是,謝謝!我自己辛苦工作的16個小時錯過了這個解決方案。 :) – Matt