]> OCCT Git - occt-copy.git/commitdiff
Update rendering params.
authorisk <isk@opencascade.com>
Fri, 2 Oct 2015 11:33:21 +0000 (14:33 +0300)
committerisk <isk@opencascade.com>
Fri, 2 Oct 2015 11:33:21 +0000 (14:33 +0300)
Add to the V3d_Viewer default rendering params.
Initialize rendering params of new V3d_View by default rendering params.
Graphic3d_CView::myRenderingParams is handle now.
Add to the AIS_InteractiveContext methods DefaultRenderingParams() and SetDefaultResolution().

14 files changed:
src/AIS/AIS_InteractiveContext.cxx
src/AIS/AIS_InteractiveContext.hxx
src/Graphic3d/Graphic3d_CView.cxx
src/Graphic3d/Graphic3d_CView.hxx
src/Graphic3d/Graphic3d_RenderingParams.hxx
src/OpenGl/OpenGl_GraphicDriver.cxx
src/OpenGl/OpenGl_Text.cxx
src/OpenGl/OpenGl_View_Raytrace.cxx
src/OpenGl/OpenGl_View_Redraw.cxx
src/V3d/V3d_View.hxx
src/V3d/V3d_View_5.cxx
src/V3d/V3d_Viewer.cxx
src/V3d/V3d_Viewer.hxx
src/ViewerTest/ViewerTest_ViewerCommands.cxx

index aa5f2293094e85ca76a4f650b8746215ab13cdf0..1bca503e139406d5d5fb8ddf165d201502b8d1db 100644 (file)
@@ -3014,3 +3014,26 @@ void AIS_InteractiveContext::FitSelected (const Handle(V3d_View)& theView,
 
   theView->FitAll (aBndSelected, theMargin, theToUpdate);
 }
+
+//=======================================================================
+//function : SetResolution
+//purpose  :
+//=======================================================================
+void AIS_InteractiveContext::SetDefaultResolution (const unsigned int theResolution)
+{
+  for (myMainVwr->InitDefinedViews(); myMainVwr->MoreDefinedViews(); myMainVwr->NextDefinedViews())
+  {
+    myMainVwr->DefinedView()->Redraw();
+  }
+
+  myMainVwr->DefaultRenderingParams()->Resolution = theResolution;
+}
+
+//=======================================================================
+//function : SetDefaultRenderingParams
+//purpose  :
+//=======================================================================
+const Handle(Graphic3d_RenderingParams)& AIS_InteractiveContext::DefaultRenderingParams() const
+{
+  return myMainVwr->DefaultRenderingParams();
+}
index 9e7c60f55dee2e9b8985e78bb4f94317bd107a3f..acd6325f3e11c3b27b184f9376654e37beff98d1 100644 (file)
@@ -1560,6 +1560,11 @@ public:
   //! Redraws immediate structures in all views of the viewer given taking into account its visibility.
   Standard_EXPORT void RedrawImmediate (const Handle(V3d_Viewer)& theViewer);
 
+  //! Sets a new resolution for default rendering params.
+  Standard_EXPORT void SetDefaultResolution (const unsigned int theResolution);
+
+  //! Returns default rendering params.
+  Standard_EXPORT const Handle(Graphic3d_RenderingParams)& DefaultRenderingParams() const;
 
 friend class AIS_LocalContext;
 
