Пример #1
0
        public void UpdateDataAndUploadToMesh(TileData tiles, Mesh mesh)
        {
            _dataArray = GetDataArray();

            var data = _dataArray[0];

            if (tiles.Allocator == Allocator.Temp)
            {
                WriteVertsRange(0, tiles.Length, data, Size, _aspect);
                SetSubMesh(data);
                WriteTilesRange(0, tiles.Length, data, tiles);
            }
            else
            {
                new VertsJobDataArray
                {
                    MeshData = data,
                    Aspect   = _aspect,
                    Size     = Size
                }.RunBatch(tiles.Length);

                new SetSubMeshJob
                {
                    MeshData = data,
                }.Run();

                new TileDataJob
                {
                    MeshData = data,
                    Tiles    = tiles
                }.RunBatch(tiles.Length);
            }

            UploadToMesh(mesh);
        }
Пример #2
0
        public JobHandle ScheduleUploadTileData(NativeArray <Tile> tiles, JobHandle inputDeps = default)
        {
            _vertsJob.Complete();
            _tileDataJob.Complete();

            _dataArray = GetDataArray();

            //if(_sizeChanged)
            {
                _vertsJob = new VertsJob
                {
                    MeshData = _dataArray[0],
                    Size     = Size
                }.ScheduleBatch(tiles.Length, 64, inputDeps);
            }

            _tileDataJob = new TileDataJob
            {
                MeshData = _dataArray[0],
                Size     = Size,
                Tiles    = tiles
            }.ScheduleBatch(tiles.Length, 64, inputDeps);
            //}.ScheduleBatch(tiles.Length, 64, _vertsJob);

            _buildingMesh = true;

            return(JobHandle.CombineDependencies(_vertsJob, _tileDataJob));
        }
Пример #3
0
        /// <summary>
        /// Begin jobs to process tile data into mesh data.
        /// Should be called earlier in the frame.
        /// </summary>
        public JobHandle ScheduleUpdateData(TileData tiles, JobHandle inputDeps = default)
        {
            _vertsJob.Complete();
            _tileDataJob.Complete();

            _dataArray = GetDataArray();

            _vertsJob = new VertsJobDataArray
            {
                MeshData = _dataArray[0],
                Size     = Size,
                Aspect   = _aspect,
            }.ScheduleBatch(tiles.Length, _batchSize * 2, inputDeps);

            _vertsJob = new SetSubMeshJob
            {
                MeshData = _dataArray[0],
            }.Schedule(_vertsJob);

            // Can't pass temp allocated containers to jobs
            // - not even main thread jobs called with "Run"
            if (tiles.Allocator == Allocator.Temp)
            {
                WriteTilesRange(0, tiles.Length, _dataArray[0], tiles);
            }
            else
            {
                _tileDataJob = new TileDataJob
                {
                    MeshData = _dataArray[0],
                    Tiles    = tiles
                }.ScheduleBatch(tiles.Length, _batchSize, inputDeps);
            }

            return(JobHandle.CombineDependencies(_vertsJob, _tileDataJob));
        }