Wildvine Engine
Referencia Doxygen del codigo propio de Wildvine Engine.
Cargando...
Buscando...
Nada coincide
Referencia de la clase Buffer

Encapsula un ID3D11Buffer para vértices, índices o constantes, incluyendo creación, actualización y enlace. Más...

#include <Buffer.h>

Métodos públicos

 Buffer ()=default
 Constructor por defecto (no crea recursos).
 
HRESULT createBuffer (Device &device, D3D11_BUFFER_DESC &desc, D3D11_SUBRESOURCE_DATA *initData)
 Crea un buffer genérico con una D3D11_BUFFER_DESC y datos iniciales opcionales.
 
void destroy ()
 Libera el ID3D11Buffer y resetea los metadatos internos.
 
HRESULT init (Device &device, const MeshComponent &mesh, unsigned int bindFlag)
 Inicializa el buffer como Vertex o Index Buffer usando un MeshComponent.
 
HRESULT init (Device &device, unsigned int ByteWidth)
 Inicializa el buffer como Constant Buffer.
 
void render (DeviceContext &deviceContext, unsigned int StartSlot, unsigned int NumBuffers, bool setPixelShader=false, DXGI_FORMAT format=DXGI_FORMAT_UNKNOWN)
 Enlaza el buffer a la etapa correspondiente del pipeline para el frame de render.
 
void update (DeviceContext &deviceContext, ID3D11Resource *pDstResource, unsigned int DstSubresource, const D3D11_BOX *pDstBox, const void *pSrcData, unsigned int SrcRowPitch, unsigned int SrcDepthPitch)
 Actualiza el contenido del buffer (típicamente mediante UpdateSubresource).
 
 ~Buffer ()=default
 Destructor por defecto.
 

Atributos públicos

ID3D11Buffer * m_buffer = nullptr
 

Atributos privados

unsigned int m_bindFlag = 0
 Bandera de enlace (D3D11_BIND_* ) que define el rol del buffer.
 
unsigned int m_offset = 0
 Desplazamiento inicial en bytes (para Vertex Buffer).
 
unsigned int m_stride = 0
 Recurso COM de D3D11 administrado por la clase.
 

Descripción detallada

Esta clase administra la vida de un único buffer de D3D11 y su uso en etapa de render. Soporta:

  • Creación como Vertex/Index buffer a partir de un MeshComponent.
  • Creación como Constant buffer a partir de un tamaño (ByteWidth).
  • Actualización de datos (p. ej. UpdateSubresource).
  • Enlace del buffer a la etapa correspondiente del pipeline.
Nota
La instancia gestiona un solo ID3D11Buffer a la vez; el tipo efectivo se deduce de m_bindFlag.
Atención
No copia el recurso; si se añade semántica de copia, manejar correctamente referencias COM.

Definición en la línea 27 del archivo Buffer.h.

Documentación de constructores y destructores

◆ Buffer()

Buffer::Buffer ( )
default

◆ ~Buffer()

Buffer::~Buffer ( )
default

No libera automáticamente; llamar a destroy() para liberar el recurso COM.

Documentación de funciones miembro

◆ createBuffer()

HRESULT Buffer::createBuffer ( Device device,
D3D11_BUFFER_DESC &  desc,
D3D11_SUBRESOURCE_DATA *  initData 
)

Método de ayuda para factorizar la creación. Normalmente invocado por init().

Parámetros
deviceDispositivo con el que se creará el recurso.
descDescriptor del buffer (uso, bind flags, tamaño, etc.).
initDataDatos iniciales (puede ser nullptr para buffer sin inicializar).
Devuelve
S_OK si la creación fue exitosa; código HRESULT en caso contrario.

Definición en la línea 141 del archivo Buffer.cpp.

Hace referencia a Device::CreateBuffer(), ERROR, m_buffer y Device::m_device.

Referenciado por init() y init().

◆ destroy()

void Buffer::destroy ( )

Idempotente.

Postcondición
m_buffer == nullptr, m_stride == 0, m_offset == 0 y m_bindFlag == 0.

Definición en la línea 136 del archivo Buffer.cpp.

Hace referencia a m_buffer y SAFE_RELEASE.

Referenciado por Actor::destroy() y ForwardRenderer::destroy().

◆ init() [1/2]

HRESULT Buffer::init ( Device device,
const MeshComponent mesh,
unsigned int  bindFlag 
)

Crea internamente un ID3D11Buffer con los datos del mesh (vértices/índices) según bindFlag. Debe usarse D3D11_BIND_VERTEX_BUFFER o D3D11_BIND_INDEX_BUFFER.

Parámetros
deviceDispositivo con el que se creará el recurso.
meshFuente de datos (vértices/índices) para poblar el buffer.
bindFlagBandera de enlace (p. ej. D3D11_BIND_VERTEX_BUFFER o D3D11_BIND_INDEX_BUFFER).
Devuelve
S_OK si la creación fue exitosa; código HRESULT en caso contrario.
Postcondición
Si retorna S_OK, m_buffer != nullptr y m_bindFlag == bindFlag.
Ver también
createBuffer(), render()

Definición en la línea 11 del archivo Buffer.cpp.

Hace referencia a createBuffer(), ERROR, m_bindFlag, Device::m_device, MeshComponent::m_index, MeshComponent::m_skyVertex, m_stride y MeshComponent::m_vertex.

