void QuadNode::generateLists() { if(items.size() > 0) { if(!listid) listid = glGenLists(1); glNewList(listid, GL_COMPILE); for(std::list<QuadItem*>::iterator it = items.begin(); it != items.end(); it++) { QuadItem* oi = (*it); oi->drawQuadItem(); } glEndList(); return; } if(children.size() > 0) { for(int i=0;i<4;i++) { QuadNode* c = children[i]; if(!c->empty()) { c->generateLists(); } } } }
int QuadNode::draw(Frustum& frustum) { if(listid && items.size()) { glPushMatrix(); glCallList(listid); glPopMatrix(); return 1; } int drawn = 0; if(children.size() > 0) { for(int i=0;i<4;i++) { QuadNode* c = children[i]; if(!c->empty() && frustum.boundsInFrustum(c->bounds)) { drawn += c->draw(frustum); } } } return drawn; }