Julien Sulpis's Avatar

Julien Sulpis

@jsulpis.dev

๐Ÿ’ป Front-end engineer & speaker ๐Ÿ’ก I explore ways to make the web more fun and performant for everyone. #WebGL #WebGPU #JS #CSS www.jsulpis.dev

321
Followers
105
Following
90
Posts
10.12.2023
Joined
Posts Following

Latest posts by Julien Sulpis @jsulpis.dev

Affiche DevFest Lyon 2รจme รฉdition : Vendredi 4 dรฉcembre โ€“ Palais de la Bourseโ€, sur fond de lโ€™intรฉrieur du Palais de la Bourse.

Affiche DevFest Lyon 2รจme รฉdition : Vendredi 4 dรฉcembre โ€“ Palais de la Bourseโ€, sur fond de lโ€™intรฉrieur du Palais de la Bourse.

Cโ€™est officiel : le DevFest Lyon revient ๐Ÿš€

๐Ÿ“… 4 dรฉcembre 2026 au Palais de la Bourse, lieu emblรฉmatique du patrimoine lyonnais โœจ

400 participantยทeยทs, des talks tech, des retours dโ€™expรฉrience et des รฉchanges de qualitรฉ ๐Ÿค

Dossier de sponsoring bientรดt disponible โณ
Rรฉservez la date ๐ŸŒŸ

#DevFestLyon

27.02.2026 07:30 ๐Ÿ‘ 16 ๐Ÿ” 11 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0
Preview
Julien Sulpis Front-End Engineer

jsulpis.dev is not empty anymore !

For now there is mostly my talks library (in French) and a few side projects. I will probably add a blog in there some day.

Of course I am always open to feedbacks

26.11.2025 20:10 ๐Ÿ‘ 4 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

Also Iโ€™m not sure how/if the webGPU-related code would be tree-shaked in a webGL setup and vice-versa.

But all that is interesting, I will think about it !

3/3

25.10.2025 20:08 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

Currently the API is designed as a light layer on top of webgl, which makes it difficult to reuse with webGPU.

The idea of sharing functions for both apis is interesting but Iโ€™m not sure how to handle their differences.
I would like to keep it low-level, the focus is on writing shaders

2/3

25.10.2025 20:08 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

Indeed, but their arguments are more low-level and close to the webgl api (at least currently), and:

- in webGPU we can write fragment and vertex shaders in one string
- many things become a kind of ยซย bufferย ยป
- compute shaders, pipelines, bind groups etc donโ€™t exist in webgl

1/3

25.10.2025 20:08 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

Good point, writing similar functions in webGPU has crossed my mind.

But since they are low level and the webGPU API is quite different, I donโ€™t think the same functions will work for both. So either it will be another lib, or I use 2 prefixes (glCanvas / gpuCanvas), which seems consistent

25.10.2025 19:22 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 2 ๐Ÿ“Œ 0

Most functions create and/or initialize something so it would rather be createXXX, but I donโ€™t really like that ๐Ÿค”

25.10.2025 16:56 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

Ok I understand, in my case I think it would be something like ยซย createRenderPass(โ€ฆ)ย ยป, but it seems a bit verbose to me.

I also thought about a ยซย glย ยป prefix, like glRenderPass(). Itโ€™s shorter and allow to separate WebGL related stuff from JS utils. I think I like this one.

What do you think ?

25.10.2025 16:29 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 1

Also, I don't know what other names to use:

I can't remove the "use" because the functions would have the name of the object they return. e.g, "const compositor = compositor(...)" is not possible.

And I don't want to prefix "createXXX" on all functions.

So yeah, I would appreciate some feedback!

25.10.2025 13:52 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 2 ๐Ÿ“Œ 0

I like the hook-style naming with "use" because the functions actually behave like hooks (output destructuring, re-render when updated etc), but I wonder if they could be confused with "real" hooks or composables in a react or vue codebase.

I'm not sure if it would be a big issue though.

25.10.2025 13:52 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 2 ๐Ÿ“Œ 0
code snippet with a sample of the functions starting with "use"

code snippet with a sample of the functions starting with "use"

๐Ÿ“ฃ call for feedback!

I'm having second thoughts about the naming of the functions in my #webGL library.

TL;DR: is it ok to have functions starting with "use" in a vanilla JS library ?

explanation in thread ๐Ÿงต

25.10.2025 13:52 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0
code snippet for the animation above

code snippet for the animation above

It's as easy as declaring the effects in an array

23.10.2025 19:44 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0
Video thumbnail

