Прежде всего подумайте о том, чтобы выполнить симуляцию на GPU, используя пинг-понг между двумя текстурами OpenGL.Если не какие-то сложные оптимизации - Conway's Life - довольно простая задача для GPU.Для этого потребуются 2 объекта кадрового буфера и некоторое понимание шейдеров.
Edit-1: Пример фрагментного шейдера (скомпилированный с мозгом)
#version 130
uniform sampler2D input;
out float life;
void main() {
ivec2 tc = ivec2(gl_FragCoord);
float orig = texelFetch(input,tc,0);
float sum = orig+
texelFetchOffset(input,tc,0,ivec2(-1,0))+
texelFetchOffset(input,tc,0,ivec2(+1,0))+
texelFetchOffset(input,tc,0,ivec2(0,-1))+
texelFetchOffset(input,tc,0,ivec2(0,+1))+
texelFetchOffset(input,tc,0,ivec2(-1,-1))+
texelFetchOffset(input,tc,0,ivec2(-1,+1))+
texelFetchOffset(input,tc,0,ivec2(+1,-1))+
texelFetchOffset(input,tc,0,ivec2(+1,+1));
if(sum<1.9f)
life = 0.0f;
else if(sum<2.1f)
life = orig;
else life = 1.0f;
}
Вершинный шейдер - это простой проход:1006 *
#version 130
in vec2 vertex;
void main() {
gl_Position = vec4(vertex,0.0,1.0);
}