OpenGL Compute Shader-Aufrufe

Ich habe eine Frage zu den neuen Compute-Shadern. Ich arbeite gerade an einem Partikelsystem. Ich speichere alle meine Partikel im Shader-Speicherpuffer, um im Compute-Shader darauf zuzugreifen. Dann schicke ich eine eindimensionale Arbeitsgruppe.

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

Mein Compute-Shader:

#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;
}

Aber irgendwie sind nicht alle Partikel betroffen. Ich mache es genauso wie in diesem Beispiel, aber es funktioniert nicht.http://education.siggraph.org/media/conference/S2012_Materials/ComputeShader_6pp.pdf

Bearbeiten:

Nachdem ich glMemoryBarrier (GL_SHADER_STORAGE_BARRIER_BIT) aufgerufen habe, gehe ich folgendermaßen vor:

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

Welches Bit wäre also in diesem Fall angemessen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage