Exemple #1
0
        public JobHandle SampleExcludeMask(VegetationInstanceData instanceData, Rect spawnRect,
                                           TextureMaskRule textureMaskRule, JobHandle dependsOn)
        {
            for (int i = 0; i <= TextureMaskList.Count - 1; i++)
            {
                dependsOn = TextureMaskList[i]
                            .SampleExcludeMask(instanceData, spawnRect, TextureMaskType, textureMaskRule, dependsOn);
            }

            return(dependsOn);
        }
Exemple #2
0
        public JobHandle SampleIncludeMask(VegetationInstanceData instanceData, Rect spawnRect,
                                           TextureMaskType textureMaskType, TextureMaskRule textureMaskRule, JobHandle dependsOn)
        {
            if (!spawnRect.Overlaps(TextureRect))
            {
                return(dependsOn);
            }
            if (MaskTexture == null)
            {
                return(dependsOn);
            }

            switch (textureMaskType)
            {
            case TextureMaskType.RGBAChannel:
                if (!_rgbaNativeArray.IsCreated)
                {
                    _rgbaNativeArray = MaskTexture.GetRawTextureData <RGBABytes>();
                }

                bool inverse         = textureMaskRule.GetBooleanPropertyValue("Inverse");
                int  selectedChannel = textureMaskRule.GetIntPropertyValue("ChannelSelector");

                if (MaskTexture.format == TextureFormat.RGBA32)
                {
                    selectedChannel--;
                    if (selectedChannel == -1)
                    {
                        selectedChannel = 3;
                    }
                }

                SampleRgbaChannelIncludeMaskJob sampleRgbaChannelIncludeMaskJob =
                    new SampleRgbaChannelIncludeMaskJob();
                sampleRgbaChannelIncludeMaskJob.Width  = MaskTexture.width;
                sampleRgbaChannelIncludeMaskJob.Height = MaskTexture.height;

                sampleRgbaChannelIncludeMaskJob.Excluded        = instanceData.Excluded.ToDeferredJobArray();
                sampleRgbaChannelIncludeMaskJob.Position        = instanceData.Position.ToDeferredJobArray();
                sampleRgbaChannelIncludeMaskJob.TextureMaskData = instanceData.TextureMaskData.ToDeferredJobArray();
                sampleRgbaChannelIncludeMaskJob.RgbaNativeArray = _rgbaNativeArray;
                sampleRgbaChannelIncludeMaskJob.SelectedChannel = selectedChannel;
                sampleRgbaChannelIncludeMaskJob.Inverse         = inverse;
                sampleRgbaChannelIncludeMaskJob.TextureRect     = TextureRect;
                sampleRgbaChannelIncludeMaskJob.MinValue        = textureMaskRule.MinDensity;
                sampleRgbaChannelIncludeMaskJob.MaxValue        = textureMaskRule.MaxDensity;
                return(sampleRgbaChannelIncludeMaskJob.Schedule(instanceData.Excluded, 32, dependsOn));
            }

            return(dependsOn);
        }