每帧都要调用ID3D10Device :: RSSetState?

时间:2011-11-09 16:20:54

标签: c++ direct3d direct3d10

我正在尝试使用direct3D10创建ID3D10RasterizerState,然后调用

ID3D10Device::RSSetState()

提供适当的信息。但是,无论何时窗口重新调整,或者应用程序全屏显示,rasterizerstate似乎都会重置为默认状态。 我试图用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;
    }
}

1 个答案:

答案 0 :(得分:2)

每帧都设置一下。通常,您希望最小化帧中渲染状态更改的数量,但您不必担心每帧一次设置光栅化器状态会对性能产生影响。每帧设置它还允许您执行诸如启用和禁用线框渲染以进行调试之类的操作。