index 55682010860ff8ebd05de9275a54aa755e8c1190..b760b918b02df4e2241082b3b495f82d842d7ffd 100644 (file)
@@ -28,6 +28,7 @@ Graphic3d_CView::Graphic3d_CView (const Handle(Graphic3d_StructureManager)& theM
   myVisualization          (Graphic3d_TOV_WIREFRAME)
 {
   myId = myStructureManager->Identification (this);
+  myRenderParams = new Graphic3d_RenderingParams();
 }
 
 //=======================================================================
index ec553769851c1116802a1c7b819a4d895de71342..084caf2f7d8245a8da1ccbee0f3372b4fee3294b 100644 (file)
@@ -396,10 +396,10 @@ public:
   Standard_EXPORT virtual void CopySettings (const Handle(Graphic3d_CView)& theOther);
 
   //! Returns current rendering parameters and effect settings.
-  const Graphic3d_RenderingParams& RenderingParams() const { return myRenderParams; }
+  const Handle(Graphic3d_RenderingParams)& RenderingParams() const { return myRenderParams; }
 
   //! Returns reference to current rendering parameters and effect settings.
-  Graphic3d_RenderingParams& ChangeRenderingParams() { return myRenderParams; }
+  Handle(Graphic3d_RenderingParams)& ChangeRenderingParams() { return myRenderParams; }
 
   //! Returns true if anti-aliasing is enabled for the view.
   virtual Standard_Boolean IsAntialiasingEnabled() const = 0;
@@ -571,7 +571,7 @@ protected:
 protected:
 
   Standard_Integer myId;
-  Graphic3d_RenderingParams myRenderParams;
+  Handle(Graphic3d_RenderingParams) myRenderParams;
   Handle(Graphic3d_StructureManager) myStructureManager;
   Graphic3d_SequenceOfStructure myStructsToCompute;
   Graphic3d_SequenceOfStructure myStructsComputed;
index b57421382f0b0954d744a380342e38f82f716d88..665c9558b44afdd335df507ea9696a7c02d7dc0f 100644 (file)
@@ -22,7 +22,7 @@
 #include <Graphic3d_Vec4.hxx>
 
 //! Helper class to store rendering parameters.
-class Graphic3d_RenderingParams
+class Graphic3d_RenderingParams : public Standard_Transient
 {
 public:
   //! Default pixels density.
@@ -103,6 +103,10 @@ public:
                                                        //!< Note that using difference resolution in different Views in same Viewer
                                                        //!< will lead to performance regression (for example, text will be recreated every time).
 
+public:
+  DEFINE_STANDARD_RTTI(Graphic3d_RenderingParams, Standard_Transient)
 };
 
+DEFINE_STANDARD_HANDLE(Graphic3d_RenderingParams, Standard_Transient)
+
 #endif // _Graphic3d_RenderingParams_HeaderFile
index 2e9c9594c0783eaa2c6e109715b1089ba815fec4..f78419290f25831b562b06ae020882b304ccd97b 100644 (file)
@@ -507,7 +507,7 @@ void OpenGl_GraphicDriver::TextSize (const Handle(Graphic3d_CView)& theView,
   aTextAspect.SetAspect(aDefaultContextText);
   TCollection_ExtendedString anExtText = theText;
   NCollection_String aText = (Standard_Utf16Char* )anExtText.ToExtString();
-  OpenGl_Text::StringSize(aCtx, aText, aTextAspect, aTextParam, theView->RenderingParams().Resolution, theWidth, theAscent, theDescent);
+  OpenGl_Text::StringSize(aCtx, aText, aTextAspect, aTextParam, theView->RenderingParams()->Resolution, theWidth, theAscent, theDescent);
 }
 
 //=======================================================================
index 412b459854ca26ae6efd817ed2877e1ca5fa34cf..27c4bd622708004280e6d78ad0a8bf7b46000d7c 100644 (file)
@@ -428,7 +428,7 @@ void OpenGl_Text::Render (const Handle(OpenGl_Workspace)& theWorkspace) const
             *aTextAspect,
             *theWorkspace->HighlightColor,
             *theWorkspace->HighlightColor,
-            theWorkspace->View()->RenderingParams().Resolution);
+            theWorkspace->View()->RenderingParams()->Resolution);
   }
   else
   {
@@ -437,7 +437,7 @@ void OpenGl_Text::Render (const Handle(OpenGl_Workspace)& theWorkspace) const
             *aTextAspect,
             aTextAspect->Color(),
             aTextAspect->SubtitleColor(),
-            theWorkspace->View()->RenderingParams().Resolution);
+            theWorkspace->View()->RenderingParams()->Resolution);
   }
 
   aCtx->BindProgram (NULL);
index 653e2c263cd0c9d0bbee93104177f4dd7c8bf167..a6fc7d57f858d748e3e8b9e06790b93057d0ae31 100644 (file)
@@ -1266,9 +1266,9 @@ Standard_Boolean OpenGl_View::initRaytraceResources (const Handle(OpenGl_Context
       }
     }
 
-    if (myRenderParams.RaytracingDepth != myRaytraceParameters.NbBounces)
+    if (myRenderParams->RaytracingDepth != myRaytraceParameters.NbBounces)
     {
-      myRaytraceParameters.NbBounces = myRenderParams.RaytracingDepth;
+      myRaytraceParameters.NbBounces = myRenderParams->RaytracingDepth;
       aToRebuildShaders = Standard_True;
     }
 
