DirectX on WindowsMobile 5.0
昨日の続き
何が遅いのかを再度確認するために、QueryPerformanceCounter を使って、パフォーマンスのチェックをしてみました。すると、
WS007SH Ver 1.05a(Latest) / WM5.0
EraseScreen - IDirectDrawSurface::Blt/DDBLT_COLORFILL で実装。
平均:約2.6ms(まれに7msとかあるのが謎)
FlipScreen - IDirectDrawSurface::Blt/DDBLT_WAITNOTBUSY で実装。
平均:約15ms!
IDirectDrawSurface::Flip がまともに動作しないので、Blt で実装してみたものの、約15msと激遅(T_T)。
60FPS の、1フレームあたりは何msだか知ってますか、あーた。16msでんがな。ページフリッピングだけで15msも喰ってたら、描画する時間がありませんがな。
実際の描画も激遅。500個のFillRectかけたら、約90msもかかってます。FillRect一回当たり約200μsって…何もできませんがね。
VBLANKは取れないは、PageFlippingは激遅だは、描画も遅いは、もう、どうにもなりません。
あ〜ぁ。
PageFlippingを別スレッドにしたところでなぁ…
■IDirectDrawSurface::Flip の謎
呼び出すと、画面にランダムな色の縦縞が表示される。これって完全にVRAM壊してるイメージなんだけど、オイラが悪いんだろうと、SDK Sample の Donuts2 を動かしてみたけど、こいつも同じ症状。
おかしいなと思って、Softbank の HTC 端末で動かしてみたらちゃんと動くぢゃねーかー。
そんならと、WS003SH でも試したら、こいつも動く。
「つか、バグだろ。これ」
しかし、その WS003SH の Flip 平均速度がなんと 30ms!
「あーほーかぁー」
これって、ソフトウェアエミュレーションしてるな、きっと。
結局、なす術なし…ってことかいな。
■バグなのか、仕様なのか
WS007SH / WS003SH ともに、横画面状態で DirectDraw の初期化に行くと、CreateSurface でエラーが起きます。TCPMPなんかで、画面横で再生するとエラーな報告もあるので、これもバグっぽい。ちなみに、このTCPMPでは、ディスプレイドライバの推奨設定が Intel-XScaleになってるんですが、なんだこれ?TCPMPの独自ドライバ?それとも、オイラも使えるのか?
だれか教えてちょんだい。
○ちなみに昨日のVSYNCが実装されていない問題は、LCDユニットのPINアサインを見て解決。
http://document.sharpsma.com/files/LS037V7DW01_SP_051706.pdf
このユニット、Out端子がありませんよ先生。VYSNC と HSYNC の割込出力端子が無いってことですよ先生。ガビーン(T_T)