You are browsing as a guest. Sign up (or log in) to start making projects!

PavolUlicny

@PavolUlicny

Joined June 1st, 2026

  • 43Devlogs
  • 1Projects
  • 0Ships
  • 0Votes
15yo dev, working in C++ on a terminal-based software renderer called rasterminal.
Open comments for this post

2h 44m 35s logged

Finally committed and pushed the input rework

Tested it on both linux and windows and everything seems to work. No inputs interpreted as other inputs, all edge cases handled, just works. Finally can move onto other things.

0
0
4
Open comments for this post

9h 15m 10s logged

Still working on the input parsing system

It is very hard and I keep finding bugs and reasons to redesign it. I’m in pain. I do think I’m getting closer to the final robust design.

0
0
3
Open comments for this post

9h 56m 8s logged

Working on completely rewriting the current input parsing handling

The current input handling is subpar at best; it interprets a lot of random keys as escape, which currently quits the program (This will also be changed to Q and Ctrl+C only. Kind of a no-brainer since this is the more standard choice for TUIs - for example btop - and it also means I don’t have to deal with the headache of distinguishing function keys and others from escape) and has a lot of other quirky behavior that needs fixing. I’ll also try to improve robustness against malformed input like a leaky SSH session. There are a lot of various edge cases and situations where you have no way to distinguish real input from malformed input. This is all a very major pain in the ass. And I thought figuring out the raw mode output would be the hard part. And after all this, I’ll end up with way less attention than strictly slower, less robust competitors, just because they already have an audience from other projects. I bet nobody will even read this. I’m basically talking to myself right now. Or maybe, just to spite me, the algorithm will push this more than my other devlogs.

0
0
58
Open comments for this post

8h 4m 19s logged

So, i found two memory bugs in a widely used terminal input library

I was researching terminal input libraries to use for this project because my current approach was so buggy that it wasn’t worth fixing. Both of them are memory bugs in the libtermkey library. There are forks of the lib with this fixed, but since many projects still rely on this lib, i submitted them anyways. I’ve also confirmed that the bug is present on my machine on Ubuntu 24.04 LTS on Neovim, because it links the vulnerable shared library. I didn’t mark them as CVEs (hopefully that isn’t a problem). If anyone want’s to look at the bug reports, they are at https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1142891 and https://bugs.launchpad.net/ubuntu/+source/libtermkey/+bug/2161916

0
0
11
Open comments for this post

4h 33m 9s logged

Added more CLI flags for startup customizability

Added flags to set the camera pitch, yaw and zoom on startup. Now every runtime-settable variable can be set during startup through the CLI. The R button now resets the state to the CLI set state, not to factory defaults.

0
0
8
Open comments for this post

4h 26m 39s logged

Added –spin-speed and –spin-direction flags

Added CLI flags for the spin speed and direction. The speed is in deg/s and the directions is simply left or right. Here’s what 1000 deg/s looks like spinning to the right:

0
0
7
Open comments for this post

8h 41m 21s logged

Did a bunch of small code quality and usability improvements

Fixed a Windows bug that crashed the program on model sizes bigger than 2GB, improved the orbit usability (fixed mouse drag behavior when models are turned upside down), and did a few cleanups and fixes in the CLI parsing.
I’m planning on adding a few CLI flags that I think can be very useful for some people, specifically better spin settings, starting camera angle/zoom control and a few more.

0
0
7
Open comments for this post

39m 13s logged

Finally merged color-fallback, I can move onto other things

The branch is finally merged. I’ve accumulated a bunch of usability and code quirks and issues that i can finally get to now that the branch is merged. So now I’ll be reworking all the CLI flags, camera and other components. And we also passed the 700 commit mark with this merge!

0
0
6
Open comments for this post

4h 56m 40s logged

Changed the 24bit to 256 color palette conversion logic

Until now, the conversion picked the closest color possible mathematically. But from testing on a bunch of different models, I’ve realized that it doesn’t actually look very close to the human eye. So I swapped it out for a different method, called CIELAB distance. Now it still doesn’t look perfect, but as a fallback for older terminals it’s close enough.

