Subclasses that wish to work with GPU systems/emitters must implement this. Those interfaces must fill DataForRenderThread with the data needed to upload to the GPU. It will be the last thing called on this data interface for a specific tick. This will be consumed by the associated FNiagaraDataInterfaceProxy. Note: This class does not own the memory pointed to by DataForRenderThread. It will be recycled automatically. However, if you allocate memory yourself to pass via this buffer you ARE responsible for freeing it when it is consumed by the proxy (Which is what ChaosDestruction does). Likewise, the class also does not own the memory in PerInstanceData. That pointer is the pointer passed to PerInstanceTick/PerInstanceTickPostSimulate.