Esempio n. 1
0
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();
            }
        }
    }
}
Esempio n. 2
0
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;
}