Referenciado por Actor::Actor(), BaseApp::init(), ForwardRenderer::init(), Skybox::init() y Actor::setMesh().

◆ init() [2/2]

HRESULT Buffer::init ( Device device,
unsigned int  ByteWidth 
)

Crea un ID3D11Buffer con D3D11_BIND_CONSTANT_BUFFER y tamaño ByteWidth (múltiplo de 16 bytes recomendado).

Parámetros
deviceDispositivo con el que se creará el recurso.
ByteWidthTamaño del buffer en bytes (alinear a 16 para constantes).
Devuelve
S_OK si la creación fue exitosa; código HRESULT en caso contrario.
Postcondición
Si retorna S_OK, m_buffer != nullptr y m_bindFlag == D3D11_BIND_CONSTANT_BUFFER.
Ver también
update(), render()

Definición en la línea 55 del archivo Buffer.cpp.

Hace referencia a createBuffer(), ERROR, m_bindFlag, Device::m_device y m_stride.

◆ render()

void Buffer::render ( DeviceContext deviceContext,
unsigned int  StartSlot,
unsigned int  NumBuffers,
bool  setPixelShader = false,
DXGI_FORMAT  format = DXGI_FORMAT_UNKNOWN 
)

El comportamiento depende de m_bindFlag:

  • D3D11_BIND_VERTEX_BUFFER: Llama a IASetVertexBuffers con StartSlot y NumBuffers (stride/offset internos).
  • D3D11_BIND_INDEX_BUFFER: Llama a IASetIndexBuffer con format.
  • D3D11_BIND_CONSTANT_BUFFER: Enlaza a VS/PS según setPixelShader, usando StartSlot y NumBuffers.
Parámetros
deviceContextContexto donde se enlazará el buffer.
StartSlotPrimer slot de enlace (IA o VS/PS según tipo).
NumBuffersNúmero de buffers a enlazar (típicamente 1 para esta clase).
setPixelShaderSi es true y el buffer es de constantes, también se enlaza a PS (además de VS).
formatFormato del índice (DXGI_FORMAT_R16_UINT o DXGI_FORMAT_R32_UINT) cuando es Index Buffer.
Precondición
m_buffer debe estar creado y m_bindFlag configurado correctamente.
Ver también
init()

Definición en la línea 102 del archivo Buffer.cpp.

Hace referencia a ERROR, m_bindFlag, m_buffer, DeviceContext::m_deviceContext, m_offset y m_stride.

Referenciado por Skybox::render(), Actor::render(), ForwardRenderer::renderObject(), ForwardRenderer::renderOpaquePass(), ForwardRenderer::renderShadowObject(), ForwardRenderer::renderShadowPass() y ForwardRenderer::renderTransparentPass().

◆ update()

void Buffer::update ( DeviceContext deviceContext,
ID3D11Resource *  pDstResource,
unsigned int  DstSubresource,
const D3D11_BOX *  pDstBox,
const void *  pSrcData,
unsigned int  SrcRowPitch,
unsigned int  SrcDepthPitch 
)

Útil para escribir datos de constantes por cuadro, o para subir datos de vértices/índices si corresponde.

Parámetros
deviceContextContexto donde se realizará la actualización.
pDstResourceRecurso destino (típicamente m_buffer). Se permite pasar otro recurso compatible.
DstSubresourceÍndice de subrecurso destino (normalmente 0 para buffers).
pDstBoxRegión destino (puede ser nullptr para sobrescribir completo).
pSrcDataPuntero a los datos de origen.
SrcRowPitchPaso por fila (no aplica a buffers; se ignora por D3D11 para buffers).
SrcDepthPitchPaso por profundidad (no aplica a buffers; se ignora por D3D11 para buffers).
Precondición
pDstResource debe ser un buffer válido creado en este dispositivo.
Nota
Para constantes dinámicas alternativamente podría usarse Map/Unmap con D3D11_USAGE_DYNAMIC.

Definición en la línea 76 del archivo Buffer.cpp.

Hace referencia a ERROR, m_buffer y DeviceContext::m_deviceContext.

Referenciado por ForwardRenderer::renderObject(), ForwardRenderer::renderShadowObject(), Skybox::update(), Actor::update() y ForwardRenderer::updatePerFrame().

Documentación de datos miembro

◆ m_bindFlag

unsigned int Buffer::m_bindFlag = 0
private

Definición en la línea 169 del archivo Buffer.h.

Referenciado por init(), init() y render().

◆ m_buffer

ID3D11Buffer* Buffer::m_buffer = nullptr

Definición en la línea 148 del archivo Buffer.h.

Referenciado por createBuffer(), destroy(), render() y update().

◆ m_offset

unsigned int Buffer::m_offset = 0
private

Usado en IASetVertexBuffers. Cero cuando no aplica.

Definición en la línea 164 del archivo Buffer.h.

Referenciado por render().

◆ m_stride

unsigned int Buffer::m_stride = 0
private

Tamaño de un elemento en bytes (para Vertex Buffer).

Usado en IASetVertexBuffers. Cero cuando no aplica.

Definición en la línea 158 del archivo Buffer.h.

Referenciado por init(), init() y render().


La documentación de esta clase está generada de los siguientes archivos: