ID3D10Device::RSSetState будет вызываться каждый кадр?
Я пытаюсь создать ID3D10RasterizerState с Direct3D10, а затем вызвать
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;
}
}
1 ответ
Просто установите это каждый кадр. В целом, вы хотите минимизировать количество изменений состояния рендеринга в кадре, но вам не нужно беспокоиться о влиянии на производительность установки состояния растеризатора один раз за кадр. Установка каждого кадра также позволяет вам делать такие вещи, как включение и отключение каркасного рендеринга для отладки.