できた。


D3DXSpriteの実装をどういうふうに想像しても納得いく動作ではなかったのでナゾだったが、結局、DXRuby側のバグが根本の原因だった。
情けない限りだ。
D3DXSpriteのFlush関連についてわかったことを以下にまとめる。


・ID3DXSprite->Begin()でD3DXSPRITE_SORT_DEPTH_BACKTOFRONT指定した場合、Flush()時点でたまった分がソートされる。Flush()をまたいでソートすることはできない。
・SetRenderStateはFlush()時に設定されていたものが適用される。
・Flush()は別に重くはないようだ。


つまり、加算合成描画とソート機能は同居できない。
というのは少し語弊があって、合成処理をSetRenderStateで1種類だけ使うのであれば同居可能だ。
半透明と加算合成みたいな、SetRenderStateで機能を切り替えようとすると、Flushする必要がでてきてソートができなくなる。
ソートを諦めれば、たとえば半加算合成や減算合成も、なんでもやりたい放題である。
そして俺は、やりたい放題やりたいからソートは諦める方向で行くとする。
まあ、このへんは明記されてないからいつ仕様が変わってもおかしくはないのだが。
んでもD3DXってDLL内の実装だから、これが変わって動きが変わるようなら、メーカー製のソフトとかとんでもないことになるかもしれず。
さすがにないかなー