protected override void OnUpdate()
        {
            Entities.ForEach((HLOD hlod) =>
            {
                var lodGroup   = hlod.GetComponent <LODGroup>();
                var hlodEntity = GetPrimaryEntity(hlod);

                // If conversion of LODGroup failed, skip HLOD conversion too
                if (!DstEntityManager.HasComponent <MeshLODGroupComponent>(hlodEntity))
                {
                    return;
                }

                DstEntityManager.AddComponent(hlodEntity, ComponentType.ReadWrite <HLODComponent>());

                var LODCount = lodGroup.lodCount;
                if (LODCount != hlod.LODParentTransforms.Length)
                {
                    Debug.LogWarning("HLOD out of sync with LODGroup", hlod);
                    return;
                }

                for (int i = 0; i != LODCount; i++)
                {
                    var childGroups = hlod.CalculateLODGroups(i);
                    var HLODMask    = 1 << i;

                    foreach (var childGroup in childGroups)
                    {
                        var childLodGroupEntities = GetEntities(childGroup);
                        if (childLodGroupEntities.Count() == 0)
                        {
                            Debug.LogWarning($"Missing child group '{childGroup.gameObject.name}' in LOD group '{hlod.gameObject.name}', this can happen because the child group is disabled.");
                            return;
                        }

                        foreach (var childLodGroupEntity in childLodGroupEntities)
                        {
                            if (DstEntityManager.HasComponent <MeshLODGroupComponent>(childLodGroupEntity))
                            {
                                var group         = DstEntityManager.GetComponentData <MeshLODGroupComponent>(childLodGroupEntity);
                                group.ParentGroup = hlodEntity;
                                group.ParentMask  = HLODMask;
                                DstEntityManager.SetComponentData(childLodGroupEntity, group);
                            }
                        }
                    }

                    var outsideRenderers = CalculateRenderersOutsideLODGroups(hlod, i);
                    foreach (var r in outsideRenderers)
                    {
                        foreach (var rendererEntity in GetEntities(r))
                        {
                            if (DstEntityManager.HasComponent <RenderMesh>(rendererEntity))
                            {
                                //@TODO: Not quite sure if this makes sense. Test that this behaviour is reasonable.
                                if (DstEntityManager.HasComponent <MeshLODComponent>(rendererEntity))
                                {
                                    continue;
                                }

                                var lodComponent = new MeshLODComponent {
                                    Group = hlodEntity, LODMask = HLODMask
                                };
                                DstEntityManager.AddComponentData(rendererEntity, lodComponent);
                            }
                        }
                    }
                }
            });
        }
        protected override void OnUpdate()
        {
            Entities.ForEach((LODGroup lodGroup) =>
            {
                if (lodGroup.lodCount > 8)
                {
                    Debug.LogWarning("LODGroup has more than 8 LOD - Not supported", lodGroup);
                    return;
                }

                var lodGroupEntity = GetPrimaryEntity(lodGroup);

                var lodGroupData = new MeshLODGroupComponent();
                //@TODO: LOD calculation should respect scale...
                var worldSpaceSize = LODGroupExtensions.GetWorldSpaceSize(lodGroup);
                lodGroupData.LocalReferencePoint = lodGroup.localReferencePoint;

                var lodDistances0 = new float4(float.PositiveInfinity);
                var lodDistances1 = new float4(float.PositiveInfinity);
                var lodGroupLODs  = lodGroup.GetLODs();
                for (int i = 0; i < lodGroup.lodCount; ++i)
                {
                    float d = worldSpaceSize / lodGroupLODs[i].screenRelativeTransitionHeight;
                    if (i < 4)
                    {
                        lodDistances0[i] = d;
                    }
                    else
                    {
                        lodDistances1[i - 4] = d;
                    }
                }

                lodGroupData.LODDistances0 = lodDistances0;
                lodGroupData.LODDistances1 = lodDistances1;

                DstEntityManager.AddComponentData(lodGroupEntity, lodGroupData);

                for (int i = 0; i < lodGroupLODs.Length; ++i)
                {
                    foreach (var renderer in lodGroupLODs[i].renderers)
                    {
                        if (renderer == null)
                        {
                            Debug.LogWarning("Missing renderer in LOD Group", lodGroup);
                            continue;
                        }

                        DeclareDependency(renderer, lodGroup);
                        DeclareDependency(lodGroup, renderer);

                        foreach (var rendererEntity in GetEntities(renderer))
                        {
                            if (DstEntityManager.HasComponent <RenderMesh>(rendererEntity))
                            {
                                var lodComponent = new MeshLODComponent {
                                    Group = lodGroupEntity, LODMask = 1 << i
                                };
                                if (!DstEntityManager.HasComponent <MeshLODComponent>(rendererEntity))
                                {
                                    DstEntityManager.AddComponentData(rendererEntity, lodComponent);
                                }
                                else
                                {
                                    var previousLODComponent = DstEntityManager.GetComponentData <MeshLODComponent>(rendererEntity);
                                    if (previousLODComponent.Group != lodComponent.Group)
                                    {
                                        Debug.LogWarning("A renderer can not be in multiple different LODGroup.", renderer);
                                        continue;
                                    }

                                    if ((previousLODComponent.LODMask & (1 << (i - 1))) == 0)
                                    {
                                        Debug.LogWarning("A renderer that is present in the same LODGroup multiple times must be in consecutive LOD levels.", renderer);
                                    }

                                    lodComponent.LODMask |= previousLODComponent.LODMask;
                                    DstEntityManager.SetComponentData(rendererEntity, lodComponent);
                                }
                            }
                        }
                    }
                }
            });
        }