shader storage buffer to draw

来源:互联网 发布:linux书籍 编辑:程序博客网 时间:2024/06/06 16:33
GLuint shaderStorageBufferID;glGenBuffers(1, &shaderStorageBufferID);glBindBuffer(GL_SHADER_STORAGE_BUFFER, shaderStorageBufferID);glBufferData(GL_SHADER_STORAGE_BUFFER, numParticles*sizeof(Particle), NULL ,GL_STATIC_DRAW);struct Particle* particles = (struct Particle*) glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, numParticles*sizeof(Particle), GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);for(int i = 0; i < numParticles; ++i){    particles[i]._currPosition = glm::vec4(i, 0, 0.0, 1.0f);    particles[i]._prevPosition = glm::vec4(i, 0, 1.0, 1.0f);}
glUnmapBuffer(GL_SHADER_STORAGE_BUFFER);


struct Particle{    glm::vec4   _currPosition;    glm::vec4   _prevPosition;};glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, shaderStorageBufferID);_shaderManager->useProgram("computeProg");glDispatchCompute((_numParticles/WORK_GROUP_SIZE)+1, 1, 1);glMemoryBarrier(GL_SHADER_STORAGE_BARRIER_BIT);_shaderManager->useProgram("shaderProg");glBindBuffer(GL_ARRAY_BUFFER, shaderStorageBufferID);glVertexPointer(4, GL_FLOAT, sizeof(Particle), (GLvoid*)0);glEnableClientState(GL_VERTEX_ARRAY);glDrawArrays(GL_POINTS, 0, _numParticles);glDisableClientState(GL_VERTEX_ARRAY);


0 0
原创粉丝点击