@@ -1278,15 +1278,15 @@ Standard_Boolean OpenGl_View::initRaytraceResources (const Handle(OpenGl_Context
       aToRebuildShaders = Standard_True;
     }
 
-    if (myRenderParams.IsTransparentShadowEnabled != myRaytraceParameters.TransparentShadows)
+    if (myRenderParams->IsTransparentShadowEnabled != myRaytraceParameters.TransparentShadows)
     {
-      myRaytraceParameters.TransparentShadows = myRenderParams.IsTransparentShadowEnabled;
+      myRaytraceParameters.TransparentShadows = myRenderParams->IsTransparentShadowEnabled;
       aToRebuildShaders = Standard_True;
     }
 
-    if (myRenderParams.IsGlobalIlluminationEnabled != myRaytraceParameters.GlobalIllumination)
+    if (myRenderParams->IsGlobalIlluminationEnabled != myRaytraceParameters.GlobalIllumination)
     {
-      myRaytraceParameters.GlobalIllumination = myRenderParams.IsGlobalIlluminationEnabled;
+      myRaytraceParameters.GlobalIllumination = myRenderParams->IsGlobalIlluminationEnabled;
       aToRebuildShaders = Standard_True;
     }
 
@@ -1344,7 +1344,7 @@ Standard_Boolean OpenGl_View::initRaytraceResources (const Handle(OpenGl_Context
       return safeFailBack ("Ray-tracing requires EXT_framebuffer_blit extension", theGlContext);
     }
 
-    myRaytraceParameters.NbBounces = myRenderParams.RaytracingDepth;
+    myRaytraceParameters.NbBounces = myRenderParams->RaytracingDepth;
 
     TCollection_AsciiString aFolder = Graphic3d_ShaderProgram::ShadersFolder();
 
@@ -2238,14 +2238,14 @@ Standard_Boolean OpenGl_View::setUniformState (const OpenGl_Vec3*            the
 
   // Set run-time rendering options
   theProgram->SetUniform (theGlContext,
-    myUniformLocations[theProgramId][OpenGl_RT_uShadowsEnabled], myRenderParams.IsShadowEnabled ?  1 : 0);
+    myUniformLocations[theProgramId][OpenGl_RT_uShadowsEnabled], myRenderParams->IsShadowEnabled ?  1 : 0);
   theProgram->SetUniform (theGlContext,
-    myUniformLocations[theProgramId][OpenGl_RT_uReflectEnabled], myRenderParams.IsReflectionEnabled ?  1 : 0);
+    myUniformLocations[theProgramId][OpenGl_RT_uReflectEnabled], myRenderParams->IsReflectionEnabled ?  1 : 0);
 
-  if (myRenderParams.IsGlobalIlluminationEnabled)
+  if (myRenderParams->IsGlobalIlluminationEnabled)
   {
     theProgram->SetUniform (theGlContext,
-      myUniformLocations[theProgramId][OpenGl_RT_uBlockedRngEnabled], myRenderParams.CoherentPathTracingMode ?  1 : 0);
+      myUniformLocations[theProgramId][OpenGl_RT_uBlockedRngEnabled], myRenderParams->CoherentPathTracingMode ?  1 : 0);
   }
 
   // Set array of 64-bit texture handles
@@ -2279,7 +2279,7 @@ Standard_Boolean OpenGl_View::setUniformState (const OpenGl_Vec3*            the
   }
 
   theProgram->SetUniform (theGlContext,
-    myUniformLocations[theProgramId][OpenGl_RT_uSphereMapForBack], myRenderParams.UseEnvironmentMapBackground ?  1 : 0);
+    myUniformLocations[theProgramId][OpenGl_RT_uSphereMapForBack], myRenderParams->UseEnvironmentMapBackground ?  1 : 0);
 
   return Standard_True;
 }
@@ -2373,7 +2373,7 @@ Standard_Boolean OpenGl_View::runRaytraceShaders (const Standard_Integer
 
     aRenderFramebuffer->BindBuffer (theGlContext);
   }
