What's new in 1.2.3
The hub's News card reads a feed from this site, the canvas is unbounded, the 2D preview filters correctly on high-DPI displays, and Blend's Min mode binds the right neutral.
1.2.3 is a small release: one new system in the hub, one canvas fix, and two rendering fixes.
The News card
The News card reads a feed published by this site. Announcements and release notes no longer ship inside the build, so a release, a devlog, a notice about a broken build or a sale can arrive at the next launch without an update first.
Tabs. Comms holds posts. Changes holds release notes. Notes are fetched, so a correction to shipped release notes does not need a new version.
Sorting. Posts carry a date. Pinned posts sort to the top of their own group. An unread dot marks posts that have not been opened.
Scheduling. The site resolves each post’s Eastern publish time to an absolute instant before publishing. The app compares instants, so a scheduled post appears at the same moment for every reader regardless of device timezone, and there is no timezone arithmetic in the app to disagree about.
Versions you do not have. Release notes for newer versions are readable in the Changes tab, and a pill appears when the store has something newer. Nothing in the feed is filtered by the running build. Platform is the only filter, on the grounds that a Windows user cannot act on a macOS notice, whereas someone on an older build is the reader most likely to want to know what is in the new one.
Offline. A failed fetch resolves to nothing new rather than to an error state. The last good feed stays cached and keeps rendering.
Opting out. Settings, under General, turns announcements off and clears the cache.
The sidebar’s website button also now opens surfacelabs.app. It had been pointing at a placeholder.
The canvas is unbounded
Past a certain distance from the origin, nodes continued to draw but stopped receiving pointer events, with no indication of why. Panning back toward the origin restored them.
The bound is gone. A node any distance out behaves like a node at the origin.
2D preview filtering
The 2D preview sampled unfiltered, so it aliased on high-DPI displays and at any fractional zoom. The effect got worse as display density went up.
It now filters when the texture is minified, which covers zoomed out and every fractional zoom between steps. Above roughly two screen pixels per texel it switches to nearest-neighbour, so inspecting individual texels shows the texels rather than an interpolation of them.
Blend: Darken (Min) with an unconnected base
Blend in Darken (Min) mode output solid black whenever the base input was unconnected, and Opacity had no effect on the result.
An unconnected input binds transparent black. That is the correct neutral for Lighten, Add and Screen, where it leaves the other input unchanged. Under Min it is the worst case: zero is the minimum of the range, so it wins every comparison, discards the blend layer entirely, and leaves Opacity interpolating between black and black.
Min now binds white, which is its identity. Other modes are unchanged.
iPadOS 15 minimum
The declared iPad target moves from iPadOS 13 to 15.
This is a correction rather than a cut. The Metal renderer and the memory budgets have only ever been exercised on Apple-silicon iPads, all of which run well past iPadOS 15, so the old floor described a configuration that was never tested. Carrying it cost build configuration for hardware nobody runs this on. The docs list 15.0 under Minimum requirements.
Show me what you’re making
Separate thing, but while I have your attention.
Every material on this site is one of mine, and I’d much rather show yours. If you’ve built something in Surface Labs, post it in the Discord. Finished materials, renders, a graph you’re pleased with, a graph that went sideways in an interesting way. I’ll ask you in the thread before anything goes on the site, and you get credited however you want.
The longer version is here: Show your work.