Cogs.Core
BuffersWebGPU.h
1#pragma once
2
3#include "CommonWebGPU.h"
4
5#include "../Common.h"
6#include "../Flags.h"
7#include "../Base/BuffersCommon.h"
8#include "../VertexFormat.h"
9
10#include "../Base/ResourceMap.h"
11
12namespace Cogs {
13 class GraphicsDeviceWebGPU;
14
15 struct BufferWebGPU {
16 WGPUBuffer buffer;
17 size_t size;
18 void *map;
19 bool is_read_buffer;
20
21 uint32_t accessMode;
22 uint32_t bindFlags;
23
24 uint32_t alias_idx = 0;
25 std::vector<WGPUBuffer> alias;
26
27 void CreateInstance(GraphicsDeviceWebGPU *graphicsDevice);
28 void NextInstance(GraphicsDeviceWebGPU *graphicsDevice);
29 void ResetInstance();
30 };
31
33 std::vector<WGPUVertexAttribute> vertex_attributes;
34 std::vector<WGPUVertexBufferLayout> vertex_buffer_layout;
35 };
36
38 public:
39 void initialize(GraphicsDeviceWebGPU *device);
40 void resetInstances();
41
42 virtual VertexBufferHandle loadVertexBuffer(const void* /*vertexData*/, const size_t /*count*/, const VertexFormat& vertexFormat) override;
43
44 virtual VertexBufferHandle loadVertexBuffer(const void* /*vertexData*/, const size_t /*count*/, VertexFormatHandle /*vertexFormatHandle*/) override;
45
46 virtual void releaseVertexBuffer(VertexBufferHandle vertexBufferHandle) override;
47
48 virtual IndexBufferHandle loadIndexBuffer(const void* /*indexData*/, const size_t /*count*/, const size_t /*indexSize*/) override;
49
50 virtual void releaseIndexBuffer(IndexBufferHandle indexBufferHandle) override;
51
52 virtual InputLayoutHandle loadInputLayout(const VertexFormatHandle* vertexFormats, const size_t count, EffectHandle effectHandle) override;
53 virtual void releaseInputLayout(InputLayoutHandle inputLayoutHandle) override;
54
55 virtual BufferHandle loadBuffer(const void* /*data*/, const size_t /*size*/, Usage::EUsage /*usage*/, uint32_t /*accessMode*/, uint32_t /*bindFlags*/, uint32_t /*stride*/ = 0) override;
56
57 virtual void releaseBuffer(BufferHandle bufferHandle) override;
58
59 virtual void* getNativeHandle(BufferHandle bufferHandle) override;
60
61 virtual void releaseResources() override {
62 }
63
64 virtual void retrieveSubBuffer(void* /*data*/, BufferHandle /*source*/, const size_t /*offset*/, const size_t /*size*/) override {
65 }
66
67 GraphicsDeviceWebGPU *graphicsDevice = nullptr;
68
70
72 };
73}
virtual IndexBufferHandle loadIndexBuffer(const void *, const size_t, const size_t) override
Loads a new index buffer and populates it with the given indexData.
virtual VertexBufferHandle loadVertexBuffer(const void *, const size_t, const VertexFormat &vertexFormat) override
Loads a new vertex buffer and populates it with the given data.
virtual void releaseVertexBuffer(VertexBufferHandle vertexBufferHandle) override
Release the vertex buffer with the given handle.
virtual 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...
virtual void retrieveSubBuffer(void *, BufferHandle, const size_t, const size_t) override
Retrieves the contents of a buffer.
Definition: BuffersWebGPU.h:64
virtual BufferHandle loadBuffer(const void *, const size_t, Usage::EUsage, uint32_t, uint32_t, uint32_t=0) override
Loads a new buffer using the given data to populate the buffer.
virtual void * getNativeHandle(BufferHandle bufferHandle) override
Get the device-specific handle (D3D buffer pointer, OpenGL buffer ID etc) associated with the given b...
virtual void releaseBuffer(BufferHandle bufferHandle) override
Releases the buffer with the given bufferHandle.
virtual void releaseInputLayout(InputLayoutHandle inputLayoutHandle) override
Releases the input layout with the given inputLayoutHandle.
virtual void releaseResources() override
Releases all allocated buffer resources.
Definition: BuffersWebGPU.h:61
virtual void releaseIndexBuffer(IndexBufferHandle indexBufferHandle) override
Releases the index buffer with the given handle.
Contains all Cogs related functionality.
Definition: FieldSetter.h:23
EUsage
Usage enumeration.
Definition: Flags.h:24
Vertex format structure used to describe a single vertex for the input assembler.
Definition: VertexFormat.h:60