Beispiel #1
0
        public bool CompileShader(string techniqueName, ShaderDescriptionViewModel vmShader, out ShaderDescription shaderObject, out IEnumerable <ErrorViewModel> errors)
        {
            List <ErrorModel> errorList;
            CompilationResult compilationResult = Compile(vmShader, out errorList);
            bool result = compilationResult != null && !compilationResult.HasErrors;

            vmShader.CompilationStatus = result ? CompilationStatus.Successful : CompilationStatus.Failed;
            if (!result)
            {
                errors = errorList.Select(e => new ErrorViewModel {
                    ErrorModel = e
                });
                shaderObject = null;
            }
            else
            {
                var references        = vmShader.ShaderDescriptionModel.Shader.References;
                var textureReferences = vmShader.ShaderDescriptionModel.Shader.TextureReferences;
                var samplerReferences = vmShader.ShaderDescriptionModel.Shader.SamplerReferences;
                shaderObject = new ShaderDescription(vmShader.Name, vmShader.Type, vmShader.FeatureLevel,
                                                     compilationResult.Bytecode, references, textureReferences, samplerReferences);
                errors = null;
            }
            return(result);
        }
        private void ShaderList_DragOver(object sender, DragEventArgs e)
        {
            e.Effects = DragDropEffects.None;
            var item = ItemsControl.ContainerFromElement(ShaderList, e.OriginalSource as DependencyObject) as ListBoxItem;

            if (item != null)
            {
                ShaderDescriptionViewModel sVm = item.Content as ShaderDescriptionViewModel;
                if (sVm == null)
                {
                    e.Effects = DragDropEffects.None;
                    return;
                }
                if (e.Data.GetDataPresent(typeof(TechniqueMappingViewModel)) && !sVm.Techniques.Contains(e.Data.GetData(typeof(TechniqueMappingViewModel))))
                {
                    e.Effects = DragDropEffects.Link;
                }
            }
        }
        private void ShaderList_Drop(object sender, DragEventArgs e)
        {
            var item = ItemsControl.ContainerFromElement(ShaderList, e.OriginalSource as DependencyObject) as ListBoxItem;

            if (item != null && e.Data.GetDataPresent(typeof(TechniqueMappingViewModel)))
            {
                TechniqueMappingViewModel  tMapping = (TechniqueMappingViewModel)e.Data.GetData(typeof(TechniqueMappingViewModel));
                ShaderDescriptionViewModel sVM      = ((ShaderDescriptionViewModel)item.Content);

                var vmLocator = ((ViewModelLocator)System.Windows.Application.Current.FindResource("Locator"));
                foreach (var shader in vmLocator.Compilation.Shaders.OfType <ShaderDescriptionViewModel>())
                {
                    if (shader.Name != sVM.Name && shader.Type == sVM.Type && shader.Techniques.Contains(tMapping))
                    {
                        shader.RemoveTechnique(tMapping);
                    }
                }
                sVM.AssignTechnique(tMapping);
            }
        }