Cogs.Core
BuffersD3D11.h
1#pragma once
2
3#include "../Base/BuffersCommon.h"
4
5#include <map>
6
7#include "CommonD3D11.h"
8
9namespace Cogs
10{
12 {
14
15 size_t size = 0;
16
17 union
18 {
19 struct
20 {
21 const VertexFormat * vertexFormat;
22 } vertexBuffer;
23
24 struct
25 {
26 uint32_t count;
27 DXGI_FORMAT indexFormat;
28 } indexBuffer;
29
30 struct
31 {
32 uint32_t count;
33 uint32_t stride;
34 } structuredBuffer;
35 };
36
37 uint16_t bindFlags = 0;
38
41
43
44 uint32_t uavCount = 0;
45 int aliasedWidth = 0;
46 int aliasedHeight = 0;
47 bool aliasMapped = false;
48 };
49
51 {
53
54 const VertexFormat * formats[16] = {};
55 size_t numFormats = 0;
56 };
57
59 {
60 BuffersD3D11(struct GraphicsDeviceD3D11 * device);
61
62 void setDevice(const ResourcePointer<ID3D11Device> & device_set)
63 {
64 this->device = device_set;
65 }
66
67 void initialize(struct ContextD3D11 * context_set, struct EffectsD3D11 * effects_set)
68 {
69 this->context = context_set;
70 this->effects = effects_set;
71 }
72
73 void annotate(BufferHandle handle, const StringView& name) override;
74
75 void annotate(VertexBufferHandle handle, const StringView& name) override;
76
77 VertexBufferHandle loadVertexBuffer(const void * vertexData, const size_t count, const VertexFormat & vertexFormat);
78 VertexBufferHandle loadVertexBuffer(const void * vertexData, const size_t count, VertexFormatHandle vertexFormatHandle);
79 void releaseVertexBuffer(VertexBufferHandle vertexBufferHandle);
80
81 IndexBufferHandle loadIndexBuffer(const void * vertexData, const size_t count, const size_t indexSize);
82 void releaseIndexBuffer(IndexBufferHandle indexBufferHandle);
83
84 void retrieveSubBuffer(void * /*data*/, BufferHandle /*source*/, const size_t /*offset*/, const size_t /*size*/) {}
85
86 InputLayoutHandle loadInputLayout(const VertexFormatHandle * vertexFormats, const size_t count, EffectHandle effectHandle) override;
87 void releaseInputLayout(InputLayoutHandle vertexFormatHandle);
88
89 BufferHandle loadBuffer(const void * data, const size_t size, Usage::EUsage usage, uint32_t accessMode, uint32_t bindFlags, uint32_t stride = 0);
90 void releaseBuffer(BufferHandle bufferHandle);
91
92 void * getNativeHandle(BufferHandle bufferHandle) override;
93
94 void releaseResources();
95
97 size_t bufferMemoryConsumption = 0;
98
100
101 private:
103
104 ContextD3D11 * context = nullptr;
105 EffectsD3D11 * effects = nullptr;
106 };
107}
Provides a weakly referenced view over the contents of a string.
Definition: StringView.h:24
Contains all Cogs related functionality.
Definition: FieldSetter.h:23
void releaseInputLayout(InputLayoutHandle vertexFormatHandle)
Releases the input layout with the given inputLayoutHandle.
void annotate(BufferHandle handle, const StringView &name) override
Associate a name with an object for use in graphics debugging.
void * getNativeHandle(BufferHandle bufferHandle) override
Get the device-specific handle (D3D buffer pointer, OpenGL buffer ID etc) associated with the given b...
void releaseBuffer(BufferHandle bufferHandle)
Releases the buffer with the given bufferHandle.
void releaseVertexBuffer(VertexBufferHandle vertexBufferHandle)
Release the vertex buffer with the given handle.
VertexBufferHandle loadVertexBuffer(const void *vertexData, const size_t count, const VertexFormat &vertexFormat)
Loads a new vertex buffer and populates it with the given data.
InputLayoutHandle loadInputLayout(const VertexFormatHandle *vertexFormats, const size_t count, EffectHandle effectHandle) override
Loads a new input layout to map vertex flow between vertex buffers with the given vertexFormats to ef...
void retrieveSubBuffer(void *, BufferHandle, const size_t, const size_t)
Retrieves the contents of a buffer.
Definition: BuffersD3D11.h:84
BufferHandle loadBuffer(const void *data, const size_t size, Usage::EUsage usage, uint32_t accessMode, uint32_t bindFlags, uint32_t stride=0)
Loads a new buffer using the given data to populate the buffer.
IndexBufferHandle loadIndexBuffer(const void *vertexData, const size_t count, const size_t indexSize)
Loads a new index buffer and populates it with the given indexData.
void releaseResources()
Releases all allocated buffer resources.
void releaseIndexBuffer(IndexBufferHandle indexBufferHandle)
Releases the index buffer with the given handle.
EUsage
Usage enumeration.
Definition: Flags.h:24
Vertex format structure used to describe a single vertex for the input assembler.
Definition: VertexFormat.h:60