-  else if (myRenderParams.IsAntialiasingEnabled) // if 2-pass ray-tracing is used
+  else if (myRenderParams->IsAntialiasingEnabled) // if 2-pass ray-tracing is used
   {
     myRaytraceFBO1->BindBuffer (theGlContext);
 
@@ -2429,7 +2429,7 @@ Standard_Boolean OpenGl_View::runRaytraceShaders (const Standard_Integer
 
     ++myAccumFrames;
   }
-  else if (myRenderParams.IsAntialiasingEnabled)
+  else if (myRenderParams->IsAntialiasingEnabled)
   {
     myRaytraceFBO1->ColorTexture()->Bind (theGlContext, GL_TEXTURE0 + OpenGl_RT_FsaaInputTexture);
 
index b1c38324d7e73840b6eca247c01b8f82f85b1ca4..dbf5e805871b57183444da1818eee9e1925dd1fc 100644 (file)
@@ -251,7 +251,7 @@ void OpenGl_View::DrawBackground (const Handle(OpenGl_Workspace)& theWorkspace)
 //=======================================================================
 void OpenGl_View::Redraw()
 {
-  if (myRenderParams.Method == Graphic3d_RM_RAYTRACING
+  if (myRenderParams->Method == Graphic3d_RM_RAYTRACING
   && !myCaps->vboDisable
   && !myCaps->keepArrayData)
   {
@@ -271,7 +271,7 @@ void OpenGl_View::Redraw()
   myWindow->SetSwapInterval();
 
   ++myFrameCounter;
-  const Graphic3d_StereoMode      aStereoMode  = myRenderParams.StereoMode;
+  const Graphic3d_StereoMode      aStereoMode  = myRenderParams->StereoMode;
   Graphic3d_Camera::Projection    aProjectType = myCamera->ProjectionType();
   Handle(OpenGl_Context)          aCtx         = myWorkspace->GetGlContext();
 
@@ -501,7 +501,7 @@ void OpenGl_View::RedrawImmediate()
     return;
   }
 
-  const Graphic3d_StereoMode   aStereoMode  = myRenderParams.StereoMode;
+  const Graphic3d_StereoMode   aStereoMode  = myRenderParams->StereoMode;
   Graphic3d_Camera::Projection aProjectType = myCamera->ProjectionType();
   OpenGl_FrameBuffer*          aFrameBuffer = (OpenGl_FrameBuffer* )myFBO;
 
@@ -1029,7 +1029,7 @@ void OpenGl_View::renderStructs (OpenGl_FrameBuffer*    theReadDrawFbo,
   }
 
   Standard_Boolean toRenderGL = theToDrawImmediate ||
-    myRenderParams.Method != Graphic3d_RM_RAYTRACING ||
+    myRenderParams->Method != Graphic3d_RM_RAYTRACING ||
     myRaytraceInitStatus == OpenGl_RT_FAIL ||
     aCtx->IsFeedback();
 
@@ -1290,7 +1290,7 @@ void OpenGl_View::renderScene (OpenGl_FrameBuffer*    theReadDrawFbo,
 
     case Graphic3d_TOD_ENVIRONMENT:
       myWorkspace->NamedStatus |= OPENGL_NS_FORBIDSETTEX;
-      if (myRenderParams.Method != Graphic3d_RM_RAYTRACING)
+      if (myRenderParams->Method != Graphic3d_RM_RAYTRACING)
       {
         myWorkspace->EnableTexture (myTextureEnv);
       }
@@ -1310,7 +1310,7 @@ void OpenGl_View::renderScene (OpenGl_FrameBuffer*    theReadDrawFbo,
       if (myWorkspace->NamedStatus & OPENGL_NS_2NDPASSNEED)
       {
         myWorkspace->NamedStatus |= OPENGL_NS_2NDPASSDO;
-        if (myRenderParams.Method != Graphic3d_RM_RAYTRACING)
+        if (myRenderParams->Method != Graphic3d_RM_RAYTRACING)
         {
           myWorkspace->EnableTexture (myTextureEnv);
         }
@@ -1580,18 +1580,18 @@ void OpenGl_View::drawStereoPair()
 
   myWindow->PlatformWindow()->Position (aGeom.left, aGeom.top, aGeom.right, aGeom.bottom);
 
-  Standard_Boolean toReverse = myRenderParams.ToReverseStereo;
+  Standard_Boolean toReverse = myRenderParams->ToReverseStereo;
   const Standard_Boolean isOddY = (aGeom.top + aGeom.dy()) % 2 == 1;
   const Standard_Boolean isOddX =  aGeom.left % 2 == 1;
   if (isOddY
-   && (myRenderParams.StereoMode == Graphic3d_StereoMode_RowInterlaced
-    || myRenderParams.StereoMode == Graphic3d_StereoMode_ChessBoard))
+   && (myRenderParams->StereoMode == Graphic3d_StereoMode_RowInterlaced
+    || myRenderParams->StereoMode == Graphic3d_StereoMode_ChessBoard))
   {
     toReverse = !toReverse;
   }
   if (isOddX
-   && (myRenderParams.StereoMode == Graphic3d_StereoMode_ColumnInterlaced
-    || myRenderParams.StereoMode == Graphic3d_StereoMode_ChessBoard))
+   && (myRenderParams->StereoMode == Graphic3d_StereoMode_ColumnInterlaced
+    || myRenderParams->StereoMode == Graphic3d_StereoMode_ChessBoard))
   {
     toReverse = !toReverse;
   }
@@ -1611,14 +1611,14 @@ void OpenGl_View::drawStereoPair()
 
   const Handle(OpenGl_ShaderManager)& aManager = aCtx->ShaderManager();
   if (aVerts->IsValid()
-   && aManager->BindStereoProgram (myRenderParams.StereoMode))
+   && aManager->BindStereoProgram (myRenderParams->StereoMode))
   {
-    if (myRenderParams.StereoMode == Graphic3d_StereoMode_Anaglyph)
+    if (myRenderParams->StereoMode == Graphic3d_StereoMode_Anaglyph)
     {
       OpenGl_Mat4 aFilterL, aFilterR;
       aFilterL.SetDiagonal (Graphic3d_Vec4 (0.0f, 0.0f, 0.0f, 0.0f));
       aFilterR.SetDiagonal (Graphic3d_Vec4 (0.0f, 0.0f, 0.0f, 0.0f));
-      switch (myRenderParams.AnaglyphFilter)
+      switch (myRenderParams->AnaglyphFilter)
       {
         case Graphic3d_RenderingParams::Anaglyph_RedCyan_Simple:
         {
@@ -1667,8 +1667,8 @@ void OpenGl_View::drawStereoPair()
         }
         case Graphic3d_RenderingParams::Anaglyph_UserDefined:
         {
-          aFilterL = myRenderParams.AnaglyphLeft;
-          aFilterR = myRenderParams.AnaglyphRight;
+          aFilterL = myRenderParams->AnaglyphLeft;
+          aFilterR = myRenderParams->AnaglyphRight;
           break;
         }
       }
index 53f71e58f04dcb448dfcb53843ae0bbe64664d6a..a51cae3f2dbcb5cc0268fbff1c5ac91aaced3adb 100644 (file)
@@ -976,10 +976,10 @@ public:
   Standard_EXPORT const Handle(Graphic3d_Camera)& Camera() const;
 
   //! Returns current rendering parameters and effect settings.
-  Standard_EXPORT const Graphic3d_RenderingParams& RenderingParams() const;
+  Standard_EXPORT const Handle(Graphic3d_RenderingParams)& RenderingParams() const;
 
   //! Returns reference to current rendering parameters and effect settings.
-  Standard_EXPORT Graphic3d_RenderingParams& ChangeRenderingParams();
+  Standard_EXPORT Handle(Graphic3d_RenderingParams)& ChangeRenderingParams();
 
   //! @return flag value of objects culling mechanism
   Standard_EXPORT Standard_Boolean IsCullingEnabled() const;
index 43379e54e2447b33b1e9fcd12749ae8efaf765b0..e2363c66aba701e9baad3e92401634be54d460f1 100644 (file)
@@ -65,7 +65,7 @@ Standard_Boolean V3d_View::IsGLLightEnabled() const
 //function : RenderingParams
 //purpose  :
 //=============================================================================
-const Graphic3d_RenderingParams& V3d_View::RenderingParams() const
+const Handle(Graphic3d_RenderingParams)& V3d_View::RenderingParams() const
 {
   return myView->RenderingParams();
 }
@@ -74,7 +74,7 @@ const Graphic3d_RenderingParams& V3d_View::RenderingParams() const
 //function : ChangeRenderingParams
 //purpose  :
 //=============================================================================
-Graphic3d_RenderingParams& V3d_View::ChangeRenderingParams()
+Handle(Graphic3d_RenderingParams)& V3d_View::ChangeRenderingParams()
 {
   return myView->ChangeRenderingParams();
 }
index 497ad06a34cb734e1ca6d7a4d73cd210bfa2cb36..4adbe6c55bdc2d0d89c2d3a6c2ab5294bcf1f454 100644 (file)
@@ -86,6 +86,9 @@ myZLayerGenId (1, IntegerLast())
   myRGrid = new V3d_RectangularGrid (this, Color1, Color2);
   myCGrid = new V3d_CircularGrid (this, Color1, Color2);
   myGridType = Aspect_GT_Rectangular;
+
+  // Create the default rendering params.
+  myDefaultRenderingParams = new Graphic3d_RenderingParams();
 }
 
 // ========================================================================
@@ -94,7 +97,10 @@ myZLayerGenId (1, IntegerLast())
 // ========================================================================
 Handle(V3d_View) V3d_Viewer::CreateView ()
 {
-  return new V3d_View(this, MyDefaultTypeOfView);
+  Handle(V3d_View) aNewView = new V3d_View(this, MyDefaultTypeOfView);
+  aNewView->ChangeRenderingParams() = myDefaultRenderingParams;
+
+  return aNewView;
 }
 
 // ========================================================================
@@ -534,3 +540,12 @@ void V3d_Viewer::IncrCount()
 {
   myNextCount++;
 }
+
+//=======================================================================
+//function : DefaultRenderingParams
+//purpose  :
+//=======================================================================
+Handle(Graphic3d_RenderingParams)& V3d_Viewer::DefaultRenderingParams()
+{
+  return myDefaultRenderingParams;
+}
index 29fcb98fabc78cdab79f25dc70b9e5913190d318..656588facf0171e32531e23950b4b1a50e8e32d6 100644 (file)
@@ -439,6 +439,8 @@ public:
 
   Standard_EXPORT Standard_CString Domain() const;
 
+  Standard_EXPORT Handle(Graphic3d_RenderingParams)& DefaultRenderingParams();
+
 friend class V3d_View;
 friend class V3d_Light;
 
@@ -505,6 +507,8 @@ private:
   Graphic3d_Vertex myGridEchoLastVert;
   TColStd_MapOfInteger myLayerIds;
   Aspect_GenId myZLayerGenId;
+
+  Handle(Graphic3d_RenderingParams) myDefaultRenderingParams;
 };
 
 #endif // _V3d_Viewer_HeaderFile
index a16b9360876ed72cf9fc71d7ec644c9e2267b243..1ab07ac1ad973f6599d80f4c7261ee0d6f71ffa6 100644 (file)
@@ -1986,7 +1986,7 @@ static LRESULT WINAPI ViewerWindowProc( HWND hwnd,
     case WM_MOVE:
     case WM_MOVING:
     case WM_SIZING:
-      switch (aView->RenderingParams().StereoMode)
+      switch (aView->RenderingParams()->StereoMode)
       {
         case Graphic3d_StereoMode_RowInterlaced:
         case Graphic3d_StereoMode_ColumnInterlaced:
@@ -5097,9 +5097,9 @@ static int VFps (Draw_Interpretor& theDI,
         << "CPU: " << (1000.0 * aCpuAver) << " msec\n";
 
   // compute additional statistics in ray-tracing mode
-  Graphic3d_RenderingParams& aParams = aView->ChangeRenderingParams();
+  Handle(Graphic3d_RenderingParams) aParams = aView->ChangeRenderingParams();
 
-  if (aParams.Method == Graphic3d_RM_RAYTRACING)
+  if (aParams->Method == Graphic3d_RM_RAYTRACING)
   {
     Standard_Integer aSizeX;
     Standard_Integer aSizeY;
@@ -5107,7 +5107,7 @@ static int VFps (Draw_Interpretor& theDI,
     aView->Window()->Size (aSizeX, aSizeY);
 
     // 1 shadow ray and 1 secondary ray pew each bounce
-    const Standard_Real aMRays = aSizeX * aSizeY * aFpsAver * aParams.RaytracingDepth * 2 / 1.0e6f;
+    const Standard_Real aMRays = aSizeX * aSizeY * aFpsAver * aParams->RaytracingDepth * 2 / 1.0e6f;
 
     theDI << "MRays/sec (upper bound): " << aMRays << "\n";
   }
@@ -7338,12 +7338,12 @@ static int VStereo (Draw_Interpretor& theDI,
     return 0;
   }
 
-  Handle(Graphic3d_Camera) aCamera;
-  Graphic3d_RenderingParams*   aParams   = NULL;
-  Graphic3d_StereoMode         aMode     = Graphic3d_StereoMode_QuadBuffer;
+  Handle(Graphic3d_Camera)          aCamera;
+  Handle(Graphic3d_RenderingParams) aParams   = NULL;
+  Graphic3d_StereoMode              aMode     = Graphic3d_StereoMode_QuadBuffer;
   if (!aView.IsNull())
   {
-    aParams   = &aView->ChangeRenderingParams();
+    aParams   = aView->ChangeRenderingParams();
     aMode     = aParams->StereoMode;
     aCamera   = aView->Camera();
   }
@@ -8118,14 +8118,14 @@ static Standard_Integer VRenderParams (Draw_Interpretor& theDI,
     return 1;
   }
 
-  Graphic3d_RenderingParams& aParams = aView->ChangeRenderingParams();
+  Handle(Graphic3d_RenderingParams) aParams = aView->ChangeRenderingParams();
   TCollection_AsciiString aCmdName (theArgVec[0]);
   aCmdName.LowerCase();
   if (aCmdName == "vraytrace")
   {
     if (theArgNb == 1)
     {
-      theDI << (aParams.Method == Graphic3d_RM_RAYTRACING ? "on" : "off") << " ";
+      theDI << (aParams->Method == Graphic3d_RM_RAYTRACING ? "on" : "off") << " ";
       return 0;
     }
     else if (theArgNb == 2)
@@ -8135,14 +8135,14 @@ static Standard_Integer VRenderParams (Draw_Interpretor& theDI,
       if (aValue == "on"
        || aValue == "1")
       {
-        aParams.Method = Graphic3d_RM_RAYTRACING;
+        aParams->Method = Graphic3d_RM_RAYTRACING;
         aView->Redraw();
         return 0;
       }
       else if (aValue == "off"
             || aValue == "0")
       {
-        aParams.Method = Graphic3d_RM_RASTERIZATION;
+        aParams->Method = Graphic3d_RM_RASTERIZATION;
         aView->Redraw();
         return 0;
       }
@@ -8162,19 +8162,19 @@ static Standard_Integer VRenderParams (Draw_Interpretor& theDI,
   if (theArgNb < 2)
   {
     theDI << "renderMode:  ";
-    switch (aParams.Method)
+    switch (aParams->Method)
     {
       case Graphic3d_RM_RASTERIZATION: theDI << "rasterization "; break;
       case Graphic3d_RM_RAYTRACING:    theDI << "raytrace ";      break;
     }
     theDI << "\n";
-    theDI << "fsaa:         " << (aParams.IsAntialiasingEnabled       ? "on" : "off") << "\n";
-    theDI << "shadows:      " << (aParams.IsShadowEnabled             ? "on" : "off") << "\n";
-    theDI << "reflections:  " << (aParams.IsReflectionEnabled         ? "on" : "off") << "\n";
-    theDI << "rayDepth:     " <<  aParams.RaytracingDepth                             << "\n";
-    theDI << "gleam:        " << (aParams.IsTransparentShadowEnabled  ? "on" : "off") << "\n";
-    theDI << "GI:           " << (aParams.IsGlobalIlluminationEnabled ? "on" : "off") << "\n";
-    theDI << "blocked RNG:  " << (aParams.CoherentPathTracingMode     ? "on" : "off") << "\n";
+    theDI << "fsaa:         " << (aParams->IsAntialiasingEnabled       ? "on" : "off") << "\n";
+    theDI << "shadows:      " << (aParams->IsShadowEnabled             ? "on" : "off") << "\n";
+    theDI << "reflections:  " << (aParams->IsReflectionEnabled         ? "on" : "off") << "\n";
+    theDI << "rayDepth:     " <<  aParams->RaytracingDepth                             << "\n";
+    theDI << "gleam:        " << (aParams->IsTransparentShadowEnabled  ? "on" : "off") << "\n";
+    theDI << "GI:           " << (aParams->IsGlobalIlluminationEnabled ? "on" : "off") << "\n";
+    theDI << "blocked RNG:  " << (aParams->CoherentPathTracingMode     ? "on" : "off") << "\n";
     theDI << "shadingModel: ";
     switch (aView->ShadingModel())
     {
@@ -8210,7 +8210,7 @@ static Standard_Integer VRenderParams (Draw_Interpretor& theDI,
     {
       if (toPrint)
       {
-        switch (aParams.Method)
+        switch (aParams->Method)
         {
           case Graphic3d_RM_RASTERIZATION: theDI << "rasterization "; break;
           case Graphic3d_RM_RAYTRACING:    theDI << "ray-tracing ";   break;
@@ -8228,11 +8228,11 @@ static Standard_Integer VRenderParams (Draw_Interpretor& theDI,
     {
       if (toPrint)
       {
-        theDI << (aParams.Method == Graphic3d_RM_RAYTRACING ? "true" : "false") << " ";
+        theDI << (aParams->Method == Graphic3d_RM_RAYTRACING ? "true" : "false") << " ";
         continue;
       }
 
-      aParams.Method = Graphic3d_RM_RAYTRACING;
+      aParams->Method = Graphic3d_RM_RAYTRACING;
     }
     else if (aFlag == "-rast"
           || aFlag == "-raster"
@@ -8240,18 +8240,18 @@ static Standard_Integer VRenderParams (Draw_Interpretor& theDI,
     {
       if (toPrint)
       {
-        theDI << (aParams.Method == Graphic3d_RM_RASTERIZATION ? "true" : "false") << " ";
+        theDI << (aParams->Method == Graphic3d_RM_RASTERIZATION ? "true" : "false") << " ";
         continue;
       }
 
-      aParams.Method = Graphic3d_RM_RASTERIZATION;
+      aParams->Method = Graphic3d_RM_RASTERIZATION;
     }
     else if (aFlag == "-raydepth"
           || aFlag == "-ray_depth")
     {
       if (toPrint)
       {
-        theDI << aParams.RaytracingDepth << " ";
+        theDI << aParams->RaytracingDepth << " ";
         continue;
       }
       else if (++anArgIter >= theArgNb)
@@ -8263,14 +8263,14 @@ static Standard_Integer VRenderParams (Draw_Interpretor& theDI,
       const Standard_Integer aDepth = Draw::Atoi (theArgVec[anArgIter]);
 
       // We allow RaytracingDepth be more than 10 in case of GI enabled
-      if (aDepth < 1 || (aDepth > 10 && !aParams.IsGlobalIlluminationEnabled))
+      if (aDepth < 1 || (aDepth > 10 && !aParams->IsGlobalIlluminationEnabled))
       {
         std::cerr << "Error: invalid ray-tracing depth " << aDepth << ". Should be within range [1; 10]\n";
         return 1;
       }
       else
       {
-        aParams.RaytracingDepth = aDepth;
+        aParams->RaytracingDepth = aDepth;
       }
     }
     else if (aFlag == "-shad"
@@ -8278,7 +8278,7 @@ static Standard_Integer VRenderParams (Draw_Interpretor& theDI,
     {
       if (toPrint)
       {
-        theDI << (aParams.IsShadowEnabled ? "on" : "off") << " ";
+        theDI << (aParams->IsShadowEnabled ? "on" : "off") << " ";
         continue;
       }
 
@@ -8288,14 +8288,14 @@ static Standard_Integer VRenderParams (Draw_Interpretor& theDI,
       {
         --anArgIter;
       }
-      aParams.IsShadowEnabled = toEnable;
+      aParams->IsShadowEnabled = toEnable;
     }
     else if (aFlag == "-refl"
           || aFlag == "-reflections")
     {
       if (toPrint)
       {
-        theDI << (aParams.IsReflectionEnabled ? "on" : "off") << " ";
+        theDI << (aParams->IsReflectionEnabled ? "on" : "off") << " ";
         continue;
       }
 
@@ -8305,13 +8305,13 @@ static Standard_Integer VRenderParams (Draw_Interpretor& theDI,
       {
         --anArgIter;
       }
-      aParams.IsReflectionEnabled = toEnable;
+      aParams->IsReflectionEnabled = toEnable;
     }
     else if (aFlag == "-fsaa")
     {
       if (toPrint)
       {
-        theDI << (aParams.IsAntialiasingEnabled ? "on" : "off") << " ";
+        theDI << (aParams->IsAntialiasingEnabled ? "on" : "off") << " ";
         continue;
       }
 
@@ -8321,13 +8321,13 @@ static Standard_Integer VRenderParams (Draw_Interpretor& theDI,
       {
         --anArgIter;
       }
-      aParams.IsAntialiasingEnabled = toEnable;
+      aParams->IsAntialiasingEnabled = toEnable;
     }
     else if (aFlag == "-gleam")
     {
       if (toPrint)
       {
-        theDI << (aParams.IsTransparentShadowEnabled ? "on" : "off") << " ";
+        theDI << (aParams->IsTransparentShadowEnabled ? "on" : "off") << " ";
         continue;
       }
 
@@ -8337,13 +8337,13 @@ static Standard_Integer VRenderParams (Draw_Interpretor& theDI,
       {
         --anArgIter;
       }
-      aParams.IsTransparentShadowEnabled = toEnable;
+      aParams->IsTransparentShadowEnabled = toEnable;
     }
     else if (aFlag == "-gi")
     {
       if (toPrint)
       {
-        theDI << (aParams.IsGlobalIlluminationEnabled ? "on" : "off") << " ";
+        theDI << (aParams->IsGlobalIlluminationEnabled ? "on" : "off") << " ";
         continue;
       }
 
@@ -8353,10 +8353,10 @@ static Standard_Integer VRenderParams (Draw_Interpretor& theDI,
       {
         --anArgIter;
       }
-      aParams.IsGlobalIlluminationEnabled = toEnable;
+      aParams->IsGlobalIlluminationEnabled = toEnable;
       if (!toEnable)
       {
-        aParams.RaytracingDepth = Min (aParams.RaytracingDepth, 10);
+        aParams->RaytracingDepth = Min (aParams->RaytracingDepth, 10);
       }
     }
     else if (aFlag == "-blockedrng"
@@ -8364,7 +8364,7 @@ static Standard_Integer VRenderParams (Draw_Interpretor& theDI,
     {
       if (toPrint)
       {
-        theDI << (aParams.CoherentPathTracingMode ? "on" : "off") << " ";
+        theDI << (aParams->CoherentPathTracingMode ? "on" : "off") << " ";
         continue;
       }
 
@@ -8374,13 +8374,13 @@ static Standard_Integer VRenderParams (Draw_Interpretor& theDI,
       {
         --anArgIter;
       }
-      aParams.CoherentPathTracingMode = toEnable;
+      aParams->CoherentPathTracingMode = toEnable;
     }
     else if (aFlag == "-env")
     {
       if (toPrint)
       {
-        theDI << (aParams.UseEnvironmentMapBackground ? "on" : "off") << " ";
+        theDI << (aParams->UseEnvironmentMapBackground ? "on" : "off") << " ";
         continue;
       }
 
@@ -8390,7 +8390,7 @@ static Standard_Integer VRenderParams (Draw_Interpretor& theDI,
       {
         --anArgIter;
       }
-      aParams.UseEnvironmentMapBackground = toEnable;
+      aParams->UseEnvironmentMapBackground = toEnable;
     }
     else if (aFlag == "-shademodel"
           || aFlag == "-shadingmodel"
@@ -8455,7 +8455,7 @@ static Standard_Integer VRenderParams (Draw_Interpretor& theDI,
       TCollection_AsciiString aResolution (theArgVec[anArgIter]);
       if (aResolution.IsIntegerValue())
       {
-        aView->ChangeRenderingParams().Resolution = static_cast<unsigned int> (Draw::Atoi (aResolution.ToCString()));
+        aView->ChangeRenderingParams()->Resolution = static_cast<unsigned int> (Draw::Atoi (aResolution.ToCString()));
       }
       else
       {