public RenderWindow GetRenderWindow() { IntPtr pRW = UnsafeNativeMethods.Rdk_SdkRender_GetRenderWindow(ConstPointer()); if (pRW != IntPtr.Zero) { RenderWindow rw = new RenderWindow(this); return rw; } return null; }
public RenderWindow GetRenderWindow() { //IntPtr pRW = UnsafeNativeMethods.Rdk_SdkRender_GetRenderWindow(ConstPointer()); // The above call attempts to get the render frame associated with this pipeline // then get the render frame associated with the pipeline then get the render // window from the frame. The problem is that the underlying unmanaged object // attached to this pipeline gets destroyed after the rendering is completed. // The render frame and window exist until the user closes the render frame so // the above call will fail when trying to access the render window for post // processing or tone operator adjustments after a render is completed. The // method bellow will get the render window using the render session Id associated // with this render instance and work as long as the render frame is available. var pointer = UnsafeNativeMethods.IRhRdkRenderWindow_Find(m_session_id); if (pointer == IntPtr.Zero) return null; var value = new RenderWindow(m_session_id); return value; }
/// <summary> /// Set progress to RenderWindow, if it is not null. /// </summary> /// <param name="rw"></param> /// <param name="msg"></param> /// <param name="progress"></param> public void SetProgress(RenderWindow rw, string msg, float progress) { rw?.SetProgress(msg, progress); }
public override bool StartRenderer(int w, int h, RhinoDoc doc, ViewInfo rhinoView, ViewportInfo viewportInfo, bool forCapture, RenderWindow renderWindow) { _started = true; if (forCapture) { ModalRenderEngine mre = new ModalRenderEngine(doc, PlugIn.IdFromName("RhinoCycles"), rhinoView, viewportInfo); _cycles = null; _modal = mre; mre.Settings = RcCore.It.EngineSettings; mre.Settings.UseInteractiveRenderer = false; mre.Settings.SetQuality(doc.RenderSettings.AntialiasLevel); var rs = new Size(w, h); mre.RenderWindow = renderWindow; mre.RenderDimension = rs; mre.Database.RenderDimension = rs; mre.Settings.Verbose = true; mre.StatusTextUpdated += Mre_StatusTextUpdated; mre.Database.LinearWorkflowChanged += DatabaseLinearWorkflowChanged; mre.SetFloatTextureAsByteTexture(false); // mre.Settings.RenderDeviceIsOpenCl); mre.CreateWorld(); // has to be done on main thread, so lets do this just before starting render session _modalThread = new Thread(RenderOffscreen) { Name = $"Cycles offscreen viewport rendering with ModalRenderEngine {_serial}" }; _modalThread.Start(mre); return true; } _available = false; // the renderer hasn't started yet. It'll tell us when it has. _frameAvailable = false; _cycles = new ViewportRenderEngine(doc.RuntimeSerialNumber, PlugIn.IdFromName("RhinoCycles"), rhinoView); _cycles.StatusTextUpdated += CyclesStatusTextUpdated; // render engine tells us status texts for the hud _cycles.RenderStarted += CyclesRenderStarted; // render engine tells us when it actually is rendering _cycles.StartSynchronizing += CyclesStartSynchronizing; _cycles.Synchronized += CyclesSynchronized; _cycles.PassRendered += CyclesPassRendered; _cycles.Database.LinearWorkflowChanged += DatabaseLinearWorkflowChanged; _cycles.SamplesChanged += CyclesSamplesChanged; _cycles.Settings = RcCore.It.EngineSettings; _cycles.Settings.SetQuality(doc.RenderSettings.AntialiasLevel); var renderSize = Rhino.Render.RenderPipeline.RenderSize(doc); _cycles.RenderWindow = renderWindow; _cycles.RenderDimension = renderSize; _cycles.Settings.Verbose = true; _maxSamples = _cycles.Settings.Samples; _cycles.SetFloatTextureAsByteTexture(false); // m_cycles.Settings.RenderDeviceIsOpenCl); _cycles.CreateWorld(); // has to be done on main thread, so lets do this just before starting render session _startTime = DateTime.UtcNow; _cycles.StartRenderThread(_cycles.Renderer, $"A cool Cycles viewport rendering thread {_serial}"); return true; }
public static RenderWindow FromSessionId(Guid sessionId) { var pointer = UnsafeNativeMethods.IRhRdkRenderWindow_Find(sessionId); if (pointer == IntPtr.Zero) return null; var value = new RenderWindow(sessionId); return value; }