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