Loading common/drawframe.cpp +0 −4 Original line number Original line Diff line number Diff line Loading @@ -947,7 +947,6 @@ void EDA_DRAW_FRAME::UseGalCanvas( bool aEnable ) if( aEnable && m_galCanvasActive ) if( aEnable && m_galCanvasActive ) { { // When we switch between GAL based canvases, all we need is a refresh // When we switch between GAL based canvases, all we need is a refresh view->RecacheAllItems( true ); m_galCanvas->Refresh(); m_galCanvas->Refresh(); } } Loading Loading @@ -981,9 +980,6 @@ void EDA_DRAW_FRAME::UseGalCanvas( bool aEnable ) m_auimgr.GetPane( wxT( "DrawFrameGal" ) ).Show( aEnable ); m_auimgr.GetPane( wxT( "DrawFrameGal" ) ).Show( aEnable ); m_auimgr.Update(); m_auimgr.Update(); if( aEnable ) view->RecacheAllItems( true ); m_galCanvasActive = aEnable; m_galCanvasActive = aEnable; #endif /* KICAD_GAL */ #endif /* KICAD_GAL */ } } common/drawpanel_gal.cpp +4 −1 Original line number Original line Diff line number Diff line Loading @@ -71,7 +71,7 @@ EDA_DRAW_PANEL_GAL::EDA_DRAW_PANEL_GAL( wxWindow* aParentWindow, wxWindowID aWin m_view->SetGAL( m_gal ); m_view->SetGAL( m_gal ); // View uses layers to display EDA_ITEMs (item may be displayed on several layers, for example // View uses layers to display EDA_ITEMs (item may be displayed on several layers, for example // pad may be shown on pad, pad hole nad solder paste layers). There are usual copper layers // pad may be shown on pad, pad hole and solder paste layers). There are usual copper layers // (eg. F.Cu, B.Cu, internal and so on) and layers for displaying objects such as texts, // (eg. F.Cu, B.Cu, internal and so on) and layers for displaying objects such as texts, // silkscreen, pads, vias, etc. // silkscreen, pads, vias, etc. for( int i = 0; i < TOTAL_LAYER_COUNT; i++ ) for( int i = 0; i < TOTAL_LAYER_COUNT; i++ ) Loading Loading @@ -154,7 +154,10 @@ void EDA_DRAW_PANEL_GAL::SwitchBackend( GalType aGalType, bool aUseShaders ) m_gal->ComputeWorldScreenMatrix(); m_gal->ComputeWorldScreenMatrix(); if( m_view ) if( m_view ) { m_view->SetGAL( m_gal ); m_view->SetGAL( m_gal ); m_view->RecacheAllItems( true ); } wxSize size = GetClientSize(); wxSize size = GetClientSize(); m_gal->ResizeScreen( size.GetX(), size.GetY() ); m_gal->ResizeScreen( size.GetX(), size.GetY() ); Loading common/gal/opengl/opengl_gal.cpp +24 −16 Original line number Original line Diff line number Diff line Loading @@ -68,11 +68,12 @@ OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener, isFrameBufferInitialized = false; isFrameBufferInitialized = false; isUseShader = isUseShaders; isUseShader = isUseShaders; isShaderInitialized = false; isShaderInitialized = false; isGroupStarted = false; isGrouping = false; shaderPath = "../../common/gal/opengl/shader/"; shaderPath = "../../common/gal/opengl/shader/"; wxSize parentSize = aParent->GetSize(); wxSize parentSize = aParent->GetSize(); isVboInitialized = false; isVboInitialized = false; vboNeedsUpdate = false; curVboItem = NULL; curVboItem = NULL; vboSize = 0; vboSize = 0; Loading Loading @@ -110,13 +111,6 @@ OPENGL_GAL::~OPENGL_GAL() { { glFlush(); glFlush(); // Delete the stored display lists for( std::deque<GLuint>::iterator group = displayListsGroup.begin(); group != displayListsGroup.end(); group++ ) { glDeleteLists( *group, 1 ); } // Delete the buffers // Delete the buffers if( isFrameBufferInitialized ) if( isFrameBufferInitialized ) { { Loading @@ -126,6 +120,12 @@ OPENGL_GAL::~OPENGL_GAL() if( isVboInitialized ) if( isVboInitialized ) { { std::deque<VBO_ITEM*>::iterator it, end; for( it = vboItems.begin(), end = vboItems.end(); it != end; it++ ) { delete *it; } deleteVertexBufferObjects(); deleteVertexBufferObjects(); } } Loading Loading @@ -514,8 +514,8 @@ void OPENGL_GAL::rebuildVbo() glBufferData( GL_ELEMENT_ARRAY_BUFFER, vboSize * VBO_ITEM::IndSize, indicesBuffer, GL_DYNAMIC_DRAW ); glBufferData( GL_ELEMENT_ARRAY_BUFFER, vboSize * VBO_ITEM::IndSize, indicesBuffer, GL_DYNAMIC_DRAW ); glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 ); glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 ); delete verticesBuffer; delete[] verticesBuffer; delete indicesBuffer; delete[] indicesBuffer; vboNeedsUpdate = false; vboNeedsUpdate = false; Loading Loading @@ -607,7 +607,7 @@ inline void OPENGL_GAL::drawLineQuad( const VECTOR2D& aStartPoint, const VECTOR2 // XXX Should be improved later. // XXX Should be improved later. double scale = 0.5 * lineWidth / lineLength; double scale = 0.5 * lineWidth / lineLength; double scale1pix = 0.5001 / worldScale / lineLength; double scale1pix = 0.5001 / worldScale / lineLength; if( lineWidth * worldScale < 1.0002 && !isGroupStarted ) if( lineWidth * worldScale < 1.0002 && !isGrouping ) { { scale = scale1pix; scale = scale1pix; } } Loading Loading @@ -637,7 +637,7 @@ void OPENGL_GAL::DrawSegment( const VECTOR2D& aStartPoint, const VECTOR2D& aEndP VECTOR2D startEndVector = aEndPoint - aStartPoint; VECTOR2D startEndVector = aEndPoint - aStartPoint; double lineAngle = atan2( startEndVector.y, startEndVector.x ); double lineAngle = atan2( startEndVector.y, startEndVector.x ); if ( isGroupStarted ) if ( isGrouping ) { { // Angle of a line perpendicular to the segment being drawn // Angle of a line perpendicular to the segment being drawn double beta = ( M_PI / 2.0 ) - lineAngle; double beta = ( M_PI / 2.0 ) - lineAngle; Loading Loading @@ -1464,7 +1464,7 @@ void OPENGL_GAL::Restore() int OPENGL_GAL::BeginGroup() int OPENGL_GAL::BeginGroup() { { isGroupStarted = true; isGrouping = true; // There is a new group that is not in VBO yet // There is a new group that is not in VBO yet vboNeedsUpdate = true; vboNeedsUpdate = true; Loading @@ -1482,17 +1482,25 @@ void OPENGL_GAL::EndGroup() { { vboSize += curVboItem->GetSize(); vboSize += curVboItem->GetSize(); isGroupStarted = false; isGrouping = false; } } void OPENGL_GAL::DeleteGroup( int aGroupNumber ) void OPENGL_GAL::DeleteGroup( int aGroupNumber ) { { if( aGroupNumber >= vboItems.size() ) { // This should not happen wxLogDebug( wxT( "Tried to delete not existing group" ) ); return; } std::deque<VBO_ITEM*>::iterator it = vboItems.begin(); std::deque<VBO_ITEM*>::iterator it = vboItems.begin(); std::advance( it, aGroupNumber ); std::advance( it, aGroupNumber ); //vboSize -= it->GetSize(); // FIXME? delete *it; delete *it; vboItems.erase( it ); //vboItems.erase( it ); vboNeedsUpdate = true; vboNeedsUpdate = true; } } Loading common/gal/opengl/vbo_item.cpp +4 −1 Original line number Original line Diff line number Diff line Loading @@ -46,6 +46,9 @@ VBO_ITEM::~VBO_ITEM() { { if( m_vertices ) if( m_vertices ) delete m_vertices; delete m_vertices; if( m_indices ) delete m_indices; } } Loading Loading @@ -76,7 +79,7 @@ void VBO_ITEM::PushVertex( const GLfloat* aVertex ) m_indices = newIndices; m_indices = newIndices; // Add the new vertex // Add the new vertex newIndices[m_size] = m_offset + m_size; m_indices[m_size] = m_offset + m_size; m_size++; m_size++; m_isDirty = true; m_isDirty = true; Loading common/view/view.cpp +23 −20 Original line number Original line Diff line number Diff line Loading @@ -208,9 +208,9 @@ void VIEW::SetGAL( GAL* aGal ) if( m_painter ) if( m_painter ) m_painter->SetGAL( m_gal ); m_painter->SetGAL( m_gal ); // items need to be recached after changing GAL // clear group numbers, so everything is going to be recached //if( m_useGroups ) if( m_useGroups ) //RecacheAllItems(); clearGroupCache(); // force the new GAL to display the current viewport. // force the new GAL to display the current viewport. SetCenter( m_center ); SetCenter( m_center ); Loading Loading @@ -387,7 +387,6 @@ struct VIEW::drawItem aItem->setGroup( currentLayer, group ); aItem->setGroup( currentLayer, group ); view->m_painter->Draw( static_cast<EDA_ITEM*>( aItem ), currentLayer ); view->m_painter->Draw( static_cast<EDA_ITEM*>( aItem ), currentLayer ); gal->EndGroup(); gal->EndGroup(); //gal->DrawGroup( group ); } } } } else if( aItem->ViewIsVisible() ) else if( aItem->ViewIsVisible() ) Loading Loading @@ -460,20 +459,24 @@ struct VIEW::recacheItem void operator()( VIEW_ITEM* aItem ) void operator()( VIEW_ITEM* aItem ) { { //aItem->deleteGroups(); // Remove previously cached group /*int prevGroup = aItem->getGroup( layer ); int prevGroup = aItem->getGroup( layer ); if( prevGroup != -1 ) if( prevGroup >= 0 ) { { gal->DeleteGroup( prevGroup ); gal->DeleteGroup( prevGroup ); }*/ } if( immediately ) if( immediately ) { { int group = gal->BeginGroup(); int group = gal->BeginGroup(); aItem->setGroup( layer, group ); view->m_painter->Draw( static_cast<EDA_ITEM*>( aItem ), layer ); view->m_painter->Draw( static_cast<EDA_ITEM*>( aItem ), layer ); aItem->setGroup( layer, group ); gal->EndGroup(); gal->EndGroup(); } } else { aItem->setGroup( layer, -1 ); } } } VIEW* view; VIEW* view; Loading Loading @@ -565,12 +568,6 @@ struct VIEW::clearItemCache { { if( aItem->storesGroups() ) if( aItem->storesGroups() ) { { std::vector<int> groups = aItem->getAllGroups(); for(std::vector<int>::iterator i = groups.begin(); i != groups.end(); i++ ) { view->GetGAL()->DeleteGroup( *i ); } aItem->deleteGroups(); aItem->deleteGroups(); } } } } Loading @@ -581,6 +578,9 @@ struct VIEW::clearItemCache void VIEW::clearGroupCache() void VIEW::clearGroupCache() { { if( !m_useGroups ) return; BOX2I r; BOX2I r; r.SetMaximum(); r.SetMaximum(); Loading @@ -596,22 +596,25 @@ void VIEW::clearGroupCache() void VIEW::RecacheAllItems( bool aImmediately ) void VIEW::RecacheAllItems( bool aImmediately ) { { if( !m_useGroups ) return; BOX2I r; BOX2I r; r.SetMaximum(); r.SetMaximum(); wxLogDebug( wxT( "RecacheAllItems::immediately: %u" ), aImmediately ); //if( aImmediately ) if( aImmediately ) m_gal->BeginDrawing(); m_gal->BeginDrawing(); wxLogDebug( wxT( "RecacheAllItems::immediately: %u" ), aImmediately ); for( LayerMapIter i = m_layers.begin(); i != m_layers.end(); ++i ) for( LayerMapIter i = m_layers.begin(); i != m_layers.end(); ++i ) { { VIEW_LAYER* l = & ( ( *i ).second ); VIEW_LAYER* l = & ( ( *i ).second ); recacheItem visitor( this, m_gal, l->id, aImmediately ); recacheItem visitor( this, m_gal, l->id, aImmediately ); l->items->Query( r, visitor ); l->items->Query( r, visitor ); }; } if( aImmediately ) //if( aImmediately ) m_gal->EndDrawing(); m_gal->EndDrawing(); } } Loading
common/drawframe.cpp +0 −4 Original line number Original line Diff line number Diff line Loading @@ -947,7 +947,6 @@ void EDA_DRAW_FRAME::UseGalCanvas( bool aEnable ) if( aEnable && m_galCanvasActive ) if( aEnable && m_galCanvasActive ) { { // When we switch between GAL based canvases, all we need is a refresh // When we switch between GAL based canvases, all we need is a refresh view->RecacheAllItems( true ); m_galCanvas->Refresh(); m_galCanvas->Refresh(); } } Loading Loading @@ -981,9 +980,6 @@ void EDA_DRAW_FRAME::UseGalCanvas( bool aEnable ) m_auimgr.GetPane( wxT( "DrawFrameGal" ) ).Show( aEnable ); m_auimgr.GetPane( wxT( "DrawFrameGal" ) ).Show( aEnable ); m_auimgr.Update(); m_auimgr.Update(); if( aEnable ) view->RecacheAllItems( true ); m_galCanvasActive = aEnable; m_galCanvasActive = aEnable; #endif /* KICAD_GAL */ #endif /* KICAD_GAL */ } }
common/drawpanel_gal.cpp +4 −1 Original line number Original line Diff line number Diff line Loading @@ -71,7 +71,7 @@ EDA_DRAW_PANEL_GAL::EDA_DRAW_PANEL_GAL( wxWindow* aParentWindow, wxWindowID aWin m_view->SetGAL( m_gal ); m_view->SetGAL( m_gal ); // View uses layers to display EDA_ITEMs (item may be displayed on several layers, for example // View uses layers to display EDA_ITEMs (item may be displayed on several layers, for example // pad may be shown on pad, pad hole nad solder paste layers). There are usual copper layers // pad may be shown on pad, pad hole and solder paste layers). There are usual copper layers // (eg. F.Cu, B.Cu, internal and so on) and layers for displaying objects such as texts, // (eg. F.Cu, B.Cu, internal and so on) and layers for displaying objects such as texts, // silkscreen, pads, vias, etc. // silkscreen, pads, vias, etc. for( int i = 0; i < TOTAL_LAYER_COUNT; i++ ) for( int i = 0; i < TOTAL_LAYER_COUNT; i++ ) Loading Loading @@ -154,7 +154,10 @@ void EDA_DRAW_PANEL_GAL::SwitchBackend( GalType aGalType, bool aUseShaders ) m_gal->ComputeWorldScreenMatrix(); m_gal->ComputeWorldScreenMatrix(); if( m_view ) if( m_view ) { m_view->SetGAL( m_gal ); m_view->SetGAL( m_gal ); m_view->RecacheAllItems( true ); } wxSize size = GetClientSize(); wxSize size = GetClientSize(); m_gal->ResizeScreen( size.GetX(), size.GetY() ); m_gal->ResizeScreen( size.GetX(), size.GetY() ); Loading
common/gal/opengl/opengl_gal.cpp +24 −16 Original line number Original line Diff line number Diff line Loading @@ -68,11 +68,12 @@ OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener, isFrameBufferInitialized = false; isFrameBufferInitialized = false; isUseShader = isUseShaders; isUseShader = isUseShaders; isShaderInitialized = false; isShaderInitialized = false; isGroupStarted = false; isGrouping = false; shaderPath = "../../common/gal/opengl/shader/"; shaderPath = "../../common/gal/opengl/shader/"; wxSize parentSize = aParent->GetSize(); wxSize parentSize = aParent->GetSize(); isVboInitialized = false; isVboInitialized = false; vboNeedsUpdate = false; curVboItem = NULL; curVboItem = NULL; vboSize = 0; vboSize = 0; Loading Loading @@ -110,13 +111,6 @@ OPENGL_GAL::~OPENGL_GAL() { { glFlush(); glFlush(); // Delete the stored display lists for( std::deque<GLuint>::iterator group = displayListsGroup.begin(); group != displayListsGroup.end(); group++ ) { glDeleteLists( *group, 1 ); } // Delete the buffers // Delete the buffers if( isFrameBufferInitialized ) if( isFrameBufferInitialized ) { { Loading @@ -126,6 +120,12 @@ OPENGL_GAL::~OPENGL_GAL() if( isVboInitialized ) if( isVboInitialized ) { { std::deque<VBO_ITEM*>::iterator it, end; for( it = vboItems.begin(), end = vboItems.end(); it != end; it++ ) { delete *it; } deleteVertexBufferObjects(); deleteVertexBufferObjects(); } } Loading Loading @@ -514,8 +514,8 @@ void OPENGL_GAL::rebuildVbo() glBufferData( GL_ELEMENT_ARRAY_BUFFER, vboSize * VBO_ITEM::IndSize, indicesBuffer, GL_DYNAMIC_DRAW ); glBufferData( GL_ELEMENT_ARRAY_BUFFER, vboSize * VBO_ITEM::IndSize, indicesBuffer, GL_DYNAMIC_DRAW ); glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 ); glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 ); delete verticesBuffer; delete[] verticesBuffer; delete indicesBuffer; delete[] indicesBuffer; vboNeedsUpdate = false; vboNeedsUpdate = false; Loading Loading @@ -607,7 +607,7 @@ inline void OPENGL_GAL::drawLineQuad( const VECTOR2D& aStartPoint, const VECTOR2 // XXX Should be improved later. // XXX Should be improved later. double scale = 0.5 * lineWidth / lineLength; double scale = 0.5 * lineWidth / lineLength; double scale1pix = 0.5001 / worldScale / lineLength; double scale1pix = 0.5001 / worldScale / lineLength; if( lineWidth * worldScale < 1.0002 && !isGroupStarted ) if( lineWidth * worldScale < 1.0002 && !isGrouping ) { { scale = scale1pix; scale = scale1pix; } } Loading Loading @@ -637,7 +637,7 @@ void OPENGL_GAL::DrawSegment( const VECTOR2D& aStartPoint, const VECTOR2D& aEndP VECTOR2D startEndVector = aEndPoint - aStartPoint; VECTOR2D startEndVector = aEndPoint - aStartPoint; double lineAngle = atan2( startEndVector.y, startEndVector.x ); double lineAngle = atan2( startEndVector.y, startEndVector.x ); if ( isGroupStarted ) if ( isGrouping ) { { // Angle of a line perpendicular to the segment being drawn // Angle of a line perpendicular to the segment being drawn double beta = ( M_PI / 2.0 ) - lineAngle; double beta = ( M_PI / 2.0 ) - lineAngle; Loading Loading @@ -1464,7 +1464,7 @@ void OPENGL_GAL::Restore() int OPENGL_GAL::BeginGroup() int OPENGL_GAL::BeginGroup() { { isGroupStarted = true; isGrouping = true; // There is a new group that is not in VBO yet // There is a new group that is not in VBO yet vboNeedsUpdate = true; vboNeedsUpdate = true; Loading @@ -1482,17 +1482,25 @@ void OPENGL_GAL::EndGroup() { { vboSize += curVboItem->GetSize(); vboSize += curVboItem->GetSize(); isGroupStarted = false; isGrouping = false; } } void OPENGL_GAL::DeleteGroup( int aGroupNumber ) void OPENGL_GAL::DeleteGroup( int aGroupNumber ) { { if( aGroupNumber >= vboItems.size() ) { // This should not happen wxLogDebug( wxT( "Tried to delete not existing group" ) ); return; } std::deque<VBO_ITEM*>::iterator it = vboItems.begin(); std::deque<VBO_ITEM*>::iterator it = vboItems.begin(); std::advance( it, aGroupNumber ); std::advance( it, aGroupNumber ); //vboSize -= it->GetSize(); // FIXME? delete *it; delete *it; vboItems.erase( it ); //vboItems.erase( it ); vboNeedsUpdate = true; vboNeedsUpdate = true; } } Loading
common/gal/opengl/vbo_item.cpp +4 −1 Original line number Original line Diff line number Diff line Loading @@ -46,6 +46,9 @@ VBO_ITEM::~VBO_ITEM() { { if( m_vertices ) if( m_vertices ) delete m_vertices; delete m_vertices; if( m_indices ) delete m_indices; } } Loading Loading @@ -76,7 +79,7 @@ void VBO_ITEM::PushVertex( const GLfloat* aVertex ) m_indices = newIndices; m_indices = newIndices; // Add the new vertex // Add the new vertex newIndices[m_size] = m_offset + m_size; m_indices[m_size] = m_offset + m_size; m_size++; m_size++; m_isDirty = true; m_isDirty = true; Loading
common/view/view.cpp +23 −20 Original line number Original line Diff line number Diff line Loading @@ -208,9 +208,9 @@ void VIEW::SetGAL( GAL* aGal ) if( m_painter ) if( m_painter ) m_painter->SetGAL( m_gal ); m_painter->SetGAL( m_gal ); // items need to be recached after changing GAL // clear group numbers, so everything is going to be recached //if( m_useGroups ) if( m_useGroups ) //RecacheAllItems(); clearGroupCache(); // force the new GAL to display the current viewport. // force the new GAL to display the current viewport. SetCenter( m_center ); SetCenter( m_center ); Loading Loading @@ -387,7 +387,6 @@ struct VIEW::drawItem aItem->setGroup( currentLayer, group ); aItem->setGroup( currentLayer, group ); view->m_painter->Draw( static_cast<EDA_ITEM*>( aItem ), currentLayer ); view->m_painter->Draw( static_cast<EDA_ITEM*>( aItem ), currentLayer ); gal->EndGroup(); gal->EndGroup(); //gal->DrawGroup( group ); } } } } else if( aItem->ViewIsVisible() ) else if( aItem->ViewIsVisible() ) Loading Loading @@ -460,20 +459,24 @@ struct VIEW::recacheItem void operator()( VIEW_ITEM* aItem ) void operator()( VIEW_ITEM* aItem ) { { //aItem->deleteGroups(); // Remove previously cached group /*int prevGroup = aItem->getGroup( layer ); int prevGroup = aItem->getGroup( layer ); if( prevGroup != -1 ) if( prevGroup >= 0 ) { { gal->DeleteGroup( prevGroup ); gal->DeleteGroup( prevGroup ); }*/ } if( immediately ) if( immediately ) { { int group = gal->BeginGroup(); int group = gal->BeginGroup(); aItem->setGroup( layer, group ); view->m_painter->Draw( static_cast<EDA_ITEM*>( aItem ), layer ); view->m_painter->Draw( static_cast<EDA_ITEM*>( aItem ), layer ); aItem->setGroup( layer, group ); gal->EndGroup(); gal->EndGroup(); } } else { aItem->setGroup( layer, -1 ); } } } VIEW* view; VIEW* view; Loading Loading @@ -565,12 +568,6 @@ struct VIEW::clearItemCache { { if( aItem->storesGroups() ) if( aItem->storesGroups() ) { { std::vector<int> groups = aItem->getAllGroups(); for(std::vector<int>::iterator i = groups.begin(); i != groups.end(); i++ ) { view->GetGAL()->DeleteGroup( *i ); } aItem->deleteGroups(); aItem->deleteGroups(); } } } } Loading @@ -581,6 +578,9 @@ struct VIEW::clearItemCache void VIEW::clearGroupCache() void VIEW::clearGroupCache() { { if( !m_useGroups ) return; BOX2I r; BOX2I r; r.SetMaximum(); r.SetMaximum(); Loading @@ -596,22 +596,25 @@ void VIEW::clearGroupCache() void VIEW::RecacheAllItems( bool aImmediately ) void VIEW::RecacheAllItems( bool aImmediately ) { { if( !m_useGroups ) return; BOX2I r; BOX2I r; r.SetMaximum(); r.SetMaximum(); wxLogDebug( wxT( "RecacheAllItems::immediately: %u" ), aImmediately ); //if( aImmediately ) if( aImmediately ) m_gal->BeginDrawing(); m_gal->BeginDrawing(); wxLogDebug( wxT( "RecacheAllItems::immediately: %u" ), aImmediately ); for( LayerMapIter i = m_layers.begin(); i != m_layers.end(); ++i ) for( LayerMapIter i = m_layers.begin(); i != m_layers.end(); ++i ) { { VIEW_LAYER* l = & ( ( *i ).second ); VIEW_LAYER* l = & ( ( *i ).second ); recacheItem visitor( this, m_gal, l->id, aImmediately ); recacheItem visitor( this, m_gal, l->id, aImmediately ); l->items->Query( r, visitor ); l->items->Query( r, visitor ); }; } if( aImmediately ) //if( aImmediately ) m_gal->EndDrawing(); m_gal->EndDrawing(); } }