Surface#pixelsって画像データそのままじゃないのね・・・。
先日、影文字を付けたとアナウンスをしたのですが、アンチエイリアス付き文字で
影文字を付けようとすると、影文字が消えてしまう問題が発覚しました。
まぁ、原因は、文字を描画する際に、SDL::TTF::renderBlendedUTF8で作った画像を、転送先の画像関係なしにそのまんまコピーしているからなんですけどね(要は、元画像のSRCALPHAを切って使ってるんですけどね)。
さぁどうしようと。Miyakoの実装から考えると、画面サーフェスに文字を秒がしようとすると大きな改造が必要になってくる。
ということで、Ruby/SDLのサーフェスを直接書き換えることを考えました。
丁度、1.4.6では色深度を32ビットに限定していたので、色深度で色々悩まなくて
住みます(色の並びがRGBAかABGRかといったことぐらい)
ちょうど、Surfaceクラスにはpixelsメソッドっていう便利なメソッドがあります。
画像データを文字列インスタンスにして取得できるやつです。
早速これをいじってスタート・・・
・・・
あれ、反映されない
色々原因を調べてみると、どうやら、「文字列インスタンス」が曲者と判明。
文字列インスタンスを作るのに、C側ではrb_str_new関数つかっているのですが、
実は、これは元の文字列からのコピーなわけです。
つまり、Ruby/SDLのサーフェスは直接いじれませんよ、と。
えーと、えーと、弄りたかったら、SDL.h直接引っ張って来いってことでしょうか?
・・・これ、やってみたいけどなぁ・・・。