|
Wildvine Engine
Referencia Doxygen del codigo propio de Wildvine Engine.
|
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. | |
Esta clase administra la vida de un único buffer de D3D11 y su uso en etapa de render. Soporta:
MeshComponent.UpdateSubresource).ID3D11Buffer a la vez; el tipo efectivo se deduce de m_bindFlag.
|
default |
|
default |
No libera automáticamente; llamar a destroy() para liberar el recurso COM.
| 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().
| device | Dispositivo con el que se creará el recurso. |
| desc | Descriptor del buffer (uso, bind flags, tamaño, etc.). |
| initData | Datos iniciales (puede ser nullptr para buffer sin inicializar). |
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.
| void Buffer::destroy | ( | ) |
Idempotente.
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().
| 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.
| device | Dispositivo con el que se creará el recurso. |
| mesh | Fuente de datos (vértices/índices) para poblar el buffer. |
| bindFlag | Bandera de enlace (p. ej. D3D11_BIND_VERTEX_BUFFER o D3D11_BIND_INDEX_BUFFER). |
S_OK si la creación fue exitosa; código HRESULT en caso contrario.S_OK, m_buffer != nullptr y m_bindFlag == bindFlag. 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().
| 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).
| device | Dispositivo con el que se creará el recurso. |
| ByteWidth | Tamaño del buffer en bytes (alinear a 16 para constantes). |
S_OK si la creación fue exitosa; código HRESULT en caso contrario.S_OK, m_buffer != nullptr y m_bindFlag == D3D11_BIND_CONSTANT_BUFFER. Definición en la lÃnea 55 del archivo Buffer.cpp.
Hace referencia a createBuffer(), ERROR, m_bindFlag, Device::m_device y m_stride.
| 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.| deviceContext | Contexto donde se enlazará el buffer. |
| StartSlot | Primer slot de enlace (IA o VS/PS según tipo). |
| NumBuffers | Número de buffers a enlazar (típicamente 1 para esta clase). |
| setPixelShader | Si es true y el buffer es de constantes, también se enlaza a PS (además de VS). |
| format | Formato del índice (DXGI_FORMAT_R16_UINT o DXGI_FORMAT_R32_UINT) cuando es Index Buffer. |
m_buffer debe estar creado y m_bindFlag configurado correctamente. 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().
| 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.
| deviceContext | Contexto donde se realizará la actualización. |
| pDstResource | Recurso destino (típicamente m_buffer). Se permite pasar otro recurso compatible. |
| DstSubresource | Índice de subrecurso destino (normalmente 0 para buffers). |
| pDstBox | Región destino (puede ser nullptr para sobrescribir completo). |
| pSrcData | Puntero a los datos de origen. |
| SrcRowPitch | Paso por fila (no aplica a buffers; se ignora por D3D11 para buffers). |
| SrcDepthPitch | Paso por profundidad (no aplica a buffers; se ignora por D3D11 para buffers). |
pDstResource debe ser un buffer válido creado en este dispositivo. 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().
|
private |
| ID3D11Buffer* Buffer::m_buffer = nullptr |
|
private |
|
private |