예제 #1
0
 public RenderWindow GetRenderWindow()
 {
   IntPtr pRW = UnsafeNativeMethods.Rdk_SdkRender_GetRenderWindow(ConstPointer());
   if (pRW != IntPtr.Zero)
   {
     RenderWindow rw = new RenderWindow(this);
     return rw;
   }
   return null;
 }
예제 #2
0
 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;
 }
예제 #3
0
 /// <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);
 }
예제 #4
0
        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;
 }