Поделиться через


Применение метода (Direct3D 11)

Если константы, текстуры и состояние шейдера объявлены и инициализированы, единственное, что осталось сделать, — задать состояние эффекта на устройстве.

Настройка состояния без шейдера в устройстве

Некоторые состояния конвейера не задаются эффектом. Например, очистка целевого объекта отрисовки подготавливает целевой объект отрисовки для данных. Перед настройкой состояния эффекта на устройстве ниже приведен пример очистки выходных буферов.

    // 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 выполняет отрисовку.

Визуализировать эффекта (Direct3D 11)