-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathVertexBuffer.cpp
More file actions
69 lines (53 loc) · 1.91 KB
/
VertexBuffer.cpp
File metadata and controls
69 lines (53 loc) · 1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "VertexBuffer.h"
VertexBuffer::VertexBuffer(Renderer* renderer) : m_renderer(renderer)
{
}
bool VertexBuffer::Load(void* list_vertices, unsigned int vertex_size, unsigned int list_size, const void* shader_byte_code, size_t shader_byte_size)
{
if (m_layout)m_layout->Release();
D3D11_BUFFER_DESC buffDesc = { vertex_size * list_size, D3D11_USAGE_DYNAMIC, D3D11_BIND_VERTEX_BUFFER, D3D11_CPU_ACCESS_WRITE, 0 };
D3D11_MAPPED_SUBRESOURCE buffer_data = {};
this->m_vertex_size = vertex_size;
this->m_vertext_list_size = list_size;
if (!m_buffer)
{
if ((m_renderer->GetDevice()->CreateBuffer(&buffDesc, nullptr, &m_buffer) < 0x0L))
{
return false;
}
}
m_renderer->GetImmediateDeviceContext()->GetDeviceContext()->Map(m_buffer.Get(), NULL, D3D11_MAP_WRITE_DISCARD, NULL, &buffer_data);
memcpy(buffer_data.pData, list_vertices, static_cast<size_t>(vertex_size) * list_size);
m_renderer->GetImmediateDeviceContext()->GetDeviceContext()->Unmap(m_buffer.Get(), NULL);
D3D11_INPUT_ELEMENT_DESC layout[] =
{
{"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0},
{"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0},
{"NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 20, D3D11_INPUT_PER_VERTEX_DATA, 0},
};
unsigned size_layout = (sizeof(*RtlpNumberOf(layout)));
auto hr = m_renderer->GetDevice()->CreateInputLayout(layout, size_layout, shader_byte_code, shader_byte_size, &m_layout);
return hr >= 0x0L ? true : false;
}
void VertexBuffer::Release()
{
VertexBuffer::~VertexBuffer();
delete this;
}
VertexBuffer::~VertexBuffer() = default;
unsigned VertexBuffer::GetVertexListSize() const
{
return (m_vertext_list_size);
}
unsigned int VertexBuffer::GetVertexSize() const
{
return m_vertex_size;
}
ID3D11Buffer* VertexBuffer::GetBuffer() const
{
return m_buffer.Get();
}
ID3D11InputLayout* VertexBuffer::GetLayout() const
{
return m_layout.Get();
}