private bool AddMapIfNotPresent(MultiMapMaterial multiMapMaterial, TextureMapTypes mapType, ShaderResourceView shaderResourceView)
        {
            bool isChanged = false;

            if (multiMapMaterial != null && multiMapMaterial.TextureMaps.All(m => m.MapType != mapType)) // If this map type is not yet added, then add it now
            {
                multiMapMaterial.TextureMaps.Add(new TextureMapInfo(mapType, shaderResourceView));
                isChanged = true;
            }

            return(isChanged);
        }
        private bool UpdateMap(MultiMapMaterial multiMapMaterial, bool isMapUsed, TextureMapTypes mapType, ShaderResourceView shaderResourceView)
        {
            bool isChanged;

            if (isMapUsed)
            {
                isChanged = AddMapIfNotPresent(multiMapMaterial, mapType, shaderResourceView);
            }
            else
            {
                isChanged = RemoveMap(multiMapMaterial, mapType);
            }

            return(isChanged);
        }
        private bool RemoveMap(MultiMapMaterial multiMapMaterial, TextureMapTypes mapType)
        {
            bool isChanged = false;

            for (var i = multiMapMaterial.TextureMaps.Count - 1; i >= 0; i--)
            {
                if (multiMapMaterial.TextureMaps[i].MapType == mapType)
                {
                    multiMapMaterial.TextureMaps.RemoveAt(i);
                    isChanged = true;
                }
            }

            return(isChanged);
        }
Ejemplo n.º 4
0
 public KnownTextureFile(TextureMapTypes textureMapType, string fileSuffixes)
 {
     TextureMapType = textureMapType;
     FileSuffixes   = fileSuffixes.Split(',').Select(f => f.Trim()).ToList();
 }
Ejemplo n.º 5
0
 public KnownTextureFile(TextureMapTypes textureMapType)
 {
     TextureMapType = textureMapType;
     FileSuffixes   = new List <string>();
 }
        public TextureMapSelectionControl(IMultiMapMaterial material, TextureMapTypes textureMapType, string baseFolder = null)
        {
            Material = material;
            _physicallyBasedMaterial = material as PhysicallyBasedMaterial;

            TextureMapType = textureMapType;

            if (baseFolder != null && !baseFolder.EndsWith("\\") && !baseFolder.EndsWith("/"))
            {
                baseFolder += '\\';
            }

            BaseFolder = baseFolder;

            _textureMapInfo = Material.TextureMaps.FirstOrDefault(m => m.MapType == TextureMapType);


            InitializeComponent();

            ShowTextureTextBox = true;



            if (_physicallyBasedMaterial != null)
            {
                ShowFilter = textureMapType == TextureMapTypes.Metalness ||
                             textureMapType == TextureMapTypes.Glossiness ||
                             textureMapType == TextureMapTypes.Roughness ||
                             textureMapType == TextureMapTypes.MetalnessRoughness ||
                             textureMapType == TextureMapTypes.AmbientOcclusion;

                ShowMask = textureMapType == TextureMapTypes.Albedo ||
                           textureMapType == TextureMapTypes.BaseColor ||
                           textureMapType == TextureMapTypes.DiffuseColor;

                if (textureMapType == TextureMapTypes.Metalness || textureMapType == TextureMapTypes.MetalnessRoughness)
                {
                    CurrentFilterValue = _physicallyBasedMaterial.Metalness;
                }

                if (textureMapType == TextureMapTypes.Roughness || textureMapType == TextureMapTypes.MetalnessRoughness)
                {
                    CurrentFilterValue = _physicallyBasedMaterial.Roughness;
                }

                if (ShowMask)
                {
                    CurrentMaskColor = _physicallyBasedMaterial.BaseColor.ToWpfColor();
                }
            }
            else
            {
                ShowFilter = false;
                ShowMask   = false;
            }

            // To add support for drop into TextBox, we need to use PreviewDrop and PreviewDragOver events in DragAndDropHelper
            //var dragAndDropHelper = new DragAndDropHelper(FileNameTextBox, ".*");
            //dragAndDropHelper.FileDroped += delegate (object sender, FileDropedEventArgs e)
            //{
            //    FileNameTextBox.Text = e.FileName;
            //    MasterCheckBox.IsChecked = true;

            //    LoadCurrentTexture();
            //};


            MapTypeTextBlock.Text = textureMapType.ToString();

            if (_textureMapInfo == null)
            {
                FileNameTextBox.Text      = "";
                TextureCheckBox.IsChecked = false;
            }
            else
            {
                if (BaseFolder != null && _textureMapInfo.TextureResourceName.StartsWith(BaseFolder))
                {
                    FileNameTextBox.Text = _textureMapInfo.TextureResourceName.Substring(BaseFolder.Length);
                }
                else
                {
                    FileNameTextBox.Text = _textureMapInfo.TextureResourceName;
                }

                TextureCheckBox.IsChecked = true;
            }

            UpdateMaskHeadingTextBlock();
        }