Objetos de estado (Direct3D 10)

En Direct3D 10, el estado del dispositivo se agrupa en objetos de estado que reducen considerablemente el costo de los cambios de estado. Hay varios objetos de estado y cada uno está diseñado para inicializar un conjunto de estados para una fase de canalización determinada. Puede crear hasta 4096 de cada tipo de objeto de estado.

estado de Input-Layout

Este grupo de estados (vea D3D10_INPUT_ELEMENT_DESC) determina cómo la fase del ensamblador de entrada lee los datos de los búferes de entrada y los ensambla para que lo use el sombreador de vértices. Esto incluye el estado, como el número de elementos del búfer de entrada y la firma de los datos de entrada. La fase del ensamblador de entrada es una nueva fase de la canalización cuyo trabajo consiste en transmitir primitivos de la memoria a la canalización.

Para crear un objeto input-layout-state, consulte CreateInputLayout.

Estado del rasterizador

Este grupo de estados (consulte D3D10_RASTERIZER_DESC) inicializa la fase de rasterizador. Este objeto incluye el estado, como los modos de relleno o selección, habilitando un rectángulo de tijera para el recorte y estableciendo parámetros de varias muestras. Esta fase rasteriza primitivos en píxeles, realizando operaciones como recorte y asignación de primitivos a la ventanilla.

Para crear un objeto de estado de rasterizador, consulte CreateRasterizerState.

estado de Depth-Stencil

Este grupo de estados (vea D3D10_DEPTH_STENCIL_DESC) inicializa la parte de galería de símbolos de profundidad de la fase de fusión de salida. Más concretamente, este objeto inicializa las pruebas de profundidad y galería de símbolos.

Para crear un objeto depth-stencil-state, consulte CreateDepthStencilState.

Estado de mezcla

Este grupo de estados (vea D3D10_BLEND_DESC) inicializa la parte de mezcla de la fase de fusión de salida.

Para crear un objeto blend-state, consulte CreateBlendState.

Estado del sampler

Este grupo de estados (vea D3D10_SAMPLER_DESC) inicializa un objeto sampler. Las fases del sombreador usan un objeto sampler para filtrar las texturas en la memoria.

Diferencias entre Direct3D 9 y Direct3D 10:

  • En Direct3D 10, el objeto sampler ya no está enlazado a una textura específica, solo describe cómo realizar el filtrado según cualquier recurso adjunto.

 

Para crear un objeto sampler-state, consulte CreateSamplerState.

Consideraciones de rendimiento

El diseño de la API para usar objetos de estado crea varias ventajas de rendimiento. Esto incluye validar el estado en el momento de la creación de objetos, habilitar el almacenamiento en caché de objetos de estado en hardware y reducir considerablemente la cantidad de estado que se pasa durante una llamada API de configuración de estado (pasando un identificador al objeto de estado en lugar del estado).

Para lograr estas mejoras de rendimiento, debe crear los objetos de estado cuando se inicie la aplicación, antes del bucle de representación. Los objetos de estado son inmutables, es decir, una vez creados, no se pueden cambiar. En su lugar, debe destruirlos y volver a crearlos. Para hacer frente a esta restricción, puede crear hasta 4096 de cada tipo de objetos de estado. Por ejemplo, podría crear varios objetos sampler con varias combinaciones de estado de ejemplo. Después, al cambiar el estado del sampler, se llama a la API Set adecuada que pasa un identificador al objeto (en lugar de al estado del sampler). Esto reduce significativamente la cantidad de sobrecarga durante cada fotograma de representación para cambiar el estado, ya que el número de llamadas y la cantidad de datos se reducen considerablemente.

Como alternativa, puede optar por usar el sistema de efectos que administrará automáticamente la creación y destrucción eficaces de objetos de estado para la aplicación.

Características de API (Direct3D 10)