public static void ActivateGL() { if (Rhino.Runtime.HostUtils.RunningOnOSX) { MacMethods.RHC_ActivateGL(); } }
public static uint RhTexture2dHandle(IntPtr ptrTexture2d) { if (Rhino.Runtime.HostUtils.RunningOnWindows) { return(WindowsMethods.RhTexture2dHandle(ptrTexture2d)); } else { return(MacMethods.RhTexture2dHandle(ptrTexture2d)); } }
public static void RhTexture2dDelete(IntPtr ptrTexture2d) { if (Rhino.Runtime.HostUtils.RunningOnWindows) { WindowsMethods.RhTexture2dDelete(ptrTexture2d); } else { MacMethods.RhTexture2dDelete(ptrTexture2d); } }
public static IntPtr RhTexture2dCreate() { if (Rhino.Runtime.HostUtils.RunningOnWindows) { return(WindowsMethods.RhTexture2dCreate()); } else { return(MacMethods.RhTexture2dCreate()); } }
public static bool RhTexture2dCapture(Rhino.Display.DisplayPipeline pipeline, IntPtr ptrTexture2d, CaptureFormat captureFormat) { var fieldInfo = pipeline.GetType().GetField("m_ptr", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); IntPtr ptrPipeline = (IntPtr)fieldInfo.GetValue(pipeline); if (Rhino.Runtime.HostUtils.RunningOnWindows) { return(WindowsMethods.RhTexture2dPipelineCapture(ptrPipeline, ptrTexture2d, captureFormat)); } else { var viewSerialNumber = pipeline.Viewport.ParentView.RuntimeSerialNumber; return(MacMethods.RhTexture2dCapture(viewSerialNumber, ptrTexture2d, captureFormat)); } }
private void DisplayPipeline_PreDrawObjects(object sender, Rhino.Display.DrawEventArgs e) { GLShaderComponentBase.UpdateContext(e); if (_model.ProgramId != 0) { if (Rhino.Runtime.HostUtils.RunningOnWindows) { WindowsMethods.RHC_UpdateShader(_resourceName, _defines, _model.ProgramId); } else { MacMethods.RHC_UpdateShader(_resourceName, _defines, _model.ProgramId); } _model.RecycleCurrentProgram = false; } }
protected override void SolveInstance(IGH_DataAccess data) { string resourceName = ""; string defines = ""; data.GetData(0, ref resourceName); data.GetData(1, ref defines); defines = defines.Replace("\\n", "\n"); if (!resourceName.Equals(_resourceName) || !defines.Equals(_defines)) { _resourceName = resourceName; _defines = defines; _model = new GLSLViewModel(); } if (_model.ProgramId == 0 && !string.IsNullOrWhiteSpace(_model.VertexShaderCode) && !string.IsNullOrWhiteSpace(_resourceName)) { ActivateGL(); if (_model.CompileProgram()) { if (_model.ProgramId != 0) { if (Rhino.Runtime.HostUtils.RunningOnWindows) { WindowsMethods.RHC_UpdateShader(_resourceName, _defines, _model.ProgramId); } else { MacMethods.RHC_UpdateShader(_resourceName, _defines, _model.ProgramId); } _model.RecycleCurrentProgram = false; var doc = Rhino.RhinoDoc.ActiveDoc; if (doc != null) { doc.Views.Redraw(); } GLShaderComponentBase.RedrawViewportControl(); } } } }
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; if (Rhino.Runtime.HostUtils.RunningOnWindows) { WindowsMethods.RHC_GetShaderSource(_resourceName, _defines, _vertex, _tessctrl, _tesseval, _geometry, _fragment); } else { MacMethods.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(); } } 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, "Built-In"); 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); } Rhino.Display.DisplayPipeline.PreDrawObjects -= DisplayPipeline_PreDrawObjects; }; dlg.Title = this.NickName; dlg.Owner = parent; dlg.Show(); }