0 I have a particle system which I want to make as really fast as possible without any effects on the main display function, I basically placed all particles calculations on a separate infinite thread which I keep synchronized with WaitForEvent() (Windows), DataLock flags, etc. I use glColorPointer, glNormalPointer, glVertexPointer etc to point to the buffered data on the GPU (glGenBuffers, glBufferData) and then glDrawElements to render them. At the moment I don't have the code so I hope that won't be a problem but I'll try my best to get the infrastructure described: Main [Init] Create a pre-calc queue 30% in size of N particles and do sequential calculations (Thread 1 #2) Thread 1 Wait for Calculate Event signal or if pre-calc queue is not full then continue Loop through N particles and update position / velocity, storing it in pUpdate If pre-calc queue is not full, add pUpdate to it Main [Render] glActiveTexture(TEXTURE0) glCol/glNorm/glTex/glVertexPointer...