Start by removing accidental work
A first image should not require one allocation for every pixel. A vector can own a contiguous output buffer, and short-lived arithmetic values can stay ordinary local values. Inspect the renderer before replacing its allocator: needless ownership transfers, repeated growth, or per-pixel containers often explain more than the heap implementation does.
std::pmr separates a container’s interface from the memory resource that supplies its storage. A pmr::vector is still a vector: it still has size, capacity, invalidation rules, and element lifetimes. Passing a different resource does not make out-of-range indexing safe.
This lesson studies allocation policy in a separate executable. It does not claim that adding an arena makes the renderer faster. Keep the straightforward renderer as a baseline, and measure a real workload before integrating a memory policy.
Find the renderer’s output allocation. Identify its owner and lifetime. Then look for allocations inside the pixel loop; record what you find before proposing a change.
