Introdução a buffersIntroduction to buffers

Um recurso de buffer é uma coleção de dados completamente tipados, agrupados em elementos.A buffer resource is a collection of fully typed data, grouped into elements. Os buffers armazenam dados, como as coordenadas de textura em um buffer de vértice, indexa em um buffer de índice, dados de constantes de sombreador em um buffer constante, vetores de posição, vetores normais ou estado do dispositivo.Buffers store data, such as texture coordinates in a vertex buffer, indexes in an index buffer, shader constants data in a constant buffer, position vectors, normal vectors, or device state.

Um elemento de buffer é composto de 1 a 4 componentes.A buffer element is made up of 1 to 4 components. Elementos de buffer podem incluir valores de dados de pacote (como valores de superfície R8G8B8A8), inteiros de 8 bits únicos ou quatro valores de ponto flutuante de 32 bits.Buffer elements can include packed data values (like R8G8B8A8 surface values), single 8-bit integers, or four 32-bit floating point values.

Um buffer é criado como um recurso não estruturado.A buffer is created as an unstructured resource. Como ele não é estruturado, um buffer não pode conter níveis de mipmap, não pode ser filtrado quando lido e não pode conter várias amostras.Because it is unstructured, a buffer cannot contain any mipmap levels, it cannot get filtered when read, and it cannot be multisampled.

Tipos de bufferBuffer Types

Os tipos de recursos de buffer seguintes são compatíveis com Direct3D 11.The following are the buffer resource types supported by Direct3D 11.

Buffer de vérticeVertex Buffer

Um buffer de vértice contém os dados de vértice usados para definir sua geometria.A vertex buffer contains the vertex data used to define your geometry. Dados de vértice incluem coordenadas de posição, dados de cor, dados de coordenadas de textura, dados normais e assim por diante.Vertex data includes position coordinates, color data, texture coordinate data, normal data, and so on.

O exemplo mais simples de um buffer de vértice é aquele que contém apenas dados de posição.The simplest example of a vertex buffer is one that only contains position data. Ele pode ser visualizado como na ilustração a seguir.It can be visualized like the following illustration.

ilustração de um buffer de vértices que contém dados de posição

Com mais frequência, um buffer de vértices contém todos os dados necessários para especificar totalmente vértices 3D.More often, a vertex buffer contains all the data needed to fully specify 3D vertices. Um exemplo disso pode ser um buffer de vértices que contém coordenadas de posição, normais e de textura por vértice.An example of this could be a vertex buffer that contains per-vertex position, normal and texture coordinates. Esses dados geralmente são organizados como conjuntos de elementos por vértice, conforme mostrado na ilustração a seguir.This data is usually organized as sets of per-vertex elements, as shown in the following illustration.

ilustração de um buffer de vértices que contém dados de posição, normais e de textura

Esse buffer de vértice contém dados por vértice; cada vértice armazena três elementos (posição, normal e coordenadas de textura).This vertex buffer contains per-vertex data; each vertex stores three elements (position, normal, and texture coordinates). A posição e a normal são cada frequentemente especificadas usando três flutuações de 32 bits e coordenadas de textura usando duas flutuações de 32 bits.The position and normal are each typically specified using three 32-bit floats and the texture coordinates using two 32-bit floats.

Para acessar os dados em um buffer de vértice, você precisa saber qual vértice acessar, além dos seguintes parâmetros de buffer adicionais:To access data from a vertex buffer you need to know which vertex to access, plus the following additional buffer parameters:

  • Deslocamento -o número de bytes desde o início do buffer para os dados para o primeiro vértice.Offset - the number of bytes from the start of the buffer to the data for the first vertex.
  • BaseVertexLocation -o número de bytes do deslocamento até o primeiro vértice usado pela chamada de desenho apropriada.BaseVertexLocation - the number of bytes from the offset to the first vertex used by the appropriate draw call.

Antes de criar um buffer de vértice, você precisa definir seu layout.Before you create a vertex buffer, you need to define its layout. Depois que o objeto de layout de entrada é criado, você o vincula ao estágio do assembler de entrada (IA).After the input-layout object is created, you bind it to the Input Assembler (IA) stage.

Buffer de índicesIndex Buffer

Buffers de índice contêm deslocamentos de inteiros em buffers de vértice e são usados para renderizar primitivas de forma mais eficiente.Index buffers contain integer offsets into vertex buffers and are used to render primitives more efficiently. Um buffer de índice contém um conjunto sequencial de índices de 16 ou 32 bits; cada índice é usado para identificar um vértice em um buffer de vértices.An index buffer contains a sequential set of 16-bit or 32-bit indices; each index is used to identify a vertex in a vertex buffer. Um buffer de índice pode ser visualizado como na ilustração a seguir.An index buffer can be visualized like the following illustration.

ilustração de um buffer de índice

Os índices sequenciais armazenados em um buffer de índice estão localizados com os seguintes parâmetros:The sequential indices stored in an index buffer are located with the following parameters:

  • Deslocamento - o número de bytes do endereço base do buffer de índice.Offset - the number of bytes from the base address of the index buffer.
  • StartIndexLocation - especifica o primeiro elemento de buffer de índice do endereço básico e do deslocamento.StartIndexLocation - specifies the first index buffer element from the base address and the offset. O local inicial representa o primeiro índice para renderizar.The start location represents the first index to render.
  • IndexCount -o número de índices para renderizar.IndexCount - the number of indices to render.

Início do Buffer de índice = endereço de Base de Buffer de índice + deslocamento (bytes) + StartIndexLocation * ElementSize (bytes).Start of Index Buffer = Index Buffer Base Address + Offset (bytes) + StartIndexLocation * ElementSize (bytes);

Nesse cálculo, ElementSize é o tamanho de cada elemento de buffer de índice, que é dois ou quatro bytes.In this calculation, ElementSize is the size of each index buffer element, which is either two or four bytes.

Buffer de constantesConstant Buffer

Um buffer constante permite que você forneça com eficiência dados constantes do sombreador no pipeline.A constant buffer allows you to efficiently supply shader constants data to the pipeline. Você pode usar um buffer constante para armazenar os resultados do estágio de fluxo de saída.You can use a constant buffer to store the results of the stream-output stage. Conceitualmente, um buffer constante parece muito com um buffer de vértice de elemento único, conforme mostrado na ilustração a seguir.Conceptually, a constant buffer looks just like a single-element vertex buffer, as shown in the following illustration.

ilustração de um buffer constante de sombreador

Cada elemento armazena uma constante de 1 a 4 componentes determinada pelo formato dos dados armazenados.Each element stores a 1-to-4 component constant, determined by the format of the data stored.

Um buffer constante só pode usar um sinalizador de vinculação único, que não pode ser combinado com qualquer outro sinalizador de vinculação.A constant buffer can only use a single bind flag , which cannot be combined with any other bind flag.

Para ler um buffer constante de sombreador de um sombreador, use uma função de carregamento HLSL.To read a shader-constant buffer from a shader, use an HLSL load function. Cada estágio de sombreador permite até 15 buffers constantes de sombreador; cada buffer pode manter até 4.096 constantes.Each shader stage allows up to 15 shader-constant buffers; each buffer can hold up to 4096 constants.

Tópicos relacionadosRelated topics

Buffers de vértice e índiceVertex and index buffers