예제 #1
0
        void OpenEditor()
        {
            if (_activeEditor != null)
            {
                _activeEditor.Focus();
                return;
            }
            string savedVS = _model.VertexShaderCode;
            string savedGS = _model.GeometryShaderCode;
            string savedTC = _model.TessellationControlCode;
            string savedTE = _model.TessellationEvalualtionCode;
            string savedFS = _model.FragmentShaderCode;
            string savedXfrmFeedbackVertex = _model.TransformFeedbackShaderCode;

            _activeEditor = new GLSLEditorDialog(_model, false, NickName);

            var parent = Rhino.UI.Runtime.PlatformServiceProvider.Service.GetEtoWindow(Grasshopper.Instances.DocumentEditor.Handle);

            _model.Modified       = false;
            _activeEditor.Closed += (s, e) =>
            {
                var dlg = _activeEditor;
                _activeEditor = null;
                if (!dlg.Canceled)
                {
                    if (_model.Modified)
                    {
                        var doc = OnPingDocument();
                        doc?.Modified();
                    }
                }
                else
                {
                    _model.VertexShaderCode            = savedVS;
                    _model.GeometryShaderCode          = savedGS;
                    _model.FragmentShaderCode          = savedFS;
                    _model.TessellationControlCode     = savedTC;
                    _model.TessellationEvalualtionCode = savedTE;
                    _model.TransformFeedbackShaderCode = savedXfrmFeedbackVertex;
                }
                _model.Modified = false;
                //recompile shader if necessary
                if (_model.ProgramId == 0)
                {
                    ExpireSolution(true);
                }
            };
            _activeEditor.Owner = parent;
            _activeEditor.Show();
        }
예제 #2
0
        void OpenEditor()
        {
            bool   animationEnabled        = AnimationTimerEnabled;
            string savedVS                 = _model.VertexShaderCode;
            string savedGS                 = _model.GeometryShaderCode;
            string savedTC                 = _model.TessellationControlCode;
            string savedTE                 = _model.TessellationEvalualtionCode;
            string savedFS                 = _model.FragmentShaderCode;
            string savedXfrmFeedbackVertex = _model.TransformFeedbackShaderCode;

            var dlg    = new GLSLEditorDialog(_model);
            var parent = Rhino.UI.Runtime.PlatformServiceProvider.Service.GetEtoWindow(Grasshopper.Instances.DocumentEditor.Handle);

            _model.Modified = false;
            if (dlg.ShowModal(parent))
            {
                if (_model.Modified)
                {
                    var doc = OnPingDocument();
                    doc?.Modified();
                }
            }
            else
            {
                _model.VertexShaderCode            = savedVS;
                _model.GeometryShaderCode          = savedGS;
                _model.FragmentShaderCode          = savedFS;
                _model.TessellationControlCode     = savedTC;
                _model.TessellationEvalualtionCode = savedTE;
                _model.TransformFeedbackShaderCode = savedXfrmFeedbackVertex;
            }
            _model.Modified = false;
            //recompile shader if necessary
            if (_model.ProgramId == 0)
            {
                ExpireSolution(true);
            }
            AnimationTimerEnabled = animationEnabled;
        }
        void OpenEditor()
        {
            if (string.IsNullOrWhiteSpace(_resourceName))
            {
                return;
            }
            if (string.IsNullOrWhiteSpace(_model.VertexShaderCode))
            {
                using (var vertex = new StringWrapper())
                    using (var tessctrl = new StringWrapper())
                        using (var tesseval = new StringWrapper())
                            using (var geometry = new StringWrapper())
                                using (var fragment = new StringWrapper())
                                {
                                    IntPtr _vertex   = vertex.NonConstPointer;
                                    IntPtr _tessctrl = tessctrl.NonConstPointer;
                                    IntPtr _tesseval = tesseval.NonConstPointer;
                                    IntPtr _geometry = geometry.NonConstPointer;
                                    IntPtr _fragment = fragment.NonConstPointer;
                                    RHC_GetShaderSource(_resourceName, _defines, _vertex, _tessctrl, _tesseval, _geometry, _fragment);

                                    _model.VertexShaderCode            = vertex.ToString();
                                    _model.TessellationControlCode     = tessctrl.ToString();
                                    _model.TessellationEvalualtionCode = tesseval.ToString();
                                    _model.GeometryShaderCode          = geometry.ToString();
                                    _model.FragmentShaderCode          = fragment.ToString();
                                }
            }

            bool animationEnabled = GLShaderComponentBase.AnimationTimerEnabled;

            Rhino.Display.DisplayPipeline.PreDrawObjects += DisplayPipeline_PreDrawObjects;
            string savedVS = _model.VertexShaderCode;
            string savedGS = _model.GeometryShaderCode;
            string savedTC = _model.TessellationControlCode;
            string savedTE = _model.TessellationEvalualtionCode;
            string savedFS = _model.FragmentShaderCode;
            string savedXfrmFeedbackVertex = _model.TransformFeedbackShaderCode;

            bool containsTessShaders = !string.IsNullOrWhiteSpace(_model.TessellationControlCode) ||
                                       !string.IsNullOrWhiteSpace(_model.TessellationEvalualtionCode);
            var dlg    = new GLSLEditorDialog(_model, containsTessShaders);
            var parent = Rhino.UI.Runtime.PlatformServiceProvider.Service.GetEtoWindow(Grasshopper.Instances.DocumentEditor.Handle);

            _model.Modified = false;

            dlg.Closed += (s, e) =>
            {
                if (!dlg.Canceled)
                {
                    if (_model.Modified)
                    {
                        var doc = OnPingDocument();
                        doc?.Modified();
                    }
                }
                else
                {
                    _model.VertexShaderCode            = savedVS;
                    _model.GeometryShaderCode          = savedGS;
                    _model.FragmentShaderCode          = savedFS;
                    _model.TessellationControlCode     = savedTC;
                    _model.TessellationEvalualtionCode = savedTE;
                    _model.TransformFeedbackShaderCode = savedXfrmFeedbackVertex;
                }
                _model.Modified = false;
                //recompile shader if necessary
                if (_model.ProgramId == 0)
                {
                    ExpireSolution(true);
                }
                GLShaderComponentBase.AnimationTimerEnabled   = animationEnabled;
                Rhino.Display.DisplayPipeline.PreDrawObjects -= DisplayPipeline_PreDrawObjects;
            };
            dlg.Title = this.NickName;
            dlg.Owner = parent;
            dlg.Show();
        }