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


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

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

Установка состояния не-шейдера на устройстве

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

    // Clear the render target and depth stencil
    float ClearColor[4] = { 0.0f, 0.25f, 0.25f, 0.55f };
    ID3D10RenderTargetView* pRTV = DXUTGetD3D10RenderTargetView();
    pd3dDevice->ClearRenderTargetView( pRTV, ClearColor );
    ID3D10DepthStencilView* pDSV = DXUTGetD3D10DepthStencilView();
    pd3dDevice->ClearDepthStencilView( pDSV, D3D10_CLEAR_DEPTH, 1.0, 0 );

Установка состояния эффекта на устройстве

Установка состояния эффекта выполняется путем применения состояния эффекта в цикле отрисовки. Это делается извне в . То есть выберите метод, а затем задайте состояние для каждого прохода (в зависимости от желаемого результата).

    D3D10_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 10)