13 ERROR(
"ShaderProgram",
"init",
"Device is null.");
16 if ((bindFlag & D3D11_BIND_VERTEX_BUFFER) && mesh.
m_vertex.empty() && mesh.
m_skyVertex.empty()) {
17 ERROR(
"Buffer",
"init",
"Vertex buffer is empty");
20 if ((bindFlag & D3D11_BIND_INDEX_BUFFER) && mesh.
m_index.empty()) {
21 ERROR(
"Buffer",
"init",
"Index buffer is empty");
25 D3D11_BUFFER_DESC desc = {};
26 D3D11_SUBRESOURCE_DATA data = {};
28 desc.Usage = D3D11_USAGE_DEFAULT;
29 desc.CPUAccessFlags = 0;
31 desc.BindFlags = (D3D11_BIND_FLAG)bindFlag;
33 if (bindFlag & D3D11_BIND_VERTEX_BUFFER) {
45 else if (bindFlag & D3D11_BIND_INDEX_BUFFER) {
47 desc.ByteWidth =
m_stride *
static_cast<unsigned int>(mesh.
m_index.size());
48 desc.BindFlags = (D3D11_BIND_FLAG)bindFlag;
49 data.pSysMem = mesh.
m_index.data();
57 ERROR(
"ShaderProgram",
"init",
"Device is null.");
61 ERROR(
"Buffer",
"init",
"ByteWidth is zero");
66 D3D11_BUFFER_DESC desc = {};
67 desc.Usage = D3D11_USAGE_DEFAULT;
68 desc.ByteWidth = ByteWidth;
69 desc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
77 ID3D11Resource* pDstResource,
78 unsigned int DstSubresource,
79 const D3D11_BOX* pDstBox,
81 unsigned int SrcRowPitch,
82 unsigned int SrcDepthPitch) {
84 ERROR(
"ShaderProgram",
"update",
"m_buffer is null.");
88 ERROR(
"ShaderProgram",
"update",
"pSrcData is null.");
103 unsigned int StartSlot,
104 unsigned int NumBuffers,
106 DXGI_FORMAT format) {
108 ERROR(
"RenderTargetView",
"render",
"DeviceContext is nullptr.");
112 ERROR(
"Buffer",
"render",
"m_buffer is null.");
117 case D3D11_BIND_VERTEX_BUFFER:
120 case D3D11_BIND_CONSTANT_BUFFER:
122 if (setPixelShader) {
126 case D3D11_BIND_INDEX_BUFFER:
130 ERROR(
"Buffer",
"render",
"Unsupported BindFlag");
142 D3D11_BUFFER_DESC& desc,
143 D3D11_SUBRESOURCE_DATA* initData) {
145 ERROR(
"Buffer",
"createBuffer",
"Device is nullptr");
151 ERROR(
"Buffer",
"createBuffer",
"Failed to create buffer");
Declara la API de Buffer dentro del subsistema Core.
Declara la API de DeviceContext dentro del subsistema Core.
Declara la API de Device dentro del subsistema Core.
#define ERROR(classObj, method, errorMSG)
unsigned int m_offset
Desplazamiento inicial en bytes (para Vertex Buffer).
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).
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.
HRESULT init(Device &device, const MeshComponent &mesh, unsigned int bindFlag)
Inicializa el buffer como Vertex o Index Buffer usando un MeshComponent.
unsigned int m_bindFlag
Bandera de enlace (D3D11_BIND_* ) que define el rol del 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.
unsigned int m_stride
Recurso COM de D3D11 administrado por la clase.
void destroy()
Libera el ID3D11Buffer y resetea los metadatos internos.
ID3D11DeviceContext * m_deviceContext
Puntero al contexto inmediato de Direct3D 11.
Encapsula un ID3D11Device y facilita la creación de recursos gráficos en Direct3D 11.
HRESULT CreateBuffer(const D3D11_BUFFER_DESC *pDesc, const D3D11_SUBRESOURCE_DATA *pInitialData, ID3D11Buffer **ppBuffer)
Crea un Buffer genérico (vertex, index, constant, etc.).
ID3D11Device * m_device
Puntero al dispositivo Direct3D 11.
Componente ECS que almacena la información de geometría (malla) de un actor.
std::vector< unsigned int > m_index
Lista de índices que definen las primitivas de la malla.
std::vector< SimpleVertex > m_vertex
Lista de vértices de la malla.
std::vector< SkyboxVertex > m_skyVertex