static BYTE SetCoverage(void *node) { if (numnodes == 0) { return 0; } if (!((size_t)node & 1)) // Keep going until found a subsector { node_t *bsp = (node_t *)node; BYTE coverage = SetCoverage(bsp->children[0]) | SetCoverage(bsp->children[1]); gl_drawinfo->no_renderflags[bsp-nodes] = coverage; return coverage; } else { subsector_t *sub = (subsector_t *)((BYTE *)node - 1); return gl_drawinfo->ss_renderflags[sub-subsectors] & SSRF_SEEN; } }
static uint8_t SetCoverage(HWDrawInfo *di, void *node) { if (di->Level->nodes.Size() == 0) { return 0; } if (!((size_t)node & 1)) // Keep going until found a subsector { node_t *bsp = (node_t *)node; uint8_t coverage = SetCoverage(di, bsp->children[0]) | SetCoverage(di, bsp->children[1]); di->no_renderflags[bsp->Index()] = coverage; return coverage; } else { subsector_t *sub = (subsector_t *)((uint8_t *)node - 1); return di->ss_renderflags[sub->Index()] & SSRF_SEEN; } }
void GLSectorStackPortal::SetupCoverage() { for(unsigned i=0; i<subsectors.Size(); i++) { subsector_t *sub = subsectors[i]; int plane = origin->plane; for(int j=0;j<sub->portalcoverage[plane].sscount; j++) { subsector_t *dsub = &::subsectors[sub->portalcoverage[plane].subsectors[j]]; currentmapsection[dsub->mapsection>>3] |= 1 << (dsub->mapsection&7); gl_drawinfo->ss_renderflags[dsub-::subsectors] |= SSRF_SEEN; } } SetCoverage(&nodes[numnodes-1]); }
void HWSectorStackPortal::SetupCoverage(HWDrawInfo *di) { for (unsigned i = 0; i<subsectors.Size(); i++) { subsector_t *sub = subsectors[i]; int plane = origin->plane; for (int j = 0; j<sub->portalcoverage[plane].sscount; j++) { subsector_t *dsub = &di->Level->subsectors[sub->portalcoverage[plane].subsectors[j]]; di->CurrentMapSections.Set(dsub->mapsection); di->ss_renderflags[dsub->Index()] |= SSRF_SEEN; } } SetCoverage(di, di->Level->HeadNode()); }