Invocações de Shader do OpenGL Compute

Eu tenho uma pergunta relacionada aos novos shaders de computação. Atualmente estou trabalhando em um sistema de partículas. Eu armazeno todas as minhas partículas no buffer de armazenamento de sombreador para acessá-los no shader de computação. Então eu envio um grupo de trabalho unidimensional.

#define WORK_GROUP_SIZE 128
_shaderManager->useProgram("computeProg");
glDispatchCompute((_numParticles/WORK_GROUP_SIZE), 1, 1);
glMemoryBarrier(GL_SHADER_STORAGE_BARRIER_BIT);

Meu shader de computação:

#version 430
struct particle{
         vec4 currentPos;
         vec4 oldPos;
};

layout(std430, binding=0) buffer particles{
         struct particle p[];
};

layout (local_size_x = 128, local_size_y = 1, local_size_z = 1) in;
void main(){
         uint gid = gl_GlobalInvocationID.x;

         p[gid].currentPos.x += 100;
}

Mas de alguma forma nem todas as partículas são afetadas. Eu estou fazendo da mesma forma que foi feito neste exemplo, mas não funciona.http://education.siggraph.org/media/conference/S2012_Materials/ComputeShader_6pp.pdf

Editar:

Depois que eu chamei o glMemoryBarrier (GL_SHADER_STORAGE_BARRIER_BIT) eu continuo assim:

_shaderManager->useProgram("shaderProg"); 
glBindBuffer(GL_ARRAY_BUFFER, shaderStorageBufferID); 
glVertexPointer(4,GL_FLOAT,sizeof(glm::vec4), (void*)0);
glEnableClientState(GL_VERTEX_ARRAY); 
glDrawArrays(GL_POINTS, 0, _numParticles); 
glDisableClientState(GL_VERTEX_ARRAY);

Então, qual bit seria apropriado para usar neste caso?

questionAnswers(2)

yourAnswerToTheQuestion