Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Если константы, текстуры и состояние шейдера объявлены и инициализированы, единственное, что осталось сделать, — задать состояние эффекта на устройстве.
Настройка состояния без шейдера в устройстве
Некоторые состояния конвейера не задаются эффектом. Например, очистка целевого объекта отрисовки подготавливает целевой объект отрисовки для данных. Перед настройкой состояния эффекта на устройстве ниже приведен пример очистки выходных буферов.
// Clear the render target and depth stencil
float ClearColor[4] = { 0.0f, 0.25f, 0.25f, 0.55f };
ID3D11RenderTargetView* pRTV = DXUTGetD3D11RenderTargetView();
pD3DDevice->ClearRenderTargetView( pRTV, ClearColor );
ID3D11DepthStencilView* pDSV = DXUTGetD3D11DepthStencilView();
pD3DDevice->ClearDepthStencilView( pDSV, D3D11_CLEAR_DEPTH, 1.0, 0 );
Установка состояния эффекта на устройстве
Состояние эффекта устанавливается путем его применения в цикле отрисовки. Это делается извне. То есть выберите метод, а затем задайте состояние для каждого прохода (в зависимости от требуемого результата).
D3D11_TECHNIQUE_DESC techDesc;
pRenderTechnique->GetDesc( &techDesc );
for( UINT p = 0; p < techDesc.Passes; ++p )
{
}
....
pRenderTechnique->GetPassByIndex( p )->Apply(0);
pd3dDevice->DrawIndexed( (UINT)pSubset->IndexCount, 0,
(UINT)pSubset->VertexStart );
}
}
Эффект не отображает ничего, он просто задает состояние эффекта устройству. Код отрисовки вызывается после того, как состояние эффекта обновляет состояние устройства. В этом примере вызов DrawIndexed выполняет отрисовку.
Связанные разделы