group2 0.1.0
CSE 125 Group 2
Loading...
Searching...
No Matches
GpuParticleBuffer.hpp
Go to the documentation of this file.
1
3
4#pragma once
5
6#include <SDL3/SDL.h>
7
8#include <cstdint>
9
26{
27public:
28 enum class Mode
29 {
30 Storage,
31 Vertex
32 };
33
35 void init(SDL_GPUDevice* dev, uint32_t maxBytes, Mode mode = Mode::Storage);
36
38 void quit();
39
44 void upload(SDL_GPUCommandBuffer* cmd, const void* data, uint32_t count, uint32_t stride);
45
48 void bindAsVertexStorage(SDL_GPURenderPass* pass, uint32_t slot) const;
49
52 void bindAsVertex(SDL_GPURenderPass* pass) const;
53
54 [[nodiscard]] uint32_t liveCount() const { return liveCount_; }
55 [[nodiscard]] uint32_t capacityBytes() const { return capacity_; }
56
57private:
58 SDL_GPUDevice* device_ = nullptr;
59 SDL_GPUBuffer* gpuBuf_ = nullptr;
60 SDL_GPUTransferBuffer* transfer_ = nullptr;
61 uint32_t capacity_ = 0;
62 uint32_t liveCount_ = 0;
63};
Manages a GPU storage buffer + CPU-side transfer buffer pair for particle data.
Definition GpuParticleBuffer.hpp:26
void bindAsVertex(SDL_GPURenderPass *pass) const
Bind as a vertex buffer at binding index 0.
Definition GpuParticleBuffer.cpp:89
uint32_t liveCount() const
Definition GpuParticleBuffer.hpp:54
void bindAsVertexStorage(SDL_GPURenderPass *pass, uint32_t slot) const
Bind as a vertex storage buffer at the given slot.
Definition GpuParticleBuffer.cpp:83
void upload(SDL_GPUCommandBuffer *cmd, const void *data, uint32_t count, uint32_t stride)
Upload count * stride bytes from data to the GPU buffer.
Definition GpuParticleBuffer.cpp:46
void quit()
Release all GPU resources.
Definition GpuParticleBuffer.cpp:31
Mode
Definition GpuParticleBuffer.hpp:29
void init(SDL_GPUDevice *dev, uint32_t maxBytes, Mode mode=Mode::Storage)
Allocate GPU + transfer buffers of maxBytes each.
Definition GpuParticleBuffer.cpp:8
uint32_t capacityBytes() const
Definition GpuParticleBuffer.hpp:55
Definition Renderer.hpp:16