Merge pull request #51388 from lawnjelly/portals_fix_secondary_pvs

Portals - Fix secondary PVS bug
This commit is contained in:
Rémi Verschelde 2021-08-08 17:46:15 +02:00 committed by GitHub
commit 7b718dc36b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 19 deletions

View file

@ -164,11 +164,6 @@ void RoomManager::_preview_camera_update() {
bool changed = false;
if (camera_pos != _godot_camera_pos) {
changed = true;
// update gameplay monitor
Vector<Vector3> camera_positions;
camera_positions.push_back(camera_pos);
VisualServer::get_singleton()->rooms_update_gameplay_monitor(scenario, camera_positions);
}
// check planes
if (!changed) {

View file

@ -104,20 +104,23 @@ void PortalGameplayMonitor::update_gameplay(PortalRenderer &p_portal_renderer, c
for (int n = 0; n < p_num_source_rooms; n++) {
const VSRoom &source_room = p_portal_renderer.get_room(p_source_room_ids[n]);
int pvs_size = source_room._pvs_size;
int pvs_first = source_room._pvs_first;
if (_use_secondary_pvs) {
pvs_size = source_room._secondary_pvs_size;
pvs_first = source_room._secondary_pvs_first;
int pvs_size = source_room._secondary_pvs_size;
int pvs_first = source_room._secondary_pvs_first;
for (int r = 0; r < pvs_size; r++) {
int room_id = pvs.get_secondary_pvs_room_id(pvs_first + r);
_update_gameplay_room(p_portal_renderer, room_id, source_rooms_changed);
} // for r through the rooms hit in the pvs
} else {
int pvs_size = source_room._pvs_size;
int pvs_first = source_room._pvs_first;
for (int r = 0; r < pvs_size; r++) {
int room_id = pvs.get_pvs_room_id(pvs_first + r);
_update_gameplay_room(p_portal_renderer, room_id, source_rooms_changed);
} // for r through the rooms hit in the pvs
}
for (int r = 0; r < pvs_size; r++) {
int room_id = pvs.get_pvs_room_id(pvs_first + r);
_update_gameplay_room(p_portal_renderer, room_id, source_rooms_changed);
} // for r through the rooms hit in the pvs
} // for n through source rooms
// find any moving that were active last tick that are no longer active, and send notifications

View file

@ -272,8 +272,8 @@ void PVSBuilder::calculate_pvs(PortalRenderer &p_portal_renderer, String p_filen
log("pvs from room : " + itos(n));
// trace_rooms_recursive_simple(0, n, n, -1, false, -1, dummy_planes, bf);
trace_rooms_recursive(0, n, n, -1, false, -1, dummy_planes, bf);
trace_rooms_recursive_simple(0, n, n, -1, false, -1, dummy_planes, bf);
// trace_rooms_recursive(0, n, n, -1, false, -1, dummy_planes, bf);
create_secondary_pvs(n, neighbors, bf);