// Doc in parent void SoVRMLVertexLine::GLRender(SoGLRenderAction * action) { SoNode * node; node = this->coord.getValue(); if (node) node->GLRender(action); node = this->color.getValue(); if (node) node->GLRender(action); }
void SoVRMLShape::GLRender(SoGLRenderAction * action) { SoState * state = action->getState(); state->push(); if ((this->appearance.getValue() == NULL) || (((SoVRMLAppearance*)this->appearance.getValue())->material.getValue() == NULL)) { SoLazyElement::setLightModel(state, SoLazyElement::BASE_COLOR); } int numindices; const int * indices; SoAction::PathCode pathcode = action->getPathCode(numindices, indices); SoNode ** childarray = (SoNode**) this->getChildren()->getArrayPtr(); if (pathcode == SoAction::IN_PATH) { int lastchild = indices[numindices - 1]; for (int i = 0; i <= lastchild && !action->hasTerminated(); i++) { SoNode * child = childarray[i]; action->pushCurPath(i, child); if (action->getCurPathCode() != SoAction::OFF_PATH || child->affectsState()) { if (!action->abortNow()) { SoNodeProfiling profiling; profiling.preTraversal(action); child->GLRender(action); profiling.postTraversal(action); } else { SoCacheElement::invalidate(state); } } action->popCurPath(pathcode); } } else { action->pushCurPath(); int n = this->getChildren()->getLength(); for (int i = 0; i < n && !action->hasTerminated(); i++) { action->popPushCurPath(i, childarray[i]); if (action->abortNow()) { // only cache if we do a full traversal SoCacheElement::invalidate(state); break; } SoNodeProfiling profiling; profiling.preTraversal(action); childarray[i]->GLRender(action); profiling.postTraversal(action); } action->popCurPath(); } state->pop(); }