The gpu device abstraction in its current form isn't very useful beyond simple compute examples. It's a fairly thin wrapper around wgpu::Device and was clearly designed for a one-shot-compute usecase, so it holds some very specific data and imposes specific restrictions. For instance, it's not possible to use it to record command submissions that are submitted later on or batched together with other commands. It's also not possible to reset bind groups once they were set. Changing the design for all possible usecases wold make it just as complex as using wgpu directly though.
The design choices make the class only useful in a very specific usecase and I'd recommend renaming it, since Device sounds like something you have to create to use pasture (which isn't the case, point buffers can be used completely independently). Maybe something like pasture_core::gpu::ComputeSetup would make more sense.
The gpu device abstraction in its current form isn't very useful beyond simple compute examples. It's a fairly thin wrapper around wgpu::Device and was clearly designed for a one-shot-compute usecase, so it holds some very specific data and imposes specific restrictions. For instance, it's not possible to use it to record command submissions that are submitted later on or batched together with other commands. It's also not possible to reset bind groups once they were set. Changing the design for all possible usecases wold make it just as complex as using wgpu directly though.
The design choices make the class only useful in a very specific usecase and I'd recommend renaming it, since
Device
sounds like something you have to create to use pasture (which isn't the case, point buffers can be used completely independently). Maybe something likepasture_core::gpu::ComputeSetup
would make more sense.