void HWDrawInfo::DispatchRenderHacks() { TMap<int, gl_subsectorrendernode*>::Pair *pair; TMap<int, gl_floodrendernode*>::Pair *fpair; TMap<int, gl_subsectorrendernode*>::Iterator ofi(otherFloorPlanes); GLFlat glflat; glflat.section = nullptr; while (ofi.NextPair(pair)) { auto sec = hw_FakeFlat(&Level->sectors[pair->Key], in_area, false); glflat.ProcessSector(this, sec, SSRF_RENDERFLOOR | SSRF_PLANEHACK); } TMap<int, gl_subsectorrendernode*>::Iterator oci(otherCeilingPlanes); while (oci.NextPair(pair)) { auto sec = hw_FakeFlat(&Level->sectors[pair->Key], in_area, false); glflat.ProcessSector(this, sec, SSRF_RENDERCEILING | SSRF_PLANEHACK); } TMap<int, gl_floodrendernode*>::Iterator ffi(floodFloorSegs); while (ffi.NextPair(fpair)) { auto sec = hw_FakeFlat(&Level->sectors[fpair->Key], in_area, false); glflat.ProcessSector(this, sec, SSRF_RENDERFLOOR | SSRF_FLOODHACK); } TMap<int, gl_floodrendernode*>::Iterator fci(floodCeilingSegs); while (fci.NextPair(fpair)) { auto sec = hw_FakeFlat(&Level->sectors[fpair->Key], in_area, false); glflat.ProcessSector(this, sec, SSRF_RENDERCEILING | SSRF_FLOODHACK); } }
static void DoSubsector(subsector_t * sub) { int i; sector_t * sector; sector_t * fakesector; sector_t fake; GLFlat glflat; GLSprite glsprite; // check for visibility of this entire subsector! This requires GL nodes! if (!clipper.CheckBox(sub->bbox)) return; #ifdef _MSC_VER #ifdef _DEBUG if (sub->sector-sectors==931) { __asm nop } #endif #endif sector=sub->sector; if (!sector) return; sector->MoreFlags |= SECF_DRAWN; fakesector=gl_FakeFlat(sector, &fake, false); // [RH] Add particles //int shade = LIGHT2SHADE((floorlightlevel + ceilinglightlevel)/2 + r_actualextralight); for (i = ParticlesInSubsec[sub-subsectors]; i != NO_PARTICLE; i = Particles[i].snext) { glsprite.ProcessParticle(Particles + i, fakesector);//, 0, 0); } AddLines(sub, fakesector); RenderThings(sub, fakesector); // Subsectors with only 2 lines cannot have any area! if (sub->numlines>2 || (sub->hacked&1)) { // Exclude the case when it tries to render a sector with a heightsec // but undetermined heightsec state. This can only happen if the // subsector is obstructed but not excluded due to a large bounding box. // Due to the way a BSP works such a subsector can never be visible if (!sector->heightsec || sector->heightsec->MoreFlags & SECF_IGNOREHEIGHTSEC || in_area!=area_default) { if (sector != sub->render_sector) { sector = sub->render_sector; // the planes of this subsector are faked to belong to another sector // This means we need the heightsec parts and light info of the render sector, not the actual one! fakesector = gl_FakeFlat(sector, &fake, false); } SetupFlat.Clock(); glflat.ProcessSector(fakesector, sub); SetupFlat.Unclock(); } } }
void FGLRenderer::ProcessSector(sector_t *fakesector, subsector_t *sub) { GLFlat glflat; glflat.ProcessSector(fakesector, sub); }