I've written my own 2D sprite rendering system with a Compute Buffer and Geometry Shader but what I want to achieve is reducing the amount of data sent to the Compute Buffer in the most efficient manner. We've already packed the data down considerably into 24 bytes. I know how to tell if it is visible to the camera or not, that's the easy bit. The question is how to store this in an ECS component and then extract to only send what is required to the compute buffer. Currently my brother has coded a system that exports the data from ECS by collating it in a parallel job. We just send everything using SetData on the Compute Buffer. Obviously we could loop over the data and push it into a new array but I want to know if there is anything out there that could help solve this problem efficiently. Say for example i have 300k sprite components in ECS but only 30k are visible, when extracting data from ECS I only want to get the 30k not 300k. Some things I've thought about are: SharedComponentData: Somehow update a value to say if visible or not then use the entity query filter, if possible i'd imagine each time the SCD value is changed it cost to move it around Component Tag: Having a Tag to say if it is visible or not (added and removed to the entity by a system with a command buffer). Then filter with it on a query. Works but obviously not super fast when adding / removing. There are pros and cons to everything but just wondering what others may have done and if there is something I haven't thought about that we could try!