Untitled diff

Created Diff never expires
20 刪除
總計
刪除
單詞
總計
刪除
要繼續使用此功能,請升級到
Diffchecker logo
Diffchecker Pro
88
20 新增
總計
新增
單詞
總計
新增
要繼續使用此功能,請升級到
Diffchecker logo
Diffchecker Pro
88
#version 450
#version 450


#define WIDTH 800
#define WIDTH 800
#define HEIGHT 600
#define HEIGHT 600
#define WORKGROUP_SIZE 32
#define WORKGROUP_SIZE 32


layout (local_size_x = WORKGROUP_SIZE, local_size_y = WORKGROUP_SIZE, local_size_z = 1) in;
layout (local_size_x = WORKGROUP_SIZE, local_size_y = WORKGROUP_SIZE, local_size_z = 1) in;


layout(binding = 0) readonly buffer buf1 {
layout(binding = 0) readonly buffer buf1 {
int data[WIDTH][HEIGHT];
int data[HEIGHT][WIDTH];
} previousBoard;
} previousBoard;


layout(binding = 1) buffer buf2 {
layout(binding = 1) buffer buf2 {
int data[WIDTH][HEIGHT];
int data[HEIGHT][WIDTH];
} nextBoard;
} nextBoard;


void main() {
void main() {


int x = int(gl_GlobalInvocationID.x);
int x = int(gl_GlobalInvocationID.x);
int y = int(gl_GlobalInvocationID.y);
int y = int(gl_GlobalInvocationID.y);


if(x >= WIDTH || y >= HEIGHT)
if(x >= WIDTH || y >= HEIGHT)
return;
return;
uint countNeighboors = 0;
uint countNeighboors = 0;
if (y > 0)
if (y > 0)
{
{
if (x > 0)
if (x > 0)
{
{
// x - 1 ; y - 1
// x - 1 ; y - 1
countNeighboors += previousBoard.data[x - 1][y - 1];
countNeighboors += previousBoard.data[y - 1][x - 1];
}
}
// x ; y - 1
// x ; y - 1
countNeighboors += previousBoard.data[x][y - 1];
countNeighboors += previousBoard.data[y - 1][x];
if(x < 799)
if(x < 799)
{
{
// x + 1 ; y - 1
// x + 1 ; y - 1
countNeighboors += previousBoard.data[x + 1][y - 1];
countNeighboors += previousBoard.data[y - 1][x + 1];
}
}
}
}
if (x > 0)
if (x > 0)
{
{
// x - 1 ; y
// x - 1 ; y
countNeighboors += previousBoard.data[x - 1][y];
countNeighboors += previousBoard.data[y][x - 1];
}
}
if(x < 799)
if(x < 799)
{
{
// x + 1 ; y
// x + 1 ; y
countNeighboors += previousBoard.data[x + 1][y];
countNeighboors += previousBoard.data[y][x + 1];
}
}
if (y < 599)
if (y < 599)
{
{
if (x > 0)
if (x > 0)
{
{
// x - 1 ; y + 1
// x - 1 ; y + 1
countNeighboors += previousBoard.data[x - 1][y + 1];
countNeighboors += previousBoard.data[y + 1][x - 1];
}
}
// x ; y + 1
// x ; y + 1
countNeighboors += previousBoard.data[x][y + 1];
countNeighboors += previousBoard.data[y + 1][x];
if(x < 799)
if(x < 799)
{
{
// x + 1 ; y + 1
// x + 1 ; y + 1
countNeighboors += previousBoard.data[x + 1][y + 1];
countNeighboors += previousBoard.data[y + 1][x + 1];
}
}
}
}
if(countNeighboors == 3)
if(countNeighboors == 3)
{
{
nextBoard.data[x][y] = 1;
nextBoard.data[y][x] = 1;
}
}
else if (countNeighboors == 2)
else if (countNeighboors == 2)
{
{
nextBoard.data[x][y] = previousBoard.data[x][y];
nextBoard.data[y][x] = previousBoard.data[y][x];
}
}
else
else
{
{
nextBoard.data[x][y] = 0;
nextBoard.data[y][x] = 0;
}
}
}
}