Forgot to turn off the FPS limiting, wow this thing is speedy
This commit is contained in:
@@ -12,7 +12,7 @@ int pixel_to_index(int2 dimensions, int2 pixel) {
|
|||||||
|
|
||||||
__kernel void conways (
|
__kernel void conways (
|
||||||
global int2* image_res,
|
global int2* image_res,
|
||||||
__write_only image2d_t image,
|
__read_write image2d_t image,
|
||||||
global char* first_node_buffer,
|
global char* first_node_buffer,
|
||||||
global char* second_node_buffer,
|
global char* second_node_buffer,
|
||||||
global char* buffer_flip
|
global char* buffer_flip
|
||||||
@@ -29,8 +29,9 @@ __kernel void conways (
|
|||||||
//if (pixel.x > 1800)
|
//if (pixel.x > 1800)
|
||||||
// printf("%i, %i", pixel.x, pixel.y);
|
// printf("%i, %i", pixel.x, pixel.y);
|
||||||
|
|
||||||
float4 dead = (float4)(.49, .68, .81, 1);
|
float4 dead = (float4)(.51, .49, .39, .9);
|
||||||
float4 alive = (float4)(.49, .68, .71, .3);
|
float4 alive = (float4)(.21, .43, .46, .6);
|
||||||
|
float4 flavor = (float4)(.21, .76, .83, .8);
|
||||||
|
|
||||||
// add all 8 blocks to neghbors
|
// add all 8 blocks to neghbors
|
||||||
int neighbors = 0;
|
int neighbors = 0;
|
||||||
@@ -80,11 +81,12 @@ __kernel void conways (
|
|||||||
|
|
||||||
int base = pixel_to_index(*image_res, pixel);
|
int base = pixel_to_index(*image_res, pixel);
|
||||||
if (neighbors == 3 || (neighbors == 2 && first_node_buffer[base])){
|
if (neighbors == 3 || (neighbors == 2 && first_node_buffer[base])){
|
||||||
write_imagef(image, pixel, alive);
|
write_imagef(image, pixel, alive);
|
||||||
second_node_buffer[base] = 1;
|
second_node_buffer[base] = 1;
|
||||||
} else {
|
} else {
|
||||||
write_imagef(image, pixel, dead);
|
|
||||||
second_node_buffer[base] = 0;
|
write_imagef(image, pixel, mix(read_imagef(image, pixel), dead, 0.01f));
|
||||||
|
second_node_buffer[base] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@@ -131,11 +133,11 @@ __kernel void conways (
|
|||||||
|
|
||||||
int base = pixel_to_index(*image_res, pixel);
|
int base = pixel_to_index(*image_res, pixel);
|
||||||
if (neighbors == 3 || (neighbors == 2 && second_node_buffer[base])){
|
if (neighbors == 3 || (neighbors == 2 && second_node_buffer[base])){
|
||||||
write_imagef(image, pixel, alive);
|
write_imagef(image, pixel, alive);
|
||||||
first_node_buffer[base] = 1;
|
first_node_buffer[base] = 1;
|
||||||
} else {
|
} else {
|
||||||
write_imagef(image, pixel, dead);
|
write_imagef(image, pixel, mix(read_imagef(image, pixel), flavor, 0.001f));
|
||||||
first_node_buffer[base] = 0;
|
first_node_buffer[base] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
10
src/main.cpp
10
src/main.cpp
@@ -27,7 +27,10 @@ const int WINDOW_Y = 1080;
|
|||||||
void generate_nodes(sf::Uint8* nodes) {
|
void generate_nodes(sf::Uint8* nodes) {
|
||||||
|
|
||||||
for (int i = 0; i < WINDOW_X * WINDOW_Y; i += 1) {
|
for (int i = 0; i < WINDOW_X * WINDOW_Y; i += 1) {
|
||||||
if (rand() % 10 > 8)
|
|
||||||
|
sf::Vector2i pos(i % WINDOW_X, i / WINDOW_X);
|
||||||
|
|
||||||
|
if ((pos.x % 5 == 0) || (pos.y % 8 == 0))
|
||||||
nodes[i] = 1;
|
nodes[i] = 1;
|
||||||
else
|
else
|
||||||
nodes[i] = 0;
|
nodes[i] = 0;
|
||||||
@@ -38,7 +41,7 @@ void generate_nodes(sf::Uint8* nodes) {
|
|||||||
int main() {
|
int main() {
|
||||||
|
|
||||||
sf::RenderWindow window(sf::VideoMode(WINDOW_X, WINDOW_Y), "conways-game-of-life-opencl");
|
sf::RenderWindow window(sf::VideoMode(WINDOW_X, WINDOW_Y), "conways-game-of-life-opencl");
|
||||||
window.setFramerateLimit(60);
|
window.setFramerateLimit(300);
|
||||||
|
|
||||||
float physic_step = 0.166f;
|
float physic_step = 0.166f;
|
||||||
float physic_time = 0.0f;
|
float physic_time = 0.0f;
|
||||||
@@ -54,7 +57,7 @@ int main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sf::Vector2i image_resolution(WINDOW_X, WINDOW_Y);
|
sf::Vector2i image_resolution(WINDOW_X, WINDOW_Y);
|
||||||
cl.create_image_buffer("viewport_image", image_resolution, sf::Vector2f(0, 0), CL_MEM_WRITE_ONLY);
|
cl.create_image_buffer("viewport_image", image_resolution, sf::Vector2f(0, 0), CL_MEM_READ_WRITE);
|
||||||
cl.create_buffer("image_res", sizeof(sf::Vector2i), &image_resolution);
|
cl.create_buffer("image_res", sizeof(sf::Vector2i), &image_resolution);
|
||||||
|
|
||||||
sf::Uint8* nodes = new sf::Uint8[WINDOW_X * WINDOW_Y];
|
sf::Uint8* nodes = new sf::Uint8[WINDOW_X * WINDOW_Y];
|
||||||
@@ -116,7 +119,6 @@ int main() {
|
|||||||
window.clear(sf::Color::White);
|
window.clear(sf::Color::White);
|
||||||
|
|
||||||
cl.run_kernel("conways", image_resolution);
|
cl.run_kernel("conways", image_resolution);
|
||||||
//cl.run_kernel("conways", sf::Vector2i(5, 5));
|
|
||||||
cl.draw(&window);
|
cl.draw(&window);
|
||||||
|
|
||||||
if (buffer_flip == 1)
|
if (buffer_flip == 1)
|
||||||
|
|||||||
Reference in New Issue
Block a user