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); }
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); }