2014/05/23(金) [n年前の日記]
#1 [dxruby][cg_tools] 色変更処理も追加できた
swfをDXRubyで再生するスクリプトをまだ修正中。
色変更処理までは手が回らないかも、と思ってたけど。Shader を使ってどうにか実装できた。
ただし、Window.drawMorph() には Shader を渡すことができないので…。
しかし、RenderTarget の生成と破棄を頻繁に行ったせいか、しばらく再生を続けていると DXRuby が何かの拍子に不正終了してしまう。
また、アルファチャンネルを持っている画像を描画した際に、Flash Player 上の見た目と比べて、明らかに薄く描画されてしまった。おそらく、Shader内のアルファチャンネル計算式が違うんじゃないかと…。
仕方ないので、以下のような感じにして緩和することに。
色変更処理までは手が回らないかも、と思ってたけど。Shader を使ってどうにか実装できた。
ただし、Window.drawMorph() には Shader を渡すことができないので…。
- ウインドウサイズの RenderTarget を作成。
- RenderTarget に drawMorph で描画。
- Window.drawEx で Image の代わりに RenderTarget を渡しながら、Shader を使って色変更。
しかし、RenderTarget の生成と破棄を頻繁に行ったせいか、しばらく再生を続けていると DXRuby が何かの拍子に不正終了してしまう。
また、アルファチャンネルを持っている画像を描画した際に、Flash Player 上の見た目と比べて、明らかに薄く描画されてしまった。おそらく、Shader内のアルファチャンネル計算式が違うんじゃないかと…。
仕方ないので、以下のような感じにして緩和することに。
- 色変更が必要か不要かを事前に判定。
- 色変更が必要なら、RenderTarget と Shader を使って描画。
- 色変更が不要なら、Window.drawMorph で描画。
◎ 処理時間を測定。 :
スクリプト起動時、明らかに待たされるようになってきたので、ベンチマークを測ったり。
スクリプト開始時に必要な画像を全てロードしているのだけど、そこで1秒以上かかってるなと。しかし、画像を読み込まないと表示できないし…。これはもう仕方ないかな…。
以下、参考ページ。
_RubyでのBenchmarkの取り方をば。 -
user system total real xml parse: 0.016000 0.000000 0.016000 ( 0.023001) get fps 0.000000 0.000000 0.000000 ( 0.002000) load image: 0.952000 0.172000 1.124000 ( 1.161067) load shape: 0.015000 0.000000 0.015000 ( 0.006000) load sprite: 0.000000 0.000000 0.000000 ( 0.008000) root tmline: 0.031000 0.000000 0.031000 ( 0.031002)てっきり Nokogiri で xmlを解析してタイムライン情報を作っていくあたりが遅いのかなと思ったけど、そこは 0.03秒ぐらいだったのでたいしたことはなかった。
スクリプト開始時に必要な画像を全てロードしているのだけど、そこで1秒以上かかってるなと。しかし、画像を読み込まないと表示できないし…。これはもう仕方ないかな…。
以下、参考ページ。
_RubyでのBenchmarkの取り方をば。 -
[ ツッコむ ]
以上です。