2006/11/03(Fri)Managed DirectX にて

はてブ数 2006/11/03 22:49 計算機な日記::ソフト作り つーさ

レンダーはVsyncを待ってしまうので、内部処理もこれに合わせると
タイムラグがひどいプログラムになってしまう。
D3D.Present はブロッキングするので、マルチスレッドを導入せざるを得ない?
いろいろな不都合が生じたあげく、フレームワークを変えることにした。

普通は、

class MainForm : Form
{
    class Direct3D;
    class DirectSound;
    class DirectInput;
}

と、なるところを

class App{
    class Direct3D {
        class MainForm:Form;
    }
    class DirectSound;
    class DirectInput;
}

こんな風に。

レンダースレッドと内部処理をするメインスレッドとを分けたんだけど、
メインスレッドがウィンドウを持ってると、レンダースレッドで発生する
DeviceLostExceptionに対応できんなぁ、とか思って。

ウィンドウの所有権はレンダースレッドに持たせて、
メインスレッドで内部処理を行わせることに、なる、か。
あれ、メッセージ処理がレンダースレッドで行われたら、
今度はメインスレッドに終了の通知をださないかんな?

ヴァー、どうすんねん。