2

direct3D10 で ID3D10RasterizerState を作成しようとしています。

ID3D10Device::RSSetState()

適切な情報とともに。ただし、ウィンドウが再スケーリングされるたびに、またはアプリがフルスクリーンになると、ラスタライザーの状態がデフォルトの状態にリセットされるようです。WM_SIZE メッセージで状態を設定しようとしましたが、厄介なことに、何も起こらないようです...

フレームごとに RSSetState() を呼び出すと正しく動作しますが、非常に非効率的です。

誰もこれに対する解決策を知っていますか? msdn のドキュメントが不十分なようです。

コード:

bool TestGameApp::InitGame()
{
    D3D10_RASTERIZER_DESC desc;
    desc.AntialiasedLineEnable = TRUE;
    desc.CullMode = D3D10_CULL_NONE;
    desc.DepthBias = 0;
    desc.DepthBiasClamp = 0.0f;
    desc.FillMode = D3D10_FILL_SOLID;
    desc.FrontCounterClockwise = false;
    desc.MultisampleEnable = true;
    desc.ScissorEnable = FALSE;
    desc.SlopeScaledDepthBias = 0.0f;

    m_pD3DDevice->CreateRasterizerState(&desc,m_pRSState);
    m_pD3DDevice->RSSetState(m_pRSState);

    //...more code
}

WndProc:

switch( message )
{
    case WM_SIZE:
    {
        m_pD3DDevice->RSSetState(m_pRSState);
        break;
    }
}
4

1 に答える 1

2

Just set it every frame. In general you want to minimize the number of render state changes in a frame but you don't need to worry about the performance impact of setting the rasterizer state once a frame. Setting it every frame also lets you do things like enable and disable wireframe rendering for debugging.

于 2011-11-10T22:59:14.227 に答える