C++ 计算着色器未写入缓冲区

C++ 计算着色器未写入缓冲区,c++,opengl,compute-shader,C++,Opengl,Compute Shader,我正在寻找使用QOpenGLFunctions\u4\u3\ucoreOpenGL函数从Qt调用计算着色器的帮助 具体地说,我对glDispatchCompute(1024,1,1)的调用似乎对绑定到它的缓冲区没有任何影响如何将缓冲区绑定到QT中的计算着色器,以便着色器的结果可以读回C++ 我创建我的程序并用()绑定它: 然后用()绑定我的QOpenGLBuffer: 然后使用()调用计算着色器: 但是当我用read()或map()读取缓冲区时,这些值从未改变,它们只是我最初插入的值 从计算着色

我正在寻找使用
QOpenGLFunctions\u4\u3\ucore
OpenGL函数从Qt调用计算着色器的帮助

具体地说,我对
glDispatchCompute(1024,1,1)的调用
似乎对绑定到它的缓冲区没有任何影响如何将缓冲区绑定到QT中的计算着色器,以便着色器的结果可以读回C++

我创建我的程序并用()绑定它:

然后用()绑定我的
QOpenGLBuffer

然后使用()调用计算着色器:

但是当我用
read()
map()
读取缓冲区时,这些值从未改变,它们只是我最初插入的值

从计算着色器的角度来看,我使用()接受输入:

我是否没有正确绑定缓冲区?或者是否有另一个OpenGL命令来调用以实际调度计算?我试过不同的用法等等


我已经发布了所有相关的代码。

看来问题在于对缓冲区绑定的理解错误

pointOpenGLBuffer_.bind(); 
仅将缓冲区绑定到OGL上下文,而不绑定到着色器缓冲区,调用它两次不会起作用

第二次而不是仅仅绑定你需要打电话

glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, pointOpenGLBuffer_.bufferId());

当0来自您的布局时(std430,binding=0)

问题似乎在于错误的缓冲区绑定理解

pointOpenGLBuffer_.bind(); 
仅将缓冲区绑定到OGL上下文,而不绑定到着色器缓冲区,调用它两次不会起作用

第二次而不是仅仅绑定你需要打电话

glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, pointOpenGLBuffer_.bufferId());

其中0来自您的布局(std430,binding=0)

成功了!我昨天晚上也读了那个函数,但出于某种原因没有尝试。我还认为我的注意力集中在我使用的
格式上(我指定
Core4.3
,但是当前的缓冲区使用
兼容性4.5
),但是是的,谢谢~我自己16个小时的辛劳没有解决这个问题成功了!我昨天晚上也读了那个函数,但出于某种原因没有尝试。我还认为我的注意力集中在我使用的
格式上(我指定
Core4.3
,但是当前的缓冲区使用
兼容性4.5
),但是是的,谢谢~我自己16个小时的辛劳没有解决这个问题
pointOpenGLBuffer_.bind(); 
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, pointOpenGLBuffer_.bufferId());