RGSS2を知る(38)

Bitmapで自分に自分を描画したときの挙動。

b1 = Bitmap.new(100,100)
b1.fill_rect(b1.rect, Color.new(50,150,255,100))

b = Bitmap.new(640,480)
b.blt(0, 0, b1, b1.rect)
b.blt(50, 50, b, b.rect)

s = Sprite.new
s.bitmap = b

loop do
  Graphics.update
end


元と先に同じオブジェクトが指定できる。
1回の描画でこのような結果になるのは、単純に左上から順に処理しているだけだからだ。
通常、このような転送は元と先の重なり方によって逆順から転送するようにするが、RGSSはそのような処理はしていないようだ。
DXRubyではテクスチャロックの都合でソースとデスティネーションに同じオブジェクトは指定できないようにしていた。
FreeRGSSはDXRubyと同じ仕組みだが、本家互換を達成するためにはこの動きにも対応しなければならない。
まあ、同じオブジェクトならロックを1つに減らしてポインタを共有にするだけなのだが。