void SVGGElement::glTraverseBranch(svgl::Context * svglContext, svgl::GLInfo* glinfo, Branch::iterator& cur, Branch::iterator& end) { glPushMatrix(); SVGTransformable::glTraverse(svglContext, glinfo); float opacity=1; svg::SVGClipPathElement *clippath_element=0; SVGFilterElement* filter_element = 0; bool snap_done=false; svgl::MultiPassManager multiPassManager; const css::CSSStyle* style = getStyle().getValue().getStyle(); if(style) { opacity = style->getOpacity(); if (opacity!=1) { svgl::BoundingBoxManager bboxManager; bboxManager.glPreTraverse(glinfo); glPushMatrix(); glTraverseBoundingBoxChildren(svglContext, glinfo); glPopMatrix(); float xminf,yminf,xmaxf,ymaxf; snap_done = bboxManager.glPostTraverse(glinfo, &xminf, &yminf, &xmaxf, &ymaxf); if(snap_done) { multiPassManager.push(glinfo, xminf, yminf, xmaxf, ymaxf); } } clippath_element = getSVGClipPathElement(svglContext->externalEntityManager, getOwnerDocument()); if(clippath_element) clippath_element->glPreTraverse(svglContext, glinfo); #if 1 filter_element = getSVGFilterElement(svglContext->externalEntityManager, getOwnerDocument()); if(filter_element) filter_element->glPreTraverse(svglContext, glinfo, dynamic_cast<SVGElement*>(this)); #endif } ++cur; if(cur!=end) { SVGElement * elem = *cur; elem->glTraverseBranch(svglContext, glinfo, cur, end); } if( snap_done ) { float alpha_save = glinfo->alpha; glinfo->alpha = opacity; multiPassManager.pop(glinfo); glinfo->alpha = alpha_save; } if(filter_element) { filter_element->glPostTraverse(svglContext, glinfo, dynamic_cast<SVGElement*>(this)); } if(clippath_element) { clippath_element->glPostTraverse(svglContext, glinfo); } glPopMatrix(); }