2

我正在尝试使用 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;
    }
}
4

1 回答 1

2

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

于 2011-11-10T22:59:14.227 回答