Example #1
0
        protected override void OnUpdate()
        {
            if (!HasSingleton <CanvasRoot>())
            {
                TextUtility.CreateCanvas(EntityManager);
                SetSingleton(default(CanvasRoot));
            }

            m_vertexCounter.Value      = 0;
            m_vertexIndexCounter.Value = 0;
            m_subMeshCounter.Value     = 0;
            var changedVerticesCount = m_vertexDataQuery.CalculateEntityCount();

            if (changedVerticesCount == 0)
            {
                return;
            }
            m_vertexDataQuery.ResetFilter();

            var length           = m_vertexDataQuery.CalculateEntityCount();
            var canvasRootEntity = GetSingletonEntity <CanvasRoot>();
            var sortedEntities   = EntityManager.GetAllSortedEntities(this, Allocator.TempJob);

            Dependency = m_vertexDataQuery.ToEntityIndexMap(EntityManager, ref m_entityIndexMap, Dependency);

            Dependency = JobHandle.CombineDependencies(
                m_offsets.Resize(length, Dependency),
                m_sharedFontIndices.Resize(length, Dependency));

            Dependency = new GatherSharedComponentIndices <FontMaterial> {
                ChunkSharedComponentType = GetArchetypeChunkSharedComponentType <FontMaterial>(),
                Indices = m_sharedFontIndices.AsDeferredJobArray()
            }.Schedule(m_vertexDataQuery, Dependency);

            CreateOffsets(
                m_entityIndexMap,
                sortedEntities,
                m_sharedFontIndices.AsDeferredJobArray(),
                m_offsets.AsDeferredJobArray(),
                m_vertexCounter,
                m_vertexIndexCounter,
                m_subMeshCounter);

            Dependency = JobHandle.CombineDependencies(
                m_canvasdRootQuery.ResizeBufferDeferred <Vertex>(this, m_vertexCounter, Dependency),
                m_canvasdRootQuery.ResizeBufferDeferred <VertexIndex>(this, m_vertexIndexCounter, Dependency),
                m_canvasdRootQuery.ResizeBufferDeferred <SubMeshInfo>(this, m_subMeshCounter, Dependency));

            MergeBatching(canvasRootEntity, m_offsets.AsDeferredJobArray());
            Dependency = sortedEntities.Dispose(Dependency);
            m_vertexDataQuery.SetChangedVersionFilter(m_filterChanged);
        }
        protected override JobHandle OnUpdate(JobHandle inputDeps)
        {
            if (!HasSingleton <CanvasRoot>())
            {
                TextUtility.CreateCanvas(EntityManager);
                SetSingleton(default(CanvasRoot));
            }

            m_vertexCounter.Value      = 0;
            m_vertexIndexCounter.Value = 0;
            m_subMeshCounter.Value     = 0;
            var changedVerticesCount = m_vertexDataQuery.CalculateEntityCount();

            if (changedVerticesCount == 0)
            {
                return(inputDeps);
            }
            m_vertexDataQuery.ResetFilter();

            var length           = m_vertexDataQuery.CalculateEntityCount();
            var canvasRootEntity = GetSingletonEntity <CanvasRoot>();
            var sortedEntities   = EntityManager.GetAllSortedEntities(this, Allocator.TempJob);

            inputDeps = m_vertexDataQuery.ToEntityIndexMap(EntityManager, ref m_entityIndexMap, inputDeps);

            inputDeps = JobHandle.CombineDependencies(
                m_offsets.Resize(length, inputDeps),
                m_sharedFontIndices.Resize(length, inputDeps));

            inputDeps = new GatherSharedComponentIndices <FontMaterial> {
                ChunkSharedComponentType = GetArchetypeChunkSharedComponentType <FontMaterial>(),
                Indices = m_sharedFontIndices.AsDeferredJobArray()
            }.Schedule(m_vertexDataQuery, inputDeps);

            inputDeps = new CreateOffsets {
                EntitiesIndexMap       = m_entityIndexMap,
                SortedEntities         = sortedEntities,
                Offsets                = m_offsets.AsDeferredJobArray(),
                SharedComponentIndices = m_sharedFontIndices.AsDeferredJobArray(),
                Vertices               = GetBufferFromEntity <Vertex>(true),
                VertexIndices          = GetBufferFromEntity <VertexIndex>(true),
                VertexCounter          = m_vertexCounter,
                VertexIndexCounter     = m_vertexIndexCounter,
                SubMeshCounter         = m_subMeshCounter
            }.Schedule(inputDeps);

            inputDeps = JobHandle.CombineDependencies(
                m_canvasdRootQuery.ResizeBufferDeferred <Vertex>(this, m_vertexCounter, inputDeps),
                m_canvasdRootQuery.ResizeBufferDeferred <VertexIndex>(this, m_vertexIndexCounter, inputDeps),
                m_canvasdRootQuery.ResizeBufferDeferred <SubMeshInfo>(this, m_subMeshCounter, inputDeps));

            inputDeps = new MeshBatching {
                CanvasRootEntity          = canvasRootEntity,
                MeshVertexFromEntity      = GetBufferFromEntity <Vertex>(false),
                MeshVertexIndexFromEntity = GetBufferFromEntity <VertexIndex>(false),
                SubMeshInfoFromEntity     = GetBufferFromEntity <SubMeshInfo>(false),
                Offsets = m_offsets.AsDeferredJobArray(),
            }.Schedule(m_vertexDataQuery, inputDeps);

            inputDeps = sortedEntities.Dispose(inputDeps);
            m_vertexDataQuery.SetChangedVersionFilter(m_filterChanged);
            return(inputDeps);
        }