diff options
| author | Ray <[email protected]> | 2021-10-31 12:28:04 +0100 |
|---|---|---|
| committer | Ray <[email protected]> | 2021-10-31 12:28:04 +0100 |
| commit | 1fac09d0f4d409d33c0fe529b46bc8132b18ccd9 (patch) | |
| tree | 9d71b687118b39c0880e0772da50ef22c4582360 /examples/shaders/resources | |
| parent | f090f5444c274ce81bd2abcc51d18e516e352081 (diff) | |
| download | raylib-1fac09d0f4d409d33c0fe529b46bc8132b18ccd9.tar.gz raylib-1fac09d0f4d409d33c0fe529b46bc8132b18ccd9.zip | |
REVIEWED: example: Compute shader Game-of-life
Diffstat (limited to 'examples/shaders/resources')
3 files changed, 0 insertions, 152 deletions
diff --git a/examples/shaders/resources/shaders/glsl430/gol.glsl b/examples/shaders/resources/shaders/glsl430/gol.glsl deleted file mode 100644 index 47b1a55f..00000000 --- a/examples/shaders/resources/shaders/glsl430/gol.glsl +++ /dev/null @@ -1,64 +0,0 @@ -// Game of Life logic shader
-#version 430
-
-#define GOL_WIDTH 768
-
-layout (local_size_x = 16, local_size_y = 16, local_size_z = 1) in;
-
-layout(std430, binding = 1) readonly restrict buffer golLayout {
- uint golBuffer[]; // golBuffer[x, y] = golBuffer[x + gl_NumWorkGroups.x * y]
-};
-
-layout(std430, binding = 2) writeonly restrict buffer golLayout2 {
- uint golBufferDest[]; // golBufferDest[x, y] = golBufferDest[x + gl_NumWorkGroups.x * y]
-};
-
-#define fetchGol(x, y) ((((x) < 0) || ((y) < 0) || ((x) > GOL_WIDTH) || ((y) > GOL_WIDTH)) \
- ? (0) \
- : golBuffer[(x) + GOL_WIDTH * (y)])
-
-#define setGol(x, y, value) golBufferDest[(x) + GOL_WIDTH * (y)] = value
-
-void main()
-{
- uint neighbour_count = 0;
- uint x = gl_GlobalInvocationID.x;
- uint y = gl_GlobalInvocationID.y;
-
- // Top left
- neighbour_count += fetchGol(x - 1, y - 1);
-
- // Top middle
- neighbour_count += fetchGol(x, y - 1);
-
- // Top right
- neighbour_count += fetchGol(x + 1, y - 1);
-
- // Left
- neighbour_count += fetchGol(x - 1, y);
-
- // Right
- neighbour_count += fetchGol(x + 1, y);
-
- // Bottom left
- neighbour_count += fetchGol(x - 1, y + 1);
-
- // Bottom middle
- neighbour_count += fetchGol(x, y + 1);
-
- // Bottom right
- neighbour_count += fetchGol(x + 1, y + 1);
-
- if (neighbour_count == 3)
- {
- setGol(x, y, 1);
- }
- else if (neighbour_count == 2)
- {
- setGol(x, y, fetchGol(x, y));
- }
- else
- {
- setGol(x, y, 0);
- }
-}
diff --git a/examples/shaders/resources/shaders/glsl430/gol_render.glsl b/examples/shaders/resources/shaders/glsl430/gol_render.glsl deleted file mode 100644 index bbc16eed..00000000 --- a/examples/shaders/resources/shaders/glsl430/gol_render.glsl +++ /dev/null @@ -1,34 +0,0 @@ -// Game of Life rendering shader
-// Just renders the content of the ssbo at binding 1 to screen.
-#version 430
-
-#define GOL_WIDTH 768
-
-// Input vertex attributes (from vertex shader)
-in vec2 fragTexCoord;
-
-// Output fragment color
-out vec4 finalColor;
-
-// Input game of life grid.
-layout(std430, binding = 1) readonly buffer golLayout
-{
- uint golBuffer[];
-};
-
-// Output resolution
-uniform vec2 res;
-
-void main()
-{
- ivec2 coords = ivec2(fragTexCoord * res);
-
- if (golBuffer[coords.x + coords.y * uvec2(res).x] == 1)
- {
- finalColor = vec4(1.0);
- }
- else
- {
- finalColor = vec4(0.0, 0.0, 0.0, 1.0);
- }
-}
diff --git a/examples/shaders/resources/shaders/glsl430/gol_transfert.glsl b/examples/shaders/resources/shaders/glsl430/gol_transfert.glsl deleted file mode 100644 index 40d54458..00000000 --- a/examples/shaders/resources/shaders/glsl430/gol_transfert.glsl +++ /dev/null @@ -1,54 +0,0 @@ -// Game of life transfert shader.
-#version 430
-#define GOL_WIDTH 768
-
-// Structure definitions
-struct GolUpdateCmd {
- uint x; // x coordinate of the gol command
- uint y; // y coordinate of the gol command
- uint w; // width of the filled zone
- uint enabled; // whether to enable or disable zone
-};
-
-// Local compute unit size.
-layout (local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
-
-// Output game of life grid buffer.
-layout(std430, binding = 1) buffer golBufferLayout
-{
- uint golBuffer[]; // golBuffer[x, y] = golBuffer[x + GOL_WIDTH * y]
-};
-
-// Command buffer
-layout(std430, binding = 3) readonly restrict buffer golUpdateLayout
-{
- uint count;
- GolUpdateCmd commands[];
-};
-
-#define isInside(x, y) (((x) >= 0) && ((y) >= 0) && ((x) < GOL_WIDTH) && ((y) < GOL_WIDTH))
-#define getBufferIndex(x, y) ((x) + GOL_WIDTH * (y))
-
-void main()
-{
- uint cmd_index = gl_GlobalInvocationID.x;
- GolUpdateCmd cmd = commands[cmd_index];
-
- for (uint x = cmd.x; x < (cmd.x + cmd.w); x++)
- {
- for (uint y = cmd.y; y < (cmd.y + cmd.w); y++)
- {
- if (isInside(x, y))
- {
- if (cmd.enabled != 0)
- {
- atomicOr(golBuffer[getBufferIndex(x, y)], 1);
- }
- else
- {
- atomicAnd(golBuffer[getBufferIndex(x, y)], 0);
- }
- }
- }
- }
-}
|
