Introduzione ai bufferIntroduction to buffers

Una risorsa del buffer è una raccolta di dati digitati, raggruppati in elementi.A buffer resource is a collection of fully typed data, grouped into elements. I buffer archiviano dati, ad esempio le coordinate di trama in un buffer dei vertici, gli indici in un index buffer, i dati delle costanti di shader in un buffer costante, vettori di posizione, vettori normali o stato del 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.

Un elemento di buffer comprende da 1 a 4 componenti.A buffer element is made up of 1 to 4 components. Gli elementi del buffer possono includere valori di dati compressi (come valori di superficie R8G8B8A8), integer singoli a 8 bit o quattro valori a virgola mobile a 32 bit.Buffer elements can include packed data values (like R8G8B8A8 surface values), single 8-bit integers, or four 32-bit floating point values.

Un buffer viene creato come risorsa non strutturata.A buffer is created as an unstructured resource. Poiché non è strutturato, un buffer non può contenere alcun livello mipmap, non può essere filtrato durante la lettura e non può essere sottoposto a multicampionamento.Because it is unstructured, a buffer cannot contain any mipmap levels, it cannot get filtered when read, and it cannot be multisampled.

Tipi di bufferBuffer Types

Di seguito sono riportati i tipi di risorse di buffer supportati da Direct3D 11.The following are the buffer resource types supported by Direct3D 11.

Buffer verticiVertex Buffer

Un buffer dei vertici contiene i dati dei vertici usati per definire la geometria.A vertex buffer contains the vertex data used to define your geometry. I dati dei vertici includono coordinate di posizione, dati di colore, dati sulle coordinate di trama, dati normali e così via.Vertex data includes position coordinates, color data, texture coordinate data, normal data, and so on.

L'esempio più semplice di un buffer dei vertici contiene solo dati di posizione.The simplest example of a vertex buffer is one that only contains position data. Esso può essere rappresentato come nella figura seguente.It can be visualized like the following illustration.

illustrazione di un buffer dei vertici che contiene dati di posizione

Un buffer dei vertici contiene più spesso tutti i dati necessari per specificare completamente vertici 3D.More often, a vertex buffer contains all the data needed to fully specify 3D vertices. Un esempio potrebbe essere rappresentato da un buffer dei vertici che contiene la posizione, la normale e le coordinate di trama di ogni vertice.An example of this could be a vertex buffer that contains per-vertex position, normal and texture coordinates. Questi dati sono organizzati in genere come set di elementi per ogni vertice, come illustrato nella figura seguente.This data is usually organized as sets of per-vertex elements, as shown in the following illustration.

illustrazione di un buffer dei vertici che contiene dati di posizione, normale e trama

Questo buffer dei vertici contiene i dati di ogni vertice, che archivia tre elementi (posizione, normale e coordinate di trama).This vertex buffer contains per-vertex data; each vertex stores three elements (position, normal, and texture coordinates). La posizione e la normale sono in genere specificate utilizzando tre valori float a 32 bit mentre le coordinate di trama utilizzano due valori float a 32.The position and normal are each typically specified using three 32-bit floats and the texture coordinates using two 32-bit floats.

Per accedere ai dati da un buffer dei vertici, è necessario conoscere il vertice a cui accedere, oltre ai seguenti parametri di buffer aggiuntivi:To access data from a vertex buffer you need to know which vertex to access, plus the following additional buffer parameters:

  • Offset: il numero di byte dall'inizio del buffer ai dati del primo vertice.Offset - the number of bytes from the start of the buffer to the data for the first vertex.
  • BaseVertexLocation: il numero di byte dall'offset al primo vertice utilizzato dalla chiamata di disegno appropriata.BaseVertexLocation - the number of bytes from the offset to the first vertex used by the appropriate draw call.

Prima di creare un buffer dei vertici, è necessario definirne il layout.Before you create a vertex buffer, you need to define its layout. Dopo aver creato l'oggetto del layout di input, eseguirne il binding alla fase dell'assembler di input.After the input-layout object is created, you bind it to the Input Assembler (IA) stage.

Buffer indiceIndex Buffer

Gli index buffer contengono offset di integer in buffer dei vertici e vengono utilizzati per eseguire il rendering delle primitive in modo più efficiente.Index buffers contain integer offsets into vertex buffers and are used to render primitives more efficiently. Un buffer indice contiene un insieme in sequenza di indici a 16 bit o a 32 bit; ogni indice viene usato per identificare un vertice in un buffer vertice.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. Un index buffer può essere rappresentato come nella figura seguente.An index buffer can be visualized like the following illustration.

illustrazione di un index buffer

Gli indici sequenziali archiviati in un index buffer si trovano nei seguenti parametri:The sequential indices stored in an index buffer are located with the following parameters:

  • Offset: il numero di byte dell'indirizzo di base dell'index buffer.Offset - the number of bytes from the base address of the index buffer.
  • StartIndexLocation: specifica il primo elemento dell'index buffer dell'indirizzo di base e dell'offset.StartIndexLocation - specifies the first index buffer element from the base address and the offset. La posizione iniziale rappresenta il primo indice per il rendering.The start location represents the first index to render.
  • IndexCount: il numero di indici per il rendering.IndexCount - the number of indices to render.

Inizio del Buffer indice = indirizzo di Base di Index Buffer + Offset (byte) + StartIndexLocation * ElementSize (byte).Start of Index Buffer = Index Buffer Base Address + Offset (bytes) + StartIndexLocation * ElementSize (bytes);

In questo calcolo, ElementSize è la dimensione di ogni elemento dell'index buffer, di due o quattro byte.In this calculation, ElementSize is the size of each index buffer element, which is either two or four bytes.

Buffer costantiConstant Buffer

Un buffer costante consente di fornire in modo efficiente i dati delle costanti di shader alla pipeline.A constant buffer allows you to efficiently supply shader constants data to the pipeline. È possibile utilizzare un buffer costante per archiviare i risultati della fase di output del flusso.You can use a constant buffer to store the results of the stream-output stage. A livello concettuale, un buffer costante ha un aspetto simile a un buffer dei vertici con un solo elemento, come illustrato nella figura seguente.Conceptually, a constant buffer looks just like a single-element vertex buffer, as shown in the following illustration.

illustrazione di un buffer delle costanti di shader

Ogni elemento archivia una costante a 1 - 4 componenti, determinati dal formato dei dati archiviati.Each element stores a 1-to-4 component constant, determined by the format of the data stored.

Un buffer costante può utilizzare un solo flag di associazione, che non può essere combinato ad altri flag di associazione.A constant buffer can only use a single bind flag , which cannot be combined with any other bind flag.

Per leggere un buffer delle costanti di shader da uno shader, utilizza una funzione di caricamento HLSL.To read a shader-constant buffer from a shader, use an HLSL load function. Ogni fase dello shader consente un massimo di 15 buffer delle costanti di shader; ogni buffer può contenere fino a 4.096 costanti.Each shader stage allows up to 15 shader-constant buffers; each buffer can hold up to 4096 constants.

Argomenti correlatiRelated topics

Buffer dei vertici e index bufferVertex and index buffers