Lesley Lai

@lesleylai.info

I organize @gpvm.bsky.social lesleylai.info/ mastodon.gamedev.place/@lesley

meshoptimizer 1.2 is out! Featuring support for tangent generation, a significantly faster vertex decoder for Intel/AMD CPUs, several new smaller algorithms (cluster position compression, triangle filtering, clusterlod BVH) and more. GitHub stars and boosts appreciated! github.com/zeux/meshopt...

Bild

git LFS + multiple remote mirrors are annoying - Forgejo's push mirror: does not sync large files - one remote with multiple push URLs: only push large files to the first push URL - multiple remotes: seems to work. But it's annoying since I need to `git push` multiple times for different remotes

Baby's WIP #vulkan render graph implementation. I am still working out how best to automatically generate barriers. The current heuristic is fairly coarse and may limit expressiveness.

A piece of code show casing render graph in action. It has two passes: "compute drawing" and "blit". No manual pipeline barriers are inserted.

A nice side effect of converting an old C++ project to use C++20 modules is that I no longer need to think about which header to include to use particular functions. I am using a much larger granularity for modules (one CMake target per module), whereas before I had hundreds of small header files.

someone already vibecoded (a bad clone of) this and shared it online because we live in the worst timeline y'know it kinda disincentivizes me from sharing progress when there are slop ghouls around every corner, AI or otherwise

Just set up AdGuard Home on a new Raspberry Pi for the first time. As someone who has never used a Raspberry Pi before, this whole process of assembling the case, installing the OS, and installing the software took less than 2 hours (I'd expect it to take like a whole weekend). Pleasantly surprised

A little Raspberry Pi board in a plastic case

Baby's first Forgejo actions pipeline. Can probably reduce my GitHub Actions usage substantially (the only use case not covered is for Windows runners)

Screenshot of the Forgejo web UI showing CI build and test jobs for a Rust project

This is a pretty nice poster. The integration of vector fields and the Stokes' theorem stuff took me a while to parse, but I'd really love it if someone had presented this information to me this way before. #calculus

A poster summarizing integrals across different dimensions, organized as a grid from left to right as 0d to 3d integrals, and different integrals on different function domains and codomains from top to bottom.

The top row is about functions from R^1 to R, where "0D integral" is just evaluating the function, and the 1D integral is the simple single variable integral.

The second row is about vector fields from R^2 to R^2, where the 1D integral is the work integral (line integral on tangent vector).

The third row is about functions from R^2 to R. "0D integral" again is just evaluating the function. 1D integral is the line integral (on scalars), and 2D integral is the double/area integral.

The fourth row is about functions from R^3 to R. "0D integral" is evaluating the function. The 1D integral here is still the line integral (on scalars). The 2D integral is the surface integral (on scalar). And the 3D integral is the triple/volumetric integral.

The fifth row shows vector fields from R^3 to R^3, where the 1D integral is the work integral, and the 2D integral is the flux integral (surface integral on the normal vector).

There are also extra red lines here showing the relationship of these integrals via the Stokes Theorem.

I've written a bunch of programming language related projects in the past, and are quite comfortable with this stuff. But if a learning resource dumps me with a BNF and hope me to magically understand the syntax of a new feature, I just can't, or at least it will take me more trouble than worth it.

Fun "temporal" bug in my new path tracer project that only manifested when I set max bounces to a very low value (e.g., 3). Can you guess why?

Sometimes it is hard to tell whether this is a human troll or the whole text is generated via LLM. Or maybe both. For context: this is a personal project that I don't expect anyone to use. Nevertheless, what this person described is completely bogus

For instance, trying to match the pattern ^(a|ab)*c$ against the string abc results in an incorrect match, whereas simpler patterns seem to work perfectly fine. How can I be sure that the library is reliably handling these scenarios? It’s incredibly frustrating to deal with this inconsistency, and I expect a response and fix for this issue promptly.

Can we get some rigorous debugging on this? It’s crucial for the integrity of the library that this functionality is solid. Users should not have to second guess the matching results based on regex complexity. If this is related to the underlying NFA implementation, it absolutely needs to be addressed right away – no exceptions.

Please prioritize this fix as I need to know that I can rely on miniregex for any production-level projects. Waiting around for issues like this to be addressed is not feasible.

It is interesting that many ray tracing APIs (such as Vulkan and OptiX) require 3x4 matrices (rather than 4x4) for affine transformations. Makes me wonder about many usages of 4x4 matrices waste 16 bytes to always store [0, 0, 0, 1]