Initially, the app used wxDC, wxImage, and wxBitmap for all 2D drawing operations; I replaced these with Direct2D:
- for full alpha channel support
- as a learning experience (honestly, I expected to revert my changes without committing)
- with the expectation that there would not be a significant performance difference
That expectation was wrong: it removed many multi-second freezes when handling large amount of image data. The primary reason seems to be:
- wxBitmap supports native pixel formats, but supports very few operations.
- wxImage supports common operations (e.g. scaling), but uses RGB, with the alpha channel stored separately.
- so, every conversion between the two required iterating over every pixel, on the CPU.
Moving to Direct2D:
- adds full alpha channel support
- reduces the number of pixel format conversions
- moves most operations from the CPU to the GPU