### Godot version

v4.1.dev.custom_build [18112ba36]

### System information

Linux Mint 21.1, NVIDIA GeForce GTX 1050 Ti,  Vulkan API 1.3.205

### Issue description

This is a regression from #64388. 

Textures seem to be used differently in 2D and 3D. They are rendered using the `RID` in 3D, and changing the `viewport_path` will cause the `RID` to change.

https://github.com/godotengine/godot/assets/30386067/ad393fe8-50c1-4a89-870d-58d4e224bcc6


### Steps to reproduce

1. Download and import MRP.
2. Open 1.tscn, and try to switch the `viewport_path` of the `MeshInstance3D:mesh:material:albedo_texture` in the MeshInstance3D node.
3. After switching, the MeshInstance3D is rendered as white in the editor;
4. Close and then reopen 1.tscn.

### Minimal reproduction project

[ViewportTexture-change-viewport_path.zip](https://github.com/godotengine/godot/files/11509010/ViewportTexture-change-viewport_path.zip)

if (gui.dragging) {
			
			Control *drag_preview = _gui_get_drag_preview();
			if (drag_preview) {
				drag_preview->set_position(mpos);
			}
			gui.drag_mouse_over = over;
			gui.drag_mouse_over_pos = Vector2();
			
			
			Viewport *embedder = nullptr;
			Vector2 viewport_pos;
			if (is_embedding_subwindows()) {
				embedder = this;
				viewport_pos = mpos;
			} else {
				
				Window *w = Object::cast_to<Window>(this);
				if (w) {
					if (w->is_embedded()) {
						embedder = w->get_embedder();
						viewport_pos = get_final_transform().xform(mpos) + w->get_position(); 
					}
				}
			}
			Viewport *viewport_under = nullptr;
			if (embedder) {
				
				for (int i = embedder->gui.sub_windows.size() - 1; i >= 0; i--) {
					Window *sw = embedder->gui.sub_windows[i].window;