const Standard_Boolean anOldGlNormalize = aCtx->IsGlNormalizeEnabled();
// Apply local transformation
- OpenGl_Mat4 aModelWorld;
if (myTransformation)
{
- OpenGl_Transposemat3 ((OpenGl_Matrix*)aModelWorld.ChangeData(), myTransformation);
+ OpenGl_Matrix aModelWorld;
+ OpenGl_Transposemat3 (&aModelWorld, myTransformation);
+ aCtx->ModelWorldState.Push();
+ aCtx->ModelWorldState.SetCurrent (OpenGl_Mat4::Map ((Standard_ShortReal* )aModelWorld.mat));
- Standard_ShortReal aScaleX = OpenGl_Vec3 (aModelWorld.GetValue (0, 0),
- aModelWorld.GetValue (1, 0),
- aModelWorld.GetValue (2, 0)).SquareModulus();
+ Standard_ShortReal aScaleX = OpenGl_Vec3 (myTransformation->mat[0][0],
+ myTransformation->mat[0][1],
+ myTransformation->mat[0][2]).SquareModulus();
// Scale transform detected.
if (Abs (aScaleX - 1.f) > Precision::Confusion())
{
aCtx->SetGlNormalizeEnabled (Standard_True);
}
-
- aCtx->ModelWorldState.Push();
- aCtx->ModelWorldState.SetCurrent (aModelWorld);
}
if (TransformPersistence.Flags)
{
aCtx->WorldViewState.SetCurrent (aWorldView);
aCtx->ApplyProjectionMatrix();
}
- if (aModelWorld || TransformPersistence.Flags)
- {
- aCtx->ApplyModelViewMatrix();
- }
+ // Take into account transform persistence
+ aCtx->ApplyModelViewMatrix();
// Apply aspects
const OpenGl_AspectLine *anAspectLine = theWorkspace->AspectLine (Standard_False);
}
// Restore local transformation
- if (!aModelWorld.IsIdentity())
+ if (myTransformation)
{
aCtx->ModelWorldState.Pop();
aCtx->SetGlNormalizeEnabled (anOldGlNormalize);
aCtx->WorldViewState.Pop();
aCtx->ApplyProjectionMatrix();
}
- if (!aModelWorld.IsIdentity() || TransformPersistence.Flags)
- {
- aCtx->ApplyWorldViewMatrix();
- }
// Restore highlight color
theWorkspace->HighlightColor = aHighlightColor;
--- /dev/null
+puts "============"
+puts "OCC26538"
+puts "============"
+puts ""
+#######################################################################
+# Visualization - Infinite growth of maxtrix stack in OpenGl_Structure::Render
+#######################################################################
+
+box b1 1 1 1
+box b2 1 1 1
+
+vinit
+vdisplay b1
+vdisplay b2
+vsetlocation b2 10 10 10
+vfit
+
+set listmem {}
+
+set i_max 3
+for {set i 1} {${i} <= ${i_max}} {incr i} {
+ vfps 1000
+ lappend listmem [meminfo h]
+ checktrend $listmem 0 1 "Memory leak detected"
+}
+
+vdump ${imagedir}/${casename}.png