SleakEngine 1.0.0
C++23 multi-backend game engine
Loading...
Searching...
No Matches
DirectX11Buffer.hpp
Go to the documentation of this file.
1#ifndef DIRECTX11BUFFER_HPP_
2#define DIRECTX11BUFFER_HPP_
3
5#include <d3d11.h>
6#include <dxgi.h>
7#include <memory>
8#include <wrl/client.h>
9
10namespace Sleak {
11namespace RenderEngine {
12
13/// D3D11 buffer wrapper covering vertex/index/constant usages and custom configurations.
15public:
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
26
27 // Allow moving
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
58private:
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_
Backend-agnostic GPU buffer: vertex, index, constant, or resource view target.
void * GetData() override
Returns CPU-visible data directly for readable buffers, or round-trips GPU-only buffers through a sta...
DirectX11Buffer(const DirectX11Buffer &)=delete
bool Map() override
Maps the buffer for CPU writes (dynamic usage only).
DirectX11Buffer & operator=(const DirectX11Buffer &)=delete
DirectX11Buffer(ID3D11Device *device, size_t size, BufferType type)
Derives usage/bind/CPU-access flags from the buffer type via ConfigureFromBufferType.
bool Initialize(void *Data) override
Creates the D3D11 buffer resource and uploads initial data, if any.
Backend-facing rendering layer shared by the four graphics backends.
BufferType
GPU buffer usage kind, drives backend binding flags and layout.
Root namespace for everything the engine exposes.
Definition Camera.hpp:10