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());