0026641: Visualization, TKOpenGl - handle correctly transformation persistence within...
[occt.git] / src / OpenGl / OpenGl_Structure.cxx
index 9d93bff..05d0dd6 100644 (file)
@@ -474,6 +474,20 @@ void OpenGl_Structure::Render (const Handle(OpenGl_Workspace) &theWorkspace) con
   aCtx->ModelWorldState.Push();
   aCtx->ModelWorldState.SetCurrent (Transformation);
 
+  const Standard_Boolean anOldGlNormalize = aCtx->IsGlNormalizeEnabled();
+
+#if !defined(GL_ES_VERSION_2_0)
+  // detect scale transform
+  if (aCtx->core11 != NULL)
+  {
+    const Standard_ShortReal aScaleX = Transformation.GetRow (0).xyz().SquareModulus();
+    if (Abs (aScaleX - 1.f) > Precision::Confusion())
+    {
+      aCtx->SetGlNormalizeEnabled (Standard_True);
+    }
+  }
+#endif
+
   if (TransformPersistence.Flags)
   {
     OpenGl_Mat4 aProjection = aCtx->ProjectionState.Current();
@@ -485,14 +499,18 @@ void OpenGl_Structure::Render (const Handle(OpenGl_Workspace) &theWorkspace) con
     aCtx->ProjectionState.SetCurrent (aProjection);
     aCtx->WorldViewState.SetCurrent (aWorldView);
     aCtx->ApplyProjectionMatrix();
-  }
 
-  // detect scale transform
-  const Standard_Boolean   anOldGlNormalize = aCtx->IsGlNormalizeEnabled();
-  const Standard_ShortReal aScaleX          = aCtx->ModelWorldState.Current().GetRow (0).xyz().SquareModulus();
-  if (Abs (aScaleX - 1.f) > Precision::Confusion())
-  {
-    aCtx->SetGlNormalizeEnabled (Standard_True);
+  #if !defined(GL_ES_VERSION_2_0)
+    if (!aCtx->IsGlNormalizeEnabled()
+      && aCtx->core11 != NULL)
+    {
+      const Standard_Real aScale = Graphic3d_TransformUtils::ScaleFactor<Standard_ShortReal> (aWorldView);
+      if (Abs (aScale - 1.0f) > Precision::Confusion())
+      {
+        aCtx->SetGlNormalizeEnabled (Standard_True);
+      }
+    }
+  #endif
   }
 
   // Take into account transform persistence