Expand description
Master branch online documentation is available at doc.icelk.dev.
§Pipeline
First you need to get a Config
.
I suggest creating it like this:
let config = Config {
iterations: 100_000_000,
..Config::poisson_saturne()
};
§Multithreaded
Call render_parallel
.
This benefits the most when the number of iterations is much higher than the dimensions of the image. The gap closes rapidly when the relation is < 25. This also consumes more memory, as we need a set of working images for each execution unit, usually the number of threads on your CPU. See Performance for more info.
§Single-threaded
Create a Runtime
.
Then render
and finally colorize
.
§Performance
The thing slowing the algorithm down with larger image dimensions is the cache size - and memory access. We basically do random access reads and writes on a often > 2 megapixel image. If the system memory is slow, this brings performance to a halt.
§Colouring
When the iterations are executed, the magnitude of change is stored in a texture. When it’s time for colouring, this |Δp| is mapped to a palette. The brightness is determined by the number of visits to the pixel.
Re-exports§
pub use config::ColorTransform;
pub use config::Colors;
pub use config::Config;
pub use config::RenderKind;
pub use config::View;
pub use primitives::EulerAxisRotation;
pub use primitives::FloatExt;
pub use primitives::Vec3;