Bloom + trails effects on my boids demo โœจ

#webGL #shader

23.10.2025 19:44 ๐Ÿ‘ 5 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0
Video thumbnail

OK I've finally made some progress, my trails effect works on a transparent background (dark or light), and the bloom effect too.

The trails effect is kind of experimental though, it can produce artifacts in scenes with lots of particles. But I think those two make a great combo !

#WebGL #shaders

22.10.2025 21:11 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

Haha seems like a lot of funโ€ฆ
Anyway thank you for your valuable feedback ๐Ÿ™๐Ÿป

20.10.2025 14:07 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

Ok this is what I thought. I guess as long as itโ€™s properly documented, any default is acceptable.

I am just struggling to make my bloom effect work on a transparent background so I was wondering how (if) threejs handles that if it uses straight alpha

20.10.2025 13:44 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

I see that #threejs has premultipliedAlpha false by default on their Material, so I'm not sure how they handle that throughout the render pipeline, especially with postprocessing.

For my lib I think I'm going to assume premultiplied alpha everywhere, but I would be glad to get some feedback on this

20.10.2025 11:40 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0
Post image

I did some tests to fully understand the effect of premultiplied alpha combined with the gamma correction (linear RGB -> sRGB).

It seems that the only right way to blend rgba colors is to mix them in linear RGB with premultiplied alpha, and then convert to sRGB.

However โฌ‡๏ธ

20.10.2025 11:40 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

Thanks ๐Ÿ™๐Ÿป
Yes Iโ€™m just starting to understand the use of premultiplied alpha. I realized I might have some bugs related to it in the lib I am building.
So I just need to figure out where and when to do the conversion between straight and premultiplied alpha, and properly use gl.blendFunc()

17.10.2025 07:14 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

Thanks ! This is combined with bloom and tone mapping so yes it can be pretty bright

16.10.2025 22:10 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0
Video thumbnail

As expected the trails effect looks cool with particles !

I still struggle with the blending on semi-transparent surfaces, I need to fix that before shipping the effect

#WebGL #Shaders #buildInPublic

16.10.2025 19:47 ๐Ÿ‘ 13 ๐Ÿ” 1 ๐Ÿ’ฌ 2 ๐Ÿ“Œ 0

Indeed there is potential to make cool loaders !

10.10.2025 09:26 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

Thanks !

10.10.2025 06:53 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

btw it works with 2 ping-pong buffers that accumulate the previous frames with a light erosion effect to make the tail thinner

09.10.2025 20:34 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0
Video thumbnail

I've been working on a #WebGL light trail effect lately, and it turns out better than expected !

I just need to refine it a little and make it easy to reuse as a regular post-processing effect, and it should bring particles animations to a new level

#buildInPublic

09.10.2025 20:34 ๐Ÿ‘ 15 ๐Ÿ” 2 ๐Ÿ’ฌ 4 ๐Ÿ“Œ 0
screenshot of the bloom example showing a few bright colorful dots with a bloom effect

screenshot of the bloom example showing a few bright colorful dots with a bloom effect

It took me AGES but I finally implemented a decent bloom effect, along with a few tone mapping operators.

You can play with it here:
usegl.vercel.app/examples/post-processing/builtin-bloom/

#webGL #buildInPublic

26.08.2025 20:18 ๐Ÿ‘ 7 ๐Ÿ” 2 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0
git diff showing a change in the returned value of a fragment shader

git diff showing a change in the returned value of a fragment shader

Debugging #WebGL shaders is hard, but debugging a multi-pass postprocessing effect, well... that's next level ๐Ÿ˜…

I spent like 2h checking every texture, render target, sampling algorithm... only to find out that I did not returned the right variable in a shader ๐Ÿคฆโ€โ™‚๏ธ

BUT I think I'm almost there !

13.08.2025 20:23 ๐Ÿ‘ 3 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0
4DV.ai่ง†็ปดๆ™บ่ƒฝ - ๅฎ˜ๆ–น็ฝ‘็ซ™ At 4DV.ai, we are working on 4D video creation, playing and editing tools based on Gaussian Splatting. We envision 4D video to be the future of visual media and ultimate medium for immersive storytell...

3D Gaussian Splatting, but with video.
I did not know that was possible ๐Ÿ˜ฎ

www.4dv.ai

12.08.2025 19:27 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

I have finished setting up Umami on my home server for my websites analytics โœจ

It's oddly satisfying to self-host things ! I'm starting small with a simple public API

28.07.2025 20:14 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

๐Ÿ˜‚

19.06.2025 18:28 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0