Skip to content

RGBA32 revised-4 - experimental tester build (base r12261, d7b76f2)

Pre-release
Pre-release

Choose a tag to compare

@Dkijas Dkijas released this 08 Sep 22:09
· 2 commits to candidate/rgba32-revised-4-r12261 since this release

Experimental prototype for testers. Not integrated into Simutrans Standard, not an official Simutrans release, not a stable version.

This is a later candidate than the r12254 one on main. main is untouched.

What to download

file what
simutrans-rgba32-revised4-r12261-win64-sdl2.zip Windows x86_64, SDL2. The 32-bit build to test, a 16-bit build of the same tree for comparison, and the Simutrans data directory. No pakset.
simutrans-rgba32-revised4-r12261-linux-x86_64-sdl2.tar.gz Linux x86_64, SDL2. The same two builds from the same tree, dynamically linked. No pakset.
RGBA32-CANDIDATE-REVISED-4.diff the exact patch both were built from
*.sha256 hashes of the archives
Windows archive  sha256 99a1c3e46c0d875ce8cb6bab30058c302d93d8cf199b1284cf24957522319632
  simutrans-rgba32.exe  bf3234ffbe3d68aff550dce43fc12536f921f07998849187e539225bd641acae
  simutrans-16bit.exe   0ec5d6ce01fe04671422d57ec6f907b39bc87df68c565fa621a95b773ba83ddf

Linux archive    sha256 de1b768e018f85224a174806e9eac5317b0e5069388fd85e032d476092e14ecb
  simutrans-rgba32      08028d3488ba56614404a1a8543acd9018f498697e510ba6a629acda71b08ac9
  simutrans-16bit       4874a88f37f2a65145fc5119e337b31601e944dce2d44f84b41b3d5e05df1a3d

patch            sha256 b562c2da8dd1281809cb8a08a657423578a0daf67068d0560e0936238d6cc08c

Identity

  • candidate RGBA32-CANDIDATE-REVISED-4
  • base official SVN trunk r12261 = git ecca332dca25025833f5ce6641491f8886a3ef9f
  • shape 26 files, 15 modified and 11 added, +6743 / −832
  • tree branch candidate/rgba32-revised-4-r12261, commit d7b76f2cd7f1d2752c0c5f951ce0dbf7281d27db, complete source under source/rgba32-revised-4-r12261/
  • builds Windows x86_64 (MinGW GCC 16.1.0) and Linux x86_64 (GCC 15.2.0, Ubuntu 26.04), both SDL2, Release, multithreaded
  • built with cmake -DSIMUTRANS_BACKEND=sdl2 -DSIMUTRANS_TRUE32=ON -DSIMUTRANS_MULTI_THREAD=ON -DCMAKE_BUILD_TYPE=Release

The published binary really is the 32-bit renderer. Checked in the executable, not only in the build: nm -C simutrans-rgba32.exe finds g_simgraph32 and does not find g_simgraph16; the comparison binary is the mirror image. At runtime the SDL2 backend creates the framebuffer without the pixel-format error a COLOUR_DEPTH=32 build raises unless the surface is 32 bpp with an 0xFF000000 alpha mask.

Linux x86_64

simutrans-rgba32-revised4-r12261-linux-x86_64-sdl2.tar.gz — same candidate, same
tree, same options; GCC 15.2.0 on Ubuntu 26.04, SDL2, Release. The archive keeps
the executable bits, so extract with tar -xzf and run in place.

tar -xzf simutrans-rgba32-revised4-r12261-linux-x86_64-sdl2.tar.gz
cd simutrans-rgba32-revised4-r12261-linux-x86_64-sdl2
# put a pakset in ./pak (pak64) or ./pak128, and copies of saves in ./save
./simutrans-rgba32 -singleuser
./simutrans-16bit  -singleuser      # the same world, ordinary renderer

It is dynamically linked, not bundled. Direct dependencies: libSDL2-2.0.so.0,
libpng16.so.16, libz.so.1, libbz2.so.1.0, libfontconfig.so.1,
libfreetype.so.6, libzstd.so.1, libminiupnpc.so.21, libstdc++.so.6,
libgcc_s.so.1, libm.so.6, libc.so.6. On Ubuntu 26.04 that is
libsdl2-classic libpng16-16t64 zlib1g libbz2-1.0 libfontconfig1 libfreetype6 libzstd1 libminiupnpc21. Check with ldd ./simutrans-rgba32 | grep 'not found'
before reporting a startup failure — libminiupnpc is versioned and is the one
most likely to differ on another distribution.

One build is not a promise that it runs on every distribution. Built and
linked against glibc on Ubuntu 26.04. If it does not start on yours, please
report the distribution and the exact error; that is useful.

What was checked on Linux: the archive extracts with its executable bits and its
own SHA256SUMS.txt verifies; g_simgraph32 is present in simutrans-rgba32 and
absent from simutrans-16bit, and the reverse for g_simgraph16; ldd reports
nothing missing; and both binaries start, read a pakset and enter a loaded world
— with SDL's headless dummy driver and again under a virtual X server
(Xvfb, SDL2 x11 driver). That is not a test on anyone's desktop, and zoom and
info windows were not driven interactively; see the validation section below.

What it does

The screen framebuffer and the per-player image caches are ARGB8888 instead of RGB565, so everything that mixes colours while drawing — day/night shading, transparency, blending, player colours, outlines, zoom filtering — works with 8 bits per channel instead of 5/6/5.

Pakset image data is unchanged. Your paksets stay what they are; savegames and the network protocol are unchanged too.

Compatibility and what you need

  • Windows x86_64. Self-contained: only Windows system DLLs are imported, SDL2 and the runtime are linked statically. Nothing to install.
  • You supply a pakset — pak64 or pak128, copied into the extracted folder as it would sit in a normal Simutrans folder. None is bundled.
  • Use copies of your savegames, and run with -singleuser so settings, saves and screenshots stay inside the extracted folder instead of your Documents\Simutrans.
simutrans-rgba32.exe -singleuser
simutrans-16bit.exe  -singleuser      # the same world, ordinary renderer

XR32 — no content exists, so expect nothing from it

XR32 is an optional extra node the engine can read from a pak. It needs a 32-bit build, and SIMUTRANS_XR32 set so that its first character is 1 — it is read once at startup with getenv("SIMUTRANS_XR32"), so it is not a CMake option, not a command-line switch and not a simuconf.tab setting — and a pakset that actually contains the nodes.

No public pakset contains them, and the makeobj that would write them is not part of this candidate. On anything you can download today, SIMUTRANS_XR32=1 changes nothing you can see. Testing the 32-bit renderer with your ordinary IMG paksets is the useful test; XR32 content is a separate thing that does not exist yet.

What is validated, and what needs your feedback

Validated:

  • the 16-bit renderer is unchanged by this candidate — 13 440 drawing cases (three zooms, four clipping passes, seven draw families, eighty images, two players) byte-identical to trunk r12261, with the coverage counted inside the moved code and two deliberately injected defects, one in the clipping and one in the resampling, caught by the same comparison. So simutrans-16bit.exe here should behave like an ordinary build;
  • the 32-bit renderer's frozen colour contracts, its zoom resampling (exact over 645 million pixels), and three multithreading defects found and fixed with sanitizers and negative controls;
  • both packages: extracted from the archive, started, loaded a saved world and ran, with the 32-bit framebuffer active — on Windows, and on Linux under both the headless SDL driver and a virtual X server.

Needs feedback — not measured:

  • long play sessions on real paksets;
  • any machine, driver or Windows version other than the single box this was built and measured on;
  • GDI and SDL3 backends, and macOS: not built here;
  • on Linux: any distribution, desktop, GPU or driver other than the single Ubuntu 26.04 box this was built on, and X11 versus Wayland differences;
  • interactive zoom changes and info windows driven through this binary: those draw families and zoom levels are covered by the certified matrices on the same sources, but the machine used has no GUI automation, so they were not re-driven through the published executable.

No claim is made that this is free of defects, or that it matches trunk outside the tests described above.

Known inherited defects

Present in Simutrans itself, not introduced and not fixed here, and not claimed harmless:

  • L1 — a left shift of a negative value in the clipping code. Verbatim from simgraph16.cc, reproduces in unmodified trunk, and now also compiled into the shared clipping header.
  • L2 — an unlocked read of an image's recode flags in the main viewport. Trunk's; this candidate adds a writer under the same mutex and does not widen it.
  • L3 — a one-element overread when a ground image contains a semi-transparent pixel. No shipped pakset has such art. AddressSanitizer did detect it, during world creation; that abort is what prevented running the later semi-transparent fixture rendering test under ASan.

Reporting

Open an issue. Please include the package name and this tag, your Windows version and graphics hardware, the pakset and its version, the steps from a fresh start, the zoom level and which window was open (most of the changed code is clipping and zoom), a screenshot, the log from -debug 3, and a minimal savegame when one is needed.

Most useful, roughly in order: scroll and zoom over a large map at every zoom level watching tile edges; open info windows — tile, station, convoy, depot, line — at zoom levels other than the default; transparency, including underground view and the transparent building mode; player colours with more than one player; day/night transitions; an hour or more on a busy map; save and reload.

The most useful comparison is simutrans-rgba32.exe against simutrans-16bit.exe from this same package on the same world.


Full instructions: docs/TESTING-RGBA32-REVISED-4.md and README-TESTERS.txt inside the archive.

Simutrans is licensed under the Artistic License 1.0; this build is a modification of the Simutrans source offered under the same licence, with LICENSE.txt included verbatim.