Settings

Theme

Introducing: ShaderPad

rileyjshaw.com

144 points by evakhoury 16 days ago · 22 comments

Reader

spankalee 14 days ago

I like versions of this that are web components so that they're declarative and you can just drop them into HTML.

<shader-doodle> is one: https://github.com/halvves/shader-doodle but it hasn't been updated in a long time and I think builds to UMD

<shaderview> is a newer one with a nice site, but I haven't used it: https://keithclark.github.io/shaderview/

  • rileyjshaw 8 days ago

    I spent the weekend adding a new version with a web component export. Documentation is here[1]. A quick example:

      <shader-pad style="width: 320px; height: 480px">
        <img src="/trees.jpg" data-texture="u_trees" />
        <script type="x-shader/x-fragment">
          #version 300 es
          precision highp float;
          in vec2 v_uv;
          uniform float u_time;
          uniform sampler2D u_trees;
          out vec4 outColor;
          void main() {
            vec2 p = 2.0 * (v_uv - 0.5);
            float r = length(p);
            vec2 uv = 0.15 + v_uv * 0.7 + p * (0.1 + 0.025 * sin(u_time * 2.0)) * r;
            outColor = texture(u_trees, uv);
          }
        </script>
      </shader-pad>
    
    Let me know if you have any feedback, or if you make something cool with it!

    ---

    [1]: https://misery.co/shaderpad/docs/components/web-component/

  • rileyjshaw 14 days ago

    This is a great idea! ShaderPad should be able to wrap into a web component easily. I already export a React wrapper[1], so I can use a similar API for the web component.

    Give me a few days and check back in.

    [1]: https://misery.co/shaderpad/docs/guides/react/

coxmi 13 days ago

Nice project!

I’ve been doing something very similar recently[0] with slightly different goals (still a tiny bundle size, but fully typed uniforms, deeper control over buffer bytes and layout, and less setup than raw gl).

Some in the comments seem to think GL is dead, but for me I think it’s just an easier shader language for beginners and that’s most important for dabbling and many small web use cases.

[0] https://github.com/coxmi/gleasy

rgbrgb 14 days ago

looks great, congrats. quick note, the examples are really cool, but the link in your blogpost is broken.

working link: https://misery.co/shaderpad/docs/getting-started/examples/

  • rileyjshaw 14 days ago

    Great catch - thanks for taking the time to let me know! I just fixed the link.

  • fudged71 14 days ago

    Also one or more examples in this blog post would have been great to see

    • rileyjshaw 13 days ago

      Great point; I wasn’t sure if anyone would see this post so I spent most of my time on the docs. I just added a few visual examples to the post. Thanks!

denntenna 13 days ago

really appreciate this. As an occasional dabbler in shaders, I find setting up the boilerplate to get a shader working on web painful to setup every time I have to work on a project that requires. starring this on github for later.

avaer 14 days ago

GLSL. Makes sense as the breezy path, but it seems WebGL2 is a dead evolutionary branch, even if it can be transpiled over.

What are your thoughts on supporting other languages? Or did I miss that in the docs?

  • koolala 14 days ago

    It isn't a dead end when WebGPU failed at all their graphics performance promises for being better than it in every way.

    • socalgal2 14 days ago

      What part of WebGPU isn't meeting graphics performance? AFAICT it's only people who continue to treat it like WebGL. It's like C++ programmers complaining Rust is slow and then Rust programmers say "stop using it like C++". If you want perf in a low-level API liek WebGPU you have to work with it using patterns that fit. If you stick to your WebGL patterns then yea, your app will suck.

      • koolala 13 days ago

        A simple PBR shader on a mobile device. Anything that is basic graphics without crazy things like 10,000 lights.

    • avaer 14 days ago

      I was speaking more to the willingness of vendors to support. It's debatable how well WebGL(2)/WebGPU are designed and especially implemented. But it does seem like most evolutionary features, if they make it to browsers at all, would come from the WebGPU path. Not saying the reasons for that are good.

      • busterarm 14 days ago

        Underrated comment. Our industry is littered with business choices made over technical ones that crippled or otherwise enshittified products.

        • rexpop 13 days ago

          But the technical is entirely subservient to business concerns, or else what's the point?

          • busterarm 13 days ago

            Sometimes that's true, like at work.

            If you're talking about open source projects or decisions by some consortium, that's not always true...or at least one business is pushing their concerns at the expense of others.

            An easily remembered example is what happened (at least from Pieter Hintjens' perspective, as he wrote/complained at length about) between AMQP 0.9.1 and 1.0

rileyjshaw 14 days ago

Thanks for posting this! Really appreciate everyone’s comments.

mncharity 14 days ago

I revisit the site's open tab, and find a full screen, black background:

> It is 12:56am. Do you still want to be on the internet? Yes No

Lol. Nice touch.

> No -> "Okay", fade to black.

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection