Skip to content

Instantly share code, notes, and snippets.

@patriciogonzalezvivo
Created February 17, 2026 18:03
Show Gist options
  • Select an option

  • Save patriciogonzalezvivo/6e4ebb12c358e815058a1be9fac3b92b to your computer and use it in GitHub Desktop.

Select an option

Save patriciogonzalezvivo/6e4ebb12c358e815058a1be9fac3b92b to your computer and use it in GitHub Desktop.
Shapes
{
"frag": "#ifdef GL_ES\nprecision mediump float;\n#endif\n\nuniform vec2 u_resolution;\nuniform vec2 u_mouse;\nuniform float u_time;\n\n// By default all 2D shapes and space functions asume\n// the center is at vec2(0.5, 0.5), this can be overloaded\n// by defining CENTER_2D to be something else, like vec2(0.0)\n// before the functions are include\n\n// #define CENTER_2D vec2(0.0)\n\n#include \"lygia/draw/fill.glsl\"\n#include \"lygia/space/aspect.glsl\"\n#include \"lygia/space/ratio.glsl\"\n#include \"lygia/space/center.glsl\"\n#include \"lygia/space/uncenter.glsl\"\n#include \"lygia/space/rotate.glsl\"\n\n#include \"lygia/sdf/circleSDF.glsl\"\n#include \"lygia/sdf/crossSDF.glsl\"\n#include \"lygia/sdf/flowerSDF.glsl\"\n#include \"lygia/sdf/gearSDF.glsl\"\n#include \"lygia/sdf/heartSDF.glsl\"\n#include \"lygia/sdf/hexSDF.glsl\"\n#include \"lygia/sdf/polySDF.glsl\"\n#include \"lygia/sdf/rectSDF.glsl\"\n#include \"lygia/sdf/raysSDF.glsl\"\n#include \"lygia/sdf/spiralSDF.glsl\"\n#include \"lygia/sdf/starSDF.glsl\"\n#include \"lygia/sdf/triSDF.glsl\"\n#include \"lygia/sdf/vesicaSDF.glsl\"\n#include \"lygia/sdf/rhombSDF.glsl\"\n\nvoid main(void) {\n vec4 color = vec4(vec3(0.0), 1.0);\n vec2 pixel = 1.0/u_resolution.xy;\n vec2 st = gl_FragCoord.xy * pixel;\n\n // Option 1\n st = ratio(st, u_resolution.xy);\n\n // // Option 2 \n // st = center(st);\n // st = aspect(st, u_resolution.xy);\n // st = uncenter(st);\n\n float cols = 4.0; \n st *= cols;\n vec2 st_i = floor(st);\n vec2 st_f = fract(st);\n // st_f = center(st_f);\n\n st_f = rotate(st_f, u_time * 0.4);\n\n float sdf = 0.0;\n float index = ( st_i.x + (cols-st_i.y - 1.0) * cols);\n \n if (index == 0.0)\n sdf = circleSDF( st_f );\n else if (index == 1.0)\n sdf = vesicaSDF( st_f, 0.25 );\n else if (index == 2.0)\n sdf = rhombSDF(st_f);\n else if (index == 3.0)\n sdf = triSDF( st_f );\n else if (index == 4.0)\n sdf = rectSDF( st_f, vec2(1.0) );\n else if (index == 5.0)\n sdf = polySDF( st_f, 5);\n else if (index == 6.0)\n sdf = hexSDF( st_f );\n else if (index == 7.0)\n sdf = starSDF(st_f, 5);\n else if (index == 8.0)\n sdf = flowerSDF(st_f, 5);\n else if (index == 9.0)\n sdf = crossSDF(st_f, 1.0);\n else if (index == 10.0)\n sdf = gearSDF(st_f, 10.0, 10);\n else if (index == 11.0)\n sdf = heartSDF(st_f);\n else if (index == 12.0)\n sdf = raysSDF(st_f, 14);\n else if (index == 13.0)\n sdf = spiralSDF(st_f, 0.1);\n else\n sdf = 1.0;\n\n color.rgb += fill(sdf, 0.5);\n \n gl_FragColor = color;\n}\n",
"vert": "#ifdef GL_ES\nprecision mediump float;\n#endif\n\nattribute vec4 a_position;\nvarying vec4 v_position;\n\nvoid main() {\n v_position = a_position;\n gl_Position = a_position;\n}\n",
"commands": [
"plot,off",
"textures,off",
"buffers,off",
"cubemap,off",
"camera_position,-0,-0,-2",
"camera_look_at,0,0,0",
"camera,default"
],
"assets": {},
"history": [
{
"gistId": "7b244166722b458e4aad093c171e483e",
"owner": {
"login": "patriciogonzalezvivo",
"id": 346914,
"avatar_url": "https://avatars.githubusercontent.com/u/346914?v=4"
},
"loadedAt": "2026-02-17T18:03:42.134Z"
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment