32#include <SDL3/SDL_gpu.h>
53 void init(SDL_GPUDevice* device, SDL_GPUTextureFormat& colorTarget,
const SDL_GPUShaderFormat& shaderFormat);
94 void setFrame(
const std::vector<glm::mat4>& palette,
const std::vector<SkinnedInstance>& instances);
104 void uploadFrame(SDL_GPUCommandBuffer* cmd, SDL_GPUCopyPass* copyPass);
112 void draw(SDL_GPURenderPass* renderPass, SDL_GPUCommandBuffer* cmd);
139 SDL_GPUBuffer*
vb =
nullptr;
141 SDL_GPUBuffer*
ib =
nullptr;
153 bool ensureSsbos(Uint32 paletteBytes, Uint32 instanceBytes);
Shared data types exchanged between Game (producer) and NewRenderer (consumer).
bool frameDirty_
Definition SkinnedRenderer.hpp:188
SsboInfo instancesSsboInfo_
Definition SkinnedRenderer.hpp:178
SDL_GPUTransferBuffer * paletteXfer_
Definition SkinnedRenderer.hpp:180
int numJoints() const
Number of joints in the installed rig (0 if not installed).
Definition SkinnedRenderer.hpp:121
bool setRig(const std::vector< RigMeshSource > &meshes, int numJoints)
Install the shared character rig.
Definition SkinnedRenderer.cpp:82
SDL_GPUTransferBuffer * instanceXfer_
Definition SkinnedRenderer.hpp:181
void draw(SDL_GPURenderPass *renderPass, SDL_GPUCommandBuffer *cmd)
Issue the instanced draws for every visible skinned character.
Definition SkinnedRenderer.cpp:274
void shutdown()
Release all GPU resources owned by this subsystem.
Definition SkinnedRenderer.cpp:35
std::vector< glm::mat4 > framePalette_
Definition SkinnedRenderer.hpp:186
SkinnedRenderer & operator=(SkinnedRenderer &&)=delete
void init(SDL_GPUDevice *device, SDL_GPUTextureFormat &colorTarget, const SDL_GPUShaderFormat &shaderFormat)
Bind the SDL GPU device.
Definition SkinnedRenderer.cpp:21
std::vector< SkinnedInstance > frameInstances_
Definition SkinnedRenderer.hpp:187
bool ensureSsbos(Uint32 paletteBytes, Uint32 instanceBytes)
Grow palette/instance SSBOs (and their transfer buffers) to at least these byte sizes.
Definition SkinnedRenderer.cpp:192
void uploadFrame(SDL_GPUCommandBuffer *cmd, SDL_GPUCopyPass *copyPass)
Upload this frame's palette + instance buffers to the GPU.
Definition SkinnedRenderer.cpp:241
bool rigInstalled_
Definition SkinnedRenderer.hpp:168
SsboInfo palettesSsboInfo_
Definition SkinnedRenderer.hpp:177
SkinnedRenderer()=default
SkinnedRenderer & operator=(const SkinnedRenderer &)=delete
void setFrame(const std::vector< glm::mat4 > &palette, const std::vector< SkinnedInstance > &instances)
Push this frame's per-character bone palette + per-instance data.
Definition SkinnedRenderer.cpp:185
std::vector< SkinnedMesh > skinnedMeshes_
Definition SkinnedRenderer.hpp:170
SDL_GPUGraphicsPipeline * pipeline_
The skinned graphics pipeline.
Definition SkinnedRenderer.hpp:165
SkinnedRenderer(SkinnedRenderer &&)=delete
bool createSkinningPipeline(SDL_GPUTextureFormat &colorTarget, const SDL_GPUShaderFormat &shaderFormat)
Definition SkinnedRenderer.cpp:349
~SkinnedRenderer()=default
size_t pendingInstanceCount() const
Number of instances pending render this frame (0 if no frame submitted).
Definition SkinnedRenderer.hpp:127
Uint32 instanceXferCapacityBytes_
Definition SkinnedRenderer.hpp:183
SkinnedRenderer(const SkinnedRenderer &)=delete
SDL_GPUDevice * device_
Definition SkinnedRenderer.hpp:158
int numJoints_
Definition SkinnedRenderer.hpp:169
bool rigInstalled() const
True after a successful setRig.
Definition SkinnedRenderer.hpp:124
Uint32 paletteXferCapacityBytes_
Definition SkinnedRenderer.hpp:182
One mesh of the installed skinned rig.
Definition SkinnedRenderer.hpp:138
SDL_GPUBuffer * vb
Definition SkinnedRenderer.hpp:139
SDL_GPUBuffer * ib
Definition SkinnedRenderer.hpp:141
Uint32 indexCount
Definition SkinnedRenderer.hpp:142
Uint32 vertexCount
Definition SkinnedRenderer.hpp:143
SDL_GPUBuffer * boneVb
Definition SkinnedRenderer.hpp:140
Definition SkinnedRenderer.hpp:147
Uint32 capacityBytes_
Definition SkinnedRenderer.hpp:149
SDL_GPUBuffer * ssbo_
Definition SkinnedRenderer.hpp:148