Fix XR FTBFS with deprecated=no (DISABLE_DEPRECATED).

XRInterface::get_projection_for_view() / get_transform_for_view() are
declared only under #ifndef DISABLE_DEPRECATED (servers/xr/xr_interface.h
and every interface subclass), but three callers/definitions were left
unguarded, so scons deprecated=no fails:

  modules/mobile_vr/mobile_vr_interface.cpp:676: 'get_projection_for_view'
    was not declared in this scope
  scene/3d/xr/xr_nodes.cpp:222,245,275,304: 'class XRInterface' has no
    member named 'get_projection_for_view'
  servers/xr/xr_interface_extension.cpp:243,249: definitions of members
    whose declarations are gated away

- mobile_vr: inline the projection math the deprecated wrapper uses
  (Projection::set_for_hmd with the interface's own lens parameters),
  minus its WARN_PRINT_ONCE and its side effect on `aspect`.
- xr_nodes: go through XRServer::get_camera_projections(), the modern
  path this same file already uses in _update_projections(); XRServer
  keeps the deprecated fallback itself, correctly gated.
- xr_interface_extension: gate the two definitions like their
  declarations.

Present in 4.8-dev6 and still in upstream master as of 2026-09-16;
no upstream PR found. Drop once upstream compiles with deprecated=no.

diff -Naur a/modules/mobile_vr/mobile_vr_interface.cpp b/modules/mobile_vr/mobile_vr_interface.cpp
--- a/modules/mobile_vr/mobile_vr_interface.cpp
+++ b/modules/mobile_vr/mobile_vr_interface.cpp
@@ -673,7 +673,10 @@
 	uint32_t view_count = get_view_count();
 
 	for (uint32_t v = 0; v < view_count; v++) {
-		Projection cm = get_projection_for_view(v, aspect_ratio, 0.1, 1000.0);
+		// get_projection_for_view() is DISABLE_DEPRECATED-gated; compute the
+		// same HMD projection directly so deprecated=no builds keep compiling.
+		Projection cm;
+		cm.set_for_hmd(v + 1, aspect_ratio, intraocular_dist, display_width, display_to_lens, oversample, 0.1, 1000.0);
 		Vector3 center = cm.xform(Vector3(0.0, 0.0, 999.0));
 
 		eye_foci.push_back(Vector2(center.x, center.y));
diff -Naur a/scene/3d/xr/xr_nodes.cpp b/scene/3d/xr/xr_nodes.cpp
--- a/scene/3d/xr/xr_nodes.cpp
+++ b/scene/3d/xr/xr_nodes.cpp
@@ -219,7 +219,8 @@
 	Vector3 ray;
 
 	// Just use the first view, if multiple views are supported this function has no good result
-	Projection cm = xr_interface->get_projection_for_view(0, viewport_size.aspect(), get_near(), get_far());
+	TypedArray<Projection> projections = xr_server->get_camera_projections(tracker_name, viewport_size.aspect(), get_near(), get_far());
+	Projection cm = projections.is_empty() ? Projection() : Projection(projections[0]);
 	Vector2 screen_he = cm.get_viewport_half_extents();
 	ray = Vector3(((cpos.x / viewport_size.width) * 2.0 - 1.0) * screen_he.x, ((1.0 - (cpos.y / viewport_size.height)) * 2.0 - 1.0) * screen_he.y, -get_near()).normalized();
 
@@ -242,7 +243,8 @@
 	Size2 viewport_size = get_viewport()->get_visible_rect().size;
 
 	// Just use the first view, if multiple views are supported this function has no good result
-	Projection cm = xr_interface->get_projection_for_view(0, viewport_size.aspect(), get_near(), get_far());
+	TypedArray<Projection> projections = xr_server->get_camera_projections(tracker_name, viewport_size.aspect(), get_near(), get_far());
+	Projection cm = projections.is_empty() ? Projection() : Projection(projections[0]);
 
 	Plane p(get_camera_transform().xform_inv(p_pos), 1.0);
 
@@ -272,7 +274,8 @@
 	Size2 viewport_size = get_viewport()->get_visible_rect().size;
 
 	// Just use the first view, if multiple views are supported this function has no good result
-	Projection cm = xr_interface->get_projection_for_view(0, viewport_size.aspect(), get_near(), get_far());
+	TypedArray<Projection> projections = xr_server->get_camera_projections(tracker_name, viewport_size.aspect(), get_near(), get_far());
+	Projection cm = projections.is_empty() ? Projection() : Projection(projections[0]);
 
 	Vector2 vp_he = cm.get_viewport_half_extents();
 
@@ -301,7 +304,8 @@
 
 	Size2 viewport_size = get_viewport()->get_visible_rect().size;
 	// TODO Just use the first view for now, this is mostly for debugging so we may look into using our combined projection here.
-	Projection cm = xr_interface->get_projection_for_view(0, viewport_size.aspect(), get_near(), get_far());
+	TypedArray<Projection> projections = xr_server->get_camera_projections(tracker_name, viewport_size.aspect(), get_near(), get_far());
+	Projection cm = projections.is_empty() ? Projection() : Projection(projections[0]);
 	return cm.get_projection_planes(get_camera_transform());
 }
 
diff -Naur a/servers/xr/xr_interface_extension.cpp b/servers/xr/xr_interface_extension.cpp
--- a/servers/xr/xr_interface_extension.cpp
+++ b/servers/xr/xr_interface_extension.cpp
@@ -240,6 +240,7 @@
 	return camera_offsets;
 }
 
+#ifndef DISABLE_DEPRECATED
 Transform3D XRInterfaceExtension::get_transform_for_view(uint32_t p_view, const Transform3D &p_cam_transform) {
 	Transform3D transform;
 	GDVIRTUAL_CALL(_get_transform_for_view, p_view, p_cam_transform, transform);
@@ -261,6 +262,7 @@
 
 	return Projection();
 }
+#endif
 
 RID XRInterfaceExtension::get_vrs_texture() {
 	RID vrs_texture;
