Compartir a través de


Introducción a los búferes

Un recurso de búfer es una colección de datos totalmente tipados, agrupados en elementos. Los búferes almacenan datos, como coordenadas de textura en un búfer de vértices, índices en un búfer de índices, constantes de sombreador en un búfer de constantes, vectores de posición, vectores normales o estado del dispositivo.

Un elemento de búfer se compone de 1 a 4 componentes. Los elementos de búfer pueden incluir valores de datos empaquetados (como R8G8B8A8 valores de superficie), enteros de 8 bits únicos o cuatro valores de punto flotante de 32 bits.

Se crea un búfer como un recurso no estructurado. Dado que no está estructurado, un búfer no puede contener ningún nivel de mapa mip, no se puede filtrar cuando se lee y no puede ser multimuestreo.

Tipos de búfer

A continuación se muestran los tipos de recursos de búfer admitidos por Direct3D 11.

Búfer de vértices

Un búfer de vértices contiene los datos de vértices usados para definir la geometría. Los datos de vértice incluyen coordenadas de posición, datos de color, datos de coordenadas de textura, datos normales, etc.

El ejemplo más sencillo de un búfer de vértices es uno que solo contiene datos de posición. Se puede visualizar como la siguiente ilustración.

Ilustración de un búfer de vértices que contiene datos de posición

Con más frecuencia, un búfer de vértices contiene todos los datos necesarios para especificar completamente vértices 3D. Un ejemplo de esto podría ser un búfer de vértices que contiene la posición por vértice, las coordenadas normales y de textura. Normalmente, estos datos se organizan como conjuntos de elementos por vértice, como se muestra en la ilustración siguiente.

Ilustración de un búfer de vértices que contiene datos de posición, normal y textura

Este búfer de vértices contiene datos por vértice; cada vértice almacena tres elementos (coordenadas de posición, normal y textura). La posición y la normalidad se especifican normalmente con tres floats de 32 bits y las coordenadas de textura con dos floats de 32 bits.

Para acceder a los datos desde un búfer de vértices, debe saber a qué vértice acceder, además de los siguientes parámetros de búfer adicionales:

  • Desplazamiento: el número de bytes desde el inicio del búfer hasta los datos del primer vértice.
  • BaseVertexLocation: el número de bytes del desplazamiento al primer vértice utilizado por la llamada de dibujo adecuada.

Antes de crear un búfer de vértices, debe definir su diseño. Una vez creado el objeto de diseño de entrada, se enlaza a la fase ensamblador de entrada (IA).

Búfer de índice

Los búferes de índice contienen desplazamientos enteros en búferes de vértices y se usan para representar primitivos de forma más eficaz. Un búfer de índice contiene un conjunto secuencial de índices de 16 o 32 bits; cada índice se usa para identificar un vértice en un búfer de vértices. Un búfer de índice se puede visualizar como la ilustración siguiente.

Ilustración de un búfer de índice

Los índices secuenciales almacenados en un búfer de índice se encuentran con los parámetros siguientes:

  • Desplazamiento: el número de bytes de la dirección base del búfer de índice.
  • StartIndexLocation: especifica el primer elemento de búfer de índice de la dirección base y el desplazamiento. La ubicación inicial representa el primer índice que se va a representar.
  • IndexCount: el número de índices que se van a representar.

Inicio del búfer de índice = Dirección base del búfer de índice + Desplazamiento (bytes) + StartIndexLocation * ElementSize (bytes);

En este cálculo, ElementSize es el tamaño de cada elemento de búfer de índice, que es de dos o cuatro bytes.

Búfer de constantes

Un búfer de constantes permite proporcionar de forma eficaz datos de constantes de sombreador a la canalización. Puede usar un búfer de constantes para almacenar los resultados de la fase de salida del flujo. Conceptualmente, un búfer de constantes se parece a un búfer de vértices de un solo elemento, como se muestra en la ilustración siguiente.

Ilustración de un búfer de constantes de sombreador

Cada elemento almacena una constante de componente de 1 a 4, determinada por el formato de los datos almacenados.

Un búfer de constantes solo puede usar una sola marca de enlace , que no se puede combinar con ninguna otra marca de enlace.

Para leer un búfer de constantes de sombreador desde un sombreador, use una función de carga HLSL. Cada fase del sombreador permite hasta 15 búferes de constantes de sombreador; cada búfer puede contener hasta 4096 constantes.

Búferes de vértices e índices