(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) 呈现效果