From: kgv Date: Fri, 11 Nov 2016 15:20:49 +0000 (+0300) Subject: 0028093: Visualization - access violation on removal of dynamic highlighting after... X-Git-Tag: V7_1_0~30 X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=ef9a9362ae805f29204577131cd525cb49fed11f;p=occt.git 0028093: Visualization - access violation on removal of dynamic highlighting after device loss OpenGl_Layer::Remove() now tries to remove object from myAlwaysRenderedMap if it was not removed from other groups. --- diff --git a/src/OpenGl/OpenGl_Layer.cxx b/src/OpenGl/OpenGl_Layer.cxx index 24585779bd..6b6c05e3a2 100644 --- a/src/OpenGl/OpenGl_Layer.cxx +++ b/src/OpenGl/OpenGl_Layer.cxx @@ -108,20 +108,24 @@ bool OpenGl_Layer::Remove (const OpenGl_Structure* theStruct, if (!isForChangePriority) { - if (theStruct->IsAlwaysRendered()) + Standard_Boolean isAlwaysRend = theStruct->IsAlwaysRendered(); + if (!isAlwaysRend) { - const Standard_Integer anIndex2 = myAlwaysRenderedMap.FindIndex (theStruct); - if (anIndex2 != 0) + if (!myBVHPrimitives.Remove (theStruct)) { - myAlwaysRenderedMap.Swap (myAlwaysRenderedMap.Size(), anIndex2); - myAlwaysRenderedMap.RemoveLast(); + if (!myBVHPrimitivesTrsfPers.Remove (theStruct)) + { + isAlwaysRend = Standard_True; + } } } - else + if (isAlwaysRend) { - if (!myBVHPrimitives.Remove (theStruct)) + const Standard_Integer anIndex2 = myAlwaysRenderedMap.FindIndex (theStruct); + if (anIndex2 != 0) { - myBVHPrimitivesTrsfPers.Remove (theStruct); + myAlwaysRenderedMap.Swap (myAlwaysRenderedMap.Size(), anIndex2); + myAlwaysRenderedMap.RemoveLast(); } } } diff --git a/tests/bugs/vis/bug28093 b/tests/bugs/vis/bug28093 new file mode 100644 index 0000000000..e55f517a05 --- /dev/null +++ b/tests/bugs/vis/bug28093 @@ -0,0 +1,18 @@ +puts "===========" +puts "OCC28093" +puts "Visualization - access violation on removal of dynamic highlighting after device loss" +puts "===========" +puts "" + +pload MODELING VISUALIZATION +box b 1 2 3 +vclear +vinit View1 +vdisplay -dispMode 1 -highMode 1 b +vfit + +vmoveto 250 250 +vraytrace 1 +vmoveto 400 400 + +vdump $imagedir/${casename}.png