我正在尝试使用 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;
}
}
最佳答案
只需在每一帧设置它。通常,您希望尽量减少帧中渲染状态更改的次数,但您无需担心每帧设置一次光栅化器状态对性能的影响。每帧设置它还可以让您执行启用和禁用线框渲染以进行调试等操作。
关于c++ - ID3D10Device::RSSetState 每帧调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8068023/