2006/11/03(金)Managed DirectX にて
レンダーはVsyncを待ってしまうので、内部処理もこれに合わせると
タイムラグがひどいプログラムになってしまう。
D3D.Present はブロッキングするので、マルチスレッドを導入せざるを得ない?
いろいろな不都合が生じたあげく、フレームワークを変えることにした。
普通は、
class MainForm : Form { class Direct3D; class DirectSound; class DirectInput; }
と、なるところを
class App{ class Direct3D { class MainForm:Form; } class DirectSound; class DirectInput; }
こんな風に。
レンダースレッドと内部処理をするメインスレッドとを分けたんだけど、
メインスレッドがウィンドウを持ってると、レンダースレッドで発生する
DeviceLostExceptionに対応できんなぁ、とか思って。
ウィンドウの所有権はレンダースレッドに持たせて、
メインスレッドで内部処理を行わせることに、なる、か。
あれ、メッセージ処理がレンダースレッドで行われたら、
今度はメインスレッドに終了の通知をださないかんな?
ヴァー、どうすんねん。