GpuEcsAnimatedMeshSystem.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using Unity.Burst;
  2. using Unity.Collections;
  3. using Unity.Entities;
  4. namespace GPUECSAnimationBaker.Engine.AnimatorSystem
  5. {
  6. public partial struct GpuEcsAnimatedMeshSystem : ISystem
  7. {
  8. private ComponentLookup<GpuEcsAnimatorShaderDataComponent> gpuEcsAnimatorShaderDataLookup;
  9. [BurstCompile]
  10. public void OnCreate(ref SystemState state)
  11. {
  12. gpuEcsAnimatorShaderDataLookup = state.GetComponentLookup<GpuEcsAnimatorShaderDataComponent>(isReadOnly: true);
  13. }
  14. [BurstCompile]
  15. public void OnUpdate(ref SystemState state)
  16. {
  17. gpuEcsAnimatorShaderDataLookup.Update(ref state);
  18. state.Dependency = new GpuEcsAnimatedMeshJob()
  19. {
  20. gpuEcsAnimatorShaderDataLookup = gpuEcsAnimatorShaderDataLookup
  21. }.ScheduleParallel(state.Dependency);
  22. }
  23. [BurstCompile]
  24. private partial struct GpuEcsAnimatedMeshJob : IJobEntity
  25. {
  26. [ReadOnly] public ComponentLookup<GpuEcsAnimatorShaderDataComponent> gpuEcsAnimatorShaderDataLookup;
  27. public void Execute(ref GpuEcsMaterialAnimationState gpuEcsMaterialAnimationState,
  28. in GpuEcsAnimatedMeshComponent gpuEcsAnimatedMesh)
  29. {
  30. GpuEcsAnimatorShaderDataComponent gpuEcsAnimatorShaderData = gpuEcsAnimatorShaderDataLookup[gpuEcsAnimatedMesh.animatorEntity];
  31. gpuEcsMaterialAnimationState.Value = gpuEcsAnimatorShaderData.shaderData;
  32. }
  33. }
  34. }
  35. }