Repository navigation
Releases: octalide/cellar
Releases · octalide/cellar
Release list
v0.13.2
Changed
- cellar has its own website at octalide.github.io/cellar, served from
docs/, whichdoc/became (#322).
v0.13.1
Changed
- A logo, and a short README around fresh screenshots. The full reference moved to
doc/guide.md(nowdocs/guide.md), and cellar has a project page at octalide.github.io/cellar (#318).
v0.13.0
Added
- The top readout shows the measured rate against the set speed (
speed 41 of 60/s, or41/s maxuncapped), and Stats shows the measured rate and the time a step takes, from GPU timestamps on the GPU and wall time otherwise (#310). - Fullscreen and the window's size and position are saved on close and restored at start, straight into fullscreen without a windowed frame. Position is restored where the platform allows it, which Wayland does not (#309).
Changed
- The World tab is grouped by task in three folding sections: Shape (topology, boundary, size), Walls, and Select and fill. Every exclusive choice is one button group, toggles are toggles, and each tool's heading shows its key and lights while the tool is in use. Picking the boundary, wall or select tool brings its section to the front (#311).
- The toolbar fits 1280 px with HashLife on. The engine choice, HashLife's step and going to a generation moved into one popup (#311).
- The help screen lists keys by area, and every control with a key shows it in its tooltip (#311).
- Stats takes more of the right side by default, so every row shows at 1280x800 (#311).
- Built on boom 0.50.
Fixed
v0.12.0
Added
- Drawn boundaries. A world can be any shape you draw, and any number of separate regions: rectangles, ellipses, polygons and freehand strokes, each added, subtracted or intersected. Outside the boundary there are no cells. Nothing grows or is painted there, no memory is spent, and each rule meets its own open edge there (dead for Life, zero for Lenia, no-flux for reaction-diffusion). Regions can be picked, moved, deleted or cleared, and the outside is drawn shaded (#287, #288).
- Walls. Cells inside the world with a fixed state that the rule's cells live against: dead, live, or a fixed value as a source or sink in Lenia and reaction-diffusion. Drawn with the same shapes and erased with the eraser, in their own colours in every colour mode. Painting cells never overwrites a wall, and painting a walled world on the GPU reads nothing back (#289).
- Randomize fills a square or circle around the view, the whole grid, a chosen boundary region or every region, or the selection, at a chosen density. The last choice is remembered and F frames it (#290).
- World files (
cellar 7), RLW patterns and the clipboard carry walls, and world files and copies carry the boundary. Older files load unchanged (#291).
Changed
- Bounds and Walls share one toolbar button, which shows the last of the two you used. W and L still take each directly.
- A
:Pplane is a boundary rectangle, so reaction-diffusion on a plane is no-flux at its edge where it read a fixed value before (#287). - Cut takes walls with the cells, since copy carries them (#291).
- HashLife refuses a world with a drawn boundary or walls, and says why.
Fixed
- A toast could show garbled text after a refused edit (#288).
v0.11.0
Added
- The pool gives memory back. Clear and reset return it to its starting size, and a world that has sat below a quarter of its pool for about two seconds is packed and shrunk to twice what it needs. On the GPU the packing runs in one pass with nothing read back (#285).
Fixed
- Clearing a world on the GPU no longer reads the pool back, so a multi-GiB world clears without a pause. A world too large for the host can now be cleared instead of being refused (#295).
- Pausing to clear, or starting play, on a world too large for undo no longer reads the whole world back only to discard it. Smaller worlds keep their undo as before (#295).
- Changing layers no longer holds the old and new GPU pools at once (#285).
v0.10.1
Changed
- The cell coordinates sit beside the zoom bar as their own x and y boxes, which stay put when the cursor leaves the world (#280).
Fixed
- The zoom bar flickered under the cursor and its buttons could not be clicked (#280).
- Trails and Age could not be chosen again once a world had grown a large pool, even after a clear. The pool now shrinks to fit the world when a mode needs room, and a refused switch says why (#279).
- Changing a grown world to a rule with wider cells, such as Life to Lenia, could overrun the GPU pool. Rule changes now fit the pool the same way, and a refused change says why (#283).
v0.10.0
Added
- The GPU pool is sized from the device's memory instead of a fixed 32,768 chunks. Each layer is split into shards reached by buffer device address, so a world can use as much of the GPU as you allow: a 4.9 GiB world runs on an 8 GiB card (#233). The default limit is three quarters of the GPU's memory, or a quarter where GPU memory is system RAM. Reaching it pauses the run with a toast that offers to raise it. Stats shows the pool's memory and its limit.
- A Lenia category of 13 creatures from Bert Chan's Lenia collection, Lenia rule presets (Orbium, Gyrorbium, Scutium, Hydrogeminium) and a Gray-Scott category of seeds (#239).
- Picking a library pattern whose rule differs from the world's offers to take it, as a paste does. Shift-click takes it (#273).
--bench ... --rule <rule>runs a bench under any rule, with a seed that suits Lenia and Gray-Scott (#257), and--colour <solid|trails|age>runs it in a colour mode (#237).- A rule family registered after the GPU starts gets its GPU stage built on first use (#251).
Changed
- Trails, heat and age are kept only while a colour mode shows them. A solid-colour Life world holds 2 bits a cell instead of 34. Switching modes on a GPU world builds or drops the layer on the GPU (#237).
- The chunk ceiling is now a pool memory limit.
cellar run --max-chunksis replaced by--max-pool-memory <MiB|off>, and a saved ceiling carries over (#233). - A Vulkan 1.2 device with buffer device addresses is required. Every current desktop driver, lavapipe, the Raspberry Pi 5 and MoltenVK on macOS 13 or later have them (#233).
- The readout is padded 12 px at the sides and 8 px above and below again. Built on boom 0.49 and blit 0.13.
Fixed
- A world past 65,535 chunks stepped wrongly on the GPU, because some dispatches went past the device's workgroup count limit (#275).
- Leaving HashLife for the GPU with a rule the GPU cannot step left the world frozen without a word. It is now refused with the reason (#266).
- A bench whose world stopped printed a wrapped rate (#258).
v0.9.0
Added
- cellar notices a software Vulkan device, such as Mesa's llvmpipe, and steps the world on its CPU engine, which outruns the GPU engine emulated on the CPU. It says so once at start, and
--engine gpustill steps on the device. Settings and Stats show the graphics device in use. The README has a troubleshooting section for slow drawing (#259). - Tab hides the toolbar as well as the panels, leaving the two stat overlays (#241).
- The zoom readout shows px per cell exactly, with buttons that step zoom by powers of two (#242).
Changed
- Two-state rules (Life, isotropic and non-totalistic, Larger than Life, weighted) store each cell in one bit and step 32 cells at a time on the GPU, 1.4 to 3 times faster in the benches (#234).
- Generations and rule tables store each cell's state in one byte, 1.8 to 2.3 times faster on the GPU (#235).
- Cells are kept in layers of fixed width with one contract for every rule family, and families are registered in one place (#232, #249, #255, #256). Reaction-diffusion keeps its two fields as two 16-bit layers. Worlds and patterns written by 0.8.0 load exactly (#236).
- boom picks a hardware GPU over a software device.
BOOM_DEVICEnames a device by index or name to override that. - Built on boom 0.48. Building needs Mach 6.10.1 or newer.
Fixed
- Some glyphs drew one pixel below the rest of their line (#243).
v0.8.0
Changed
- Uncapped GPU stepping is paced from measured GPU time, so frames hold the display's refresh rate instead of a sawtooth that missed one refresh in six. Without GPU timestamps, the frame-time controller cuts as soon as a frame runs over (#207).
- The GPU pool grows without stalling the frame. Its buffers are made inside the frame and the GPU keeps the pool while it grows. If the host cannot get the memory, the run pauses with a toast instead of losing any of the world (#208).
- HashLife collects in 6 to 20 ms instead of freezing the run for 60 to 80 ms (#209), and shows each generation without a stalled upload (#210).
- The view is published through a double buffer, so an uncapped HashLife or CPU run shows a new generation every frame (#220, #223).
- Chunk uploads and the rule table go up as one batched write recorded into the frame (#211, #216, #218).
- Built on boom 0.45.
Fixed
v0.7.1
0.7.0 was tagged but never published, because its release run failed on macOS Intel. 0.7.1 is the first release carrying 0.7.0's changes.
Fixed
- A HashLife step passes its step-time ceiling once the clock reaches the deadline, not only after it, so a run to a generation pauses on the ceiling on every clock (#202).