« そろそろヘルプ必要? | メイン | 指定ブラウザで開く »

2005年03月19日

吉里吉里 DirectX拡張:: 直接描画が出来ない

    

BaseLayerのDrawが最終的に描画を行っているみたいなので、何もせずにreturnするようにしてメイク。
実行させると何も描かれなくなった。
で、プラグインの方をレンダーターゲットを設定せずに、普通にPresentするように戻し、実行。
何も描画されません。
あれー?
よくわからない。

レイヤーへ描画する方もいろいろといじってみるが、速度はいっこうに改善されず。
速いマシンでも同じぐらいの重さ。
何か根本的な問題があるような・・・

スクリプトから3Dを触れると言うのは思いのほか楽しかった。
VCでビルド&実行というのも作業量的には同じなのだが、スクリプトの方がかなりお手軽。
まあ、プロジェクトを作ったりしなくてもいいし、面倒なことはクラスDLL内に行っているので、お手軽な感じがする。
初めから大部分をスクリプト側に提供するようにしておき、プロトタイプをスクリプトで組んでいくのが楽でよいかも。
で、速度が必要な部分や汎用的な部分をネイティブに実装する。
そんな感じがいいかな。

吉里吉里の3D拡張は、メリットが薄くなってしまったかもしれない。
Teaspireの方へノベル/ADVシステムをのせる方が良いかも。
初めはRPGのシステムをTeaspireへ、ノベルは吉里吉里へと考えていたけど。



投稿者 Takenori : 2005年03月19日 11:26



コメント

こんばんは。

レイヤ経由だと重たいですよ。
考えられる解決法としては、レイヤ経由での描画を
あきらめ、一つのウィンドウを
吉里吉里のウィンドウの子ウィンドウとして作成し、
そこに描画させるというのがあります。
(VideoOverlayのオーバーレイ再生と同じ)

VideoOverlayと同じインターフェースで実装する
というのもありますが、Window.HWND を使って
独自にウィンドウを貼り付ける方法もあります。

どちらにしろ、吉里吉里は いくつかのタイミング
(ウィンドウフルスクリーン切り替えや
Window.stayOnTop の切り替え)でウィンドウハンドル
を作り直すので、そのタイミングでいったん
子ウィンドウを取り外し、また取り付けなければ
なりません
(Windowクラスにはそのタイミングを通知する仕組みがあります。
ソース中のプラグインサンプルに wmrdump というのが
あるので参考にしてください)

# やっぱりトラックバック実装した方がよさそうですね

投稿者 W.Dee : 2005年03月19日 20:44

こんばんは。

途中、レイヤ経由での描画は避けたいと思い、子ウィンドウを作り、そこへ描画するようにしてみたのですが、CreateDeviceで失敗して悩んで止めました(笑)
EffectEditサンプルでは、子ウィンドウへの描画を行っているようなので、方法はあるはずと思っていたのですが、面倒だからいいやって感じでした。
でも、せっかくアドバイスを頂いたので、EffectEditサンプルを追ってみたところ、子ウィンドウへの描画方法がわかり、実行してみたところ重さは解消され、いい感じに動くようになりました。
これはいい感じです。
楽しくなってきました。

でも、子ウィンドウを取り外し、取り付ける・・・ むむむ。
普通にデバイスをロストした時のようにすれば、実装できるのかなぁ。
まあ、とにかくやってみます。

投稿者 Imoto : 2005年03月19日 22:01


comments powered by Disqus
Total : Today : Yesterday : なかのひと