0
0
8
Open comments for this post

9h 13m 33s logged

Working on a –color compatibility flag

The color terminal compatibility thing I was working on has landed in the branch, now I’m adding a –color flag to override the automatic capability detection for situations like ssh, where we almost always degrade to the 256 color pallete for maximum compatibility. So now you’re gonna be able to use the right color mode even if the automatic detection is wrong for your situation.

0
0
11
Open comments for this post

10h 21m 8s logged

Working on terminal color capability detection

I am adding automatic terminal capability detection, meaning that rasterminal will get the terminal type and either refuse to render on super old or “dumb” terminals, degrade on some terminals and render normally on modern ones.

0
0
8
Open comments for this post

5h 9m 13s logged

Working on adding 256 color support

Some older terminals can’t display full 24bit RGB colors and use a 256 color palette instead. I’m adding a fallback so the older terminals can still use rasterminal. It still calculates the full old RGB colors, but then just maps them to the nearest 256 color with LUTs.
On a side note, I switched my terminal emulator from Kitty to Ghostty.

0
0
13
Open comments for this post

10h 24m 18s logged

Working on portability

Did a bunch of small fixes and improvements in the last ~week. Right now I’m on vacation for the next couple of days, so I won’t be active. I am currently working on broader terminal and platform support, so older systems and terminals will be able to run cleanly with some fallbacks or will fail loud with a clear message about what isn’t supported.

0
0
9
Open comments for this post

5h 11m 33s logged

Completely removed the shadow map

Before, rasterminal built a shadow map on model load and displayed it during runtime. I now completely removed it, because it was slower during load, slower during runtime, sometimes looked broken on curved surfaces and added essentially no value.
Here, the first picture is with the shadow map and the second is without.

0
0
10
Open comments for this post

13h 26m 5s logged

Wasted 7 hours of my life

Did a bunch of smaller cleanups and fixes, and then I tried to template the unlit and lit paths in the rasterize_flat function, which turned out to be a performance regression. Awesome.

0
0
8
Open comments for this post

5h 46m 24s logged

Added a release workflow, manpage and changelog

I added a github release workflow that works alongside the changelog and released the first pre-release version:
v0.1.0-alpha.1
Also added a manpage and an install target to make and cmake that installs the binary, docs and manpage into the path.

0
0
13
Open comments for this post

5h 10m 59s logged

Pararelized the wireframe shading mode

I did a bunch of small things alongside it, but the main feature for this devlog is the pararelization of the wireframe shading mode. It was previously fully single threaded, but it wasn’t that hard to pararelize, i just had to make the function it used to write into the framebuffer (draw_line) CAS atomic, to avoid race conditions. Now wireframe is the fastest shading mode in basically all scenarios.
Below, you can see a performance benchmark (built into rasterminal using a flag) with wireframe mode on a super dense mesh and how the wireframe mode looks like (you can also cycle the colors).

0
0
16
Open comments for this post

1h 54m 12s logged

Split the tests into sub-directories

The test suite is now very long (20k LOC across 47 files), so i decided to split it into sub-directories instead of just having 47 files in one flat dir. It’s cleaner, more maintainable and looks better.

0
0
13
Open comments for this post

4h 59m 25s logged

Completely removed gouraud shading mode

Gouraud was previously the main shading mode, but now I’ve just completely removed it. It was by far the slowest, while not adding any actual value to the project. Blinn-phong lighting is faster AND it supports more features (normal maps, etc.), so there was just no point in keeping gouraud. Now that I’ve removed it, the project has less code to maintain and a faster default shading mode with more features.

2
0
38
Open comments for this post

3h 45m 35s logged

Added proper OBJ bump map support

OBJ bump maps are textures for simulating bumps and wrinkles on models. Blender used to author bump maps as normal maps for some reason, so I made it automatically detect if it’s a normal map disguised as a bump map and handle it well, since there are a lot of old Blender OBJ models in the wild. But it also handles bump maps as bump maps normally, so it’s basically the best of both worlds.

0
0
9
Loading more…

Followers

Loading…