These are good questions. It’s very easy to get muddied by temporary (e.g. Direct2D at launch vs. >= 8.0.2) or specific situations that others posted about (where the full context and resolution is often not clear).
For me personally, working on my app, I would definitely avoid “walking on eggshells” around the API (ie, I would not avoid lines or strokes generally). In other words, my take on using API is “innocent unless proven guilty with data” — I personally haven’t run into any particular drawing performance issues with Direct2D, it’s been a big performance upgrade for my non-trivial app on Windows. There are for sure going to be specific situations where one implementation out-performs another, but that seems tough to generalize about.
One thing I would feel comfortable (based on my experience) stating is “avoid setBufferedToImage for animated components, it just adds overhead, you’ll have 100% cache writes, 0% cache reads.” That probably does need a doxy update, as more and more people are animating. Beyond that usage disclaimer, it “does the expected thing” everywhere, including the Direct2D renderer — if not, it’s a bug to be reported.
Since 8.0.2, the Image API (such as get/setPixelAt) does the expected thing on Direct2D (immediately modifies pixels in a software image, only flushing main memory to GPU memory once when read by the GPU) — so my take is also worrying about image types was a temporary 8.0.0 to 8.0.1 issue.
I’ll give it some thought in general though!
