Заключване на шейдъра на OpenGL Compute след glMapBuffer

Правя проста симулация на плат, базирана на някакъв съществуващ код и работя върху OpenGL 4.3 профил. Проблемът, пред който съм изправен, е, че се опитвам да включа прост изчислителен шейдър, който приема буфер и просто добавя някаква стойност към него.

След като приключи, картографирам буфера и след това го декартирам. След първите 3 кадъра glDispatchCompute се заключва. Въпреки това, ако коментирам картата и декартирам, изглежда, че работи добре. Опитах се да получа кодове за грешка, но той връща 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);

person ssarangi    schedule 09.04.2014    source източник


Отговори (1)


Разбрах го. Липсваше ми развързване на GL_SHADER_STORAGE_BUFFER между изпращането.

    glDispatchCompute(6, 6, 1);

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

    glBindBuffer(GL_ARRAY_BUFFER, cloth1.vertex_vbo_storage);
person ssarangi    schedule 09.04.2014