首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >glMapBuffer后OpenGL计算着色器锁定

glMapBuffer后OpenGL计算着色器锁定
EN

Stack Overflow用户
提问于 2014-04-09 13:54:13
回答 1查看 217关注 0票数 0

我正在做一个简单的布料模拟基于一些现有的代码,并在OpenGL 4.3配置文件。我面临的问题是,我正在尝试合并一个简单的计算着色器,它接受一个缓冲区,并为其添加一些值。

一旦完成,我映射缓冲区,然后取消它的映射。在前3帧之后,glDispatchCompute锁定。但是,如果我注释掉map & unmap,它似乎运行得很好。我尝试获取错误代码,但每帧返回0。有什么想法可能会出问题吗??

代码语言:javascript
复制
    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);
EN

回答 1

Stack Overflow用户

发布于 2014-04-09 14:01:12

我想通了。我错过了调度表之间GL_SHADER_STORAGE_BUFFER的解绑。

代码语言:javascript
复制
    glDispatchCompute(6, 6, 1);

    **glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, 0);**

    glBindBuffer(GL_ARRAY_BUFFER, cloth1.vertex_vbo_storage);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22953951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档