SleakEngine
0.1.0
C++23 multi-backend game engine
Toggle main menu visibility
Loading...
Searching...
No Matches
DirectX11Buffer.hpp
Go to the documentation of this file.
1
#ifndef DIRECTX11BUFFER_HPP_
2
#define DIRECTX11BUFFER_HPP_
3
4
#include "
../Common/BufferBase.hpp
"
5
#include <d3d11.h>
6
#include <dxgi.h>
7
#include <memory>
8
#include <wrl/client.h>
9
10
namespace
Sleak
{
11
namespace
RenderEngine
{
12
13
/// D3D11 buffer wrapper covering vertex/index/constant usages and custom configurations.
14
class
DirectX11Buffer
:
public
BufferBase
{
15
public
:
16
// Constructor for common buffer types
17
DirectX11Buffer
(ID3D11Device* device,
size_t
size,
BufferType
type);
18
19
// Constructor for custom buffer configuration
20
DirectX11Buffer
(ID3D11Device* device,
size_t
size, D3D11_USAGE usage,
21
UINT bindFlags, UINT cpuAccessFlags);
22
23
// Prevent copying
24
DirectX11Buffer
(
const
DirectX11Buffer
&) =
delete
;
25
DirectX11Buffer
&
operator=
(
const
DirectX11Buffer
&) =
delete
;
26
27
// Allow moving
28
DirectX11Buffer
(
DirectX11Buffer
&&) noexcept;
29
DirectX11Buffer
& operator=(
DirectX11Buffer
&&) noexcept;
30
31
~
DirectX11Buffer
() override;
32
33
/// Creates the D3D11 buffer resource and uploads initial data, if any.
34
bool
Initialize
(
void
*
Data
) override;
35
void
Update
() override;
36
void
Cleanup
() override;
37
38
/// Maps the buffer for CPU writes (dynamic usage only).
39
bool
Map
() override;
40
void
Unmap
() override;
41
/// Overwrites buffer contents via UpdateSubresource/Map depending on usage.
42
void
Update
(
void
* data,
size_t
size) override;
43
44
/// Creates the buffer sized and pre-populated from a raw payload.
45
bool
Initialize
(const
void
* data, uint16_t size);
46
47
void
*
GetData
() override;
48
49
// Getter for the underlying D3D buffer
50
ID3D11Buffer*
GetD3DBuffer
()
const
{
return
m_buffer.Get(); }
51
52
// Additional utility methods
53
bool
IsValid
()
const
{
return
m_buffer !=
nullptr
; }
54
D3D11_USAGE
GetUsage
()
const
{
return
m_usage; }
55
UINT
GetBindFlags
()
const
{
return
m_bindFlags; }
56
UINT
GetCPUAccessFlags
()
const
{
return
m_cpuAccessFlags; }
57
58
private
:
59
// Helper method to set up buffer description
60
D3D11_BUFFER_DESC CreateBufferDesc()
const
;
61
62
// Convert BufferType to DirectX configuration
63
void
ConfigureFromBufferType(
BufferType
type);
64
65
// Smart pointers for proper resource management
66
Microsoft::WRL::ComPtr<ID3D11Device> m_device;
67
Microsoft::WRL::ComPtr<ID3D11DeviceContext> m_deviceContext;
68
Microsoft::WRL::ComPtr<ID3D11Buffer> m_buffer;
69
70
D3D11_USAGE m_usage = D3D11_USAGE_DEFAULT;
71
UINT m_bindFlags = 0;
72
UINT m_cpuAccessFlags = 0;
73
D3D11_MAPPED_SUBRESOURCE m_mappedResource = {};
74
};
75
76
}
// namespace RenderEngine
77
}
// namespace Sleak
78
79
#endif
// DIRECTX11BUFFER_HPP_
BufferBase.hpp
Sleak::RenderEngine::BufferBase
Backend-agnostic GPU buffer: vertex, index, constant, or resource view target.
Definition
BufferBase.hpp:16
Sleak::RenderEngine::BufferBase::Data
void * Data
Definition
BufferBase.hpp:60
Sleak::RenderEngine::DirectX11Buffer::GetCPUAccessFlags
UINT GetCPUAccessFlags() const
Definition
DirectX11Buffer.hpp:56
Sleak::RenderEngine::DirectX11Buffer::GetData
void * GetData() override
Returns CPU-visible data directly for readable buffers, or round-trips GPU-only buffers through a sta...
Definition
DirectX11Buffer.cpp:228
Sleak::RenderEngine::DirectX11Buffer::IsValid
bool IsValid() const
Definition
DirectX11Buffer.hpp:53
Sleak::RenderEngine::DirectX11Buffer::DirectX11Buffer
DirectX11Buffer(const DirectX11Buffer &)=delete
Sleak::RenderEngine::DirectX11Buffer::Map
bool Map() override
Maps the buffer for CPU writes (dynamic usage only).
Definition
DirectX11Buffer.cpp:173
Sleak::RenderEngine::DirectX11Buffer::Unmap
void Unmap() override
Definition
DirectX11Buffer.cpp:194
Sleak::RenderEngine::DirectX11Buffer::operator=
DirectX11Buffer & operator=(const DirectX11Buffer &)=delete
Sleak::RenderEngine::DirectX11Buffer::DirectX11Buffer
DirectX11Buffer(ID3D11Device *device, size_t size, BufferType type)
Derives usage/bind/CPU-access flags from the buffer type via ConfigureFromBufferType.
Definition
DirectX11Buffer.cpp:11
Sleak::RenderEngine::DirectX11Buffer::Initialize
bool Initialize(void *Data) override
Creates the D3D11 buffer resource and uploads initial data, if any.
Definition
DirectX11Buffer.cpp:113
Sleak::RenderEngine::DirectX11Buffer::Cleanup
void Cleanup() override
Definition
DirectX11Buffer.cpp:160
Sleak::RenderEngine::DirectX11Buffer::GetUsage
D3D11_USAGE GetUsage() const
Definition
DirectX11Buffer.hpp:54
Sleak::RenderEngine::DirectX11Buffer::Update
void Update() override
Definition
DirectX11Buffer.cpp:140
Sleak::RenderEngine::DirectX11Buffer::GetBindFlags
UINT GetBindFlags() const
Definition
DirectX11Buffer.hpp:55
Sleak::RenderEngine::DirectX11Buffer::GetD3DBuffer
ID3D11Buffer * GetD3DBuffer() const
Definition
DirectX11Buffer.hpp:50
Sleak::RenderEngine
Backend-facing rendering layer shared by the four graphics backends.
Definition
Application.hpp:60
Sleak::RenderEngine::BufferType
BufferType
GPU buffer usage kind, drives backend binding flags and layout.
Definition
BufferBase.hpp:13
Sleak
Root namespace for everything the engine exposes.
Definition
Camera.hpp:10
include
private
Graphics
DirectX11
DirectX11Buffer.hpp
Generated on
for SleakEngine by
1.18.0