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に対応できんなぁ、とか思って。
ウィンドウの所有権はレンダースレッドに持たせて、
メインスレッドで内部処理を行わせることに、なる、か。
あれ、メッセージ処理がレンダースレッドで行われたら、
今度はメインスレッドに終了の通知をださないかんな?
ヴァー、どうすんねん。