26 lines
920 B
Common Lisp
26 lines
920 B
Common Lisp
#define read_cell(delta) read_imageui(front, periodic, (gidf + delta) * inv_image_size + d_2).x
|
|
|
|
__kernel void conway(
|
|
__read_only image2d_t front,
|
|
__write_only image2d_t back,
|
|
float2 inv_image_size
|
|
)
|
|
{
|
|
const sampler_t periodic = CLK_NORMALIZED_COORDS_TRUE | CLK_FILTER_NEAREST | CLK_ADDRESS_REPEAT;
|
|
|
|
int2 gid = (int2)(get_global_id(0), get_global_id(1));
|
|
float2 gidf = (float2)(gid.x, gid.y);
|
|
float2 d_2 = inv_image_size * 0.5f;
|
|
|
|
uchar self = read_cell((float2)(0, 0));
|
|
uchar count =
|
|
read_cell((float2)(-1,+1)) + read_cell((float2)(0,+1)) + read_cell((float2)(+1,+1)) +
|
|
read_cell((float2)(-1, 0)) + + read_cell((float2)(+1, 0)) +
|
|
read_cell((float2)(-1,-1)) + read_cell((float2)(0,-1)) + read_cell((float2)(+1,-1));
|
|
|
|
write_imageui(back, gid, self ?
|
|
(count < 2 || count > 3 ? 0 : 1) :
|
|
(count == 3 ? 1 : 0)
|
|
);
|
|
}
|