0031015: Visualization, TKOpenGl - OpenGl_WorldViewState does not cache inverted...
authorkgv <kgv@opencascade.com>
Tue, 1 Oct 2019 05:27:57 +0000 (08:27 +0300)
committerbugmaster <bugmaster@opencascade.com>
Tue, 19 Nov 2019 15:58:54 +0000 (18:58 +0300)
Implementation has been fixed to proprely set myInverseNeedUpdate flag.

src/OpenGl/OpenGl_ShaderStates.cxx
src/OpenGl/OpenGl_ShaderStates.hxx

index 2aeaf26..c6b03f2 100755 (executable)
@@ -46,27 +46,16 @@ void OpenGl_ProjectionState::Set (const OpenGl_Mat4& theProjectionMatrix)
 }
 
 // =======================================================================
-// function : ProjectionMatrix
-// purpose  : Returns current projection matrix
-// =======================================================================
-const OpenGl_Mat4& OpenGl_ProjectionState::ProjectionMatrix() const
-{
-  return myProjectionMatrix;
-}
-
-// =======================================================================
 // function : ProjectionMatrixInverse
 // purpose  : Returns inverse of current projection matrix
 // =======================================================================
 const OpenGl_Mat4& OpenGl_ProjectionState::ProjectionMatrixInverse() const
 {
-  if (!myInverseNeedUpdate)
+  if (myInverseNeedUpdate)
   {
-    return myProjectionMatrixInverse;
+    myInverseNeedUpdate = false;
+    myProjectionMatrix.Inverted (myProjectionMatrixInverse);
   }
-
-  myProjectionMatrix.Inverted (myProjectionMatrixInverse);
-
   return myProjectionMatrixInverse;
 }
 
@@ -91,27 +80,16 @@ void OpenGl_ModelWorldState::Set (const OpenGl_Mat4& theModelWorldMatrix)
 }
 
 // =======================================================================
-// function : ModelWorldMatrix
-// purpose  : Returns current model-world matrix
-// =======================================================================
-const OpenGl_Mat4& OpenGl_ModelWorldState::ModelWorldMatrix() const
-{
-  return myModelWorldMatrix;
-}
-
-// =======================================================================
 // function : ModelWorldMatrixInverse
 // purpose  : Returns inverse of current model-world matrix
 // =======================================================================
 const OpenGl_Mat4& OpenGl_ModelWorldState::ModelWorldMatrixInverse() const
 {
-  if (!myInverseNeedUpdate)
+  if (myInverseNeedUpdate)
   {
-    return myModelWorldMatrix;
+    myInverseNeedUpdate = false;
+    myModelWorldMatrix.Inverted (myModelWorldMatrixInverse);
   }
-
-  myModelWorldMatrix.Inverted (myModelWorldMatrixInverse);
-
   return myModelWorldMatrixInverse;
 }
 
@@ -136,27 +114,16 @@ void OpenGl_WorldViewState::Set (const OpenGl_Mat4& theWorldViewMatrix)
 }
 
 // =======================================================================
-// function : WorldViewMatrix
-// purpose  : Returns current world-view matrix
-// =======================================================================
-const OpenGl_Mat4& OpenGl_WorldViewState::WorldViewMatrix() const
-{
-  return myWorldViewMatrix;
-}
-
-// =======================================================================
 // function : WorldViewMatrixInverse
 // purpose  : Returns inverse of current world-view matrix
 // =======================================================================
 const OpenGl_Mat4& OpenGl_WorldViewState::WorldViewMatrixInverse() const
 {
-  if (!myInverseNeedUpdate)
+  if (myInverseNeedUpdate)
   {
-    return myWorldViewMatrix;
+    myInverseNeedUpdate = false;
+    myWorldViewMatrix.Inverted (myWorldViewMatrixInverse);
   }
-
-  myWorldViewMatrix.Inverted (myWorldViewMatrixInverse);
-
   return myWorldViewMatrixInverse;
 }
 
index bebd349..9f25334 100755 (executable)
@@ -53,7 +53,7 @@ public:
   Standard_EXPORT void Set (const OpenGl_Mat4& theProjectionMatrix);
 
   //! Returns current projection matrix.
-  Standard_EXPORT const OpenGl_Mat4& ProjectionMatrix() const;
+  const OpenGl_Mat4& ProjectionMatrix() const { return myProjectionMatrix; }
 
   //! Returns inverse of current projection matrix.
   Standard_EXPORT const OpenGl_Mat4& ProjectionMatrixInverse() const;
@@ -62,7 +62,7 @@ private:
 
   OpenGl_Mat4         myProjectionMatrix;        //!< OCCT projection matrix
   mutable OpenGl_Mat4 myProjectionMatrixInverse; //!< Inverse of OCCT projection matrix
-  bool                myInverseNeedUpdate;       //!< Is inversed matrix outdated?
+  mutable bool        myInverseNeedUpdate;       //!< Is inversed matrix outdated?
 
 };
 
@@ -78,7 +78,7 @@ public:
   Standard_EXPORT void Set (const OpenGl_Mat4& theModelWorldMatrix);
 
   //! Returns current model-world matrix.
-  Standard_EXPORT const OpenGl_Mat4& ModelWorldMatrix() const;
+  const OpenGl_Mat4& ModelWorldMatrix() const { return myModelWorldMatrix; }
 
   //! Returns inverse of current model-world matrix.
   Standard_EXPORT const OpenGl_Mat4& ModelWorldMatrixInverse() const;
@@ -87,7 +87,7 @@ private:
 
   OpenGl_Mat4         myModelWorldMatrix;        //!< OCCT model-world matrix
   mutable OpenGl_Mat4 myModelWorldMatrixInverse; //!< Inverse of OCCT model-world matrix
-  bool                myInverseNeedUpdate;       //!< Is inversed matrix outdated?
+  mutable bool        myInverseNeedUpdate;       //!< Is inversed matrix outdated?
   
 };
 
@@ -103,7 +103,7 @@ public:
   Standard_EXPORT void Set (const OpenGl_Mat4& theWorldViewMatrix);
 
   //! Returns current world-view matrix.
-  Standard_EXPORT const OpenGl_Mat4& WorldViewMatrix() const;
+  const OpenGl_Mat4& WorldViewMatrix() const { return myWorldViewMatrix; }
 
   //! Returns inverse of current world-view matrix.
   Standard_EXPORT const OpenGl_Mat4& WorldViewMatrixInverse() const;
@@ -112,7 +112,7 @@ private:
 
   OpenGl_Mat4         myWorldViewMatrix;        //!< OCCT world-view matrix
   mutable OpenGl_Mat4 myWorldViewMatrixInverse; //!< Inverse of OCCT world-view matrix
-  bool                myInverseNeedUpdate;      //!< Is inversed matrix outdated?
+  mutable bool        myInverseNeedUpdate;      //!< Is inversed matrix outdated?
 
 };