我正在做一个简单的布料模拟基于一些现有的代码,并在OpenGL 4.3配置文件。我面临的问题是,我正在尝试合并一个简单的计算着色器,它接受一个缓冲区,并为其添加一些值。
一旦完成,我映射缓冲区,然后取消它的映射。在前3帧之后,glDispatchCompute锁定。但是,如果我注释掉map & unmap,它似乎运行得很好。我尝试获取错误代码,但每帧返回0。有什么想法可能会出问题吗??
glUseProgram(computeShader);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, cloth1.vertex_vbo_storage); // Buffer Binding 1
glBufferData(GL_SHADER_STORAGE_BUFFER, cloth1.particles.size() * sizeof(Particle), &(cloth1.particles[0]), GL_DYNAMIC_COPY);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, cloth1.vertex_vbo_storage);
glDispatchCompute(6, 6, 1);
glBindBuffer(GL_ARRAY_BUFFER, cloth1.vertex_vbo_storage);
Particle * ptr = reinterpret_cast<Particle *>(glMapBufferRange(GL_ARRAY_BUFFER, 0, cloth1.particles.size() * sizeof(Particle), GL_MAP_READ_BIT));
{
GLenum err = glGetError();
if (err > 0)
{
std::string name = std::string((char*)(glGetString(err)));
}
}
//// memcpy(&cloth1.particles[0], ptr, cloth1.particles.size()*sizeof(Particle));
glUnmapBuffer(GL_ARRAY_BUFFER);
glBindBuffer(GL_ARRAY_BUFFER, 0);发布于 2014-04-09 14:01:12
我想通了。我错过了调度表之间GL_SHADER_STORAGE_BUFFER的解绑。
glDispatchCompute(6, 6, 1);
**glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, 0);**
glBindBuffer(GL_ARRAY_BUFFER, cloth1.vertex_vbo_storage);https://stackoverflow.com/questions/22953951
复制相似问题