Prechádzať zdrojové kódy

Merge pull request #51388 from lawnjelly/portals_fix_secondary_pvs

Portals - Fix secondary PVS bug
Rémi Verschelde 4 rokov pred
rodič
commit
7b718dc36b

+ 0 - 5
scene/3d/room_manager.cpp

@@ -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) {

+ 15 - 12
servers/visual/portals/portal_gameplay_monitor.cpp

@@ -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

+ 2 - 2
servers/visual/portals/portal_pvs_builder.cpp

@@ -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);