import SwiftUI import RealityKit import RealityKitContent struct GlobalData { var currNr: Int = 0 var images: [String] = ["view0","view1","view2","view3","view4"] var matX: ShaderGraphMaterial! var currImage: TextureResource! } class ContentViewModel: ObservableObject { @Published var globalData: GlobalData init() { self.globalData = GlobalData( currNr: 0 ) } } struct ImmersiveView: View { @EnvironmentObject var vm: ContentViewModel @State var updating: Bool = false var body: some View { HStack { Button(action: { if !updating && vm.globalData.currNr < vm.globalData.images.count-1 { vm.globalData.currNr += 1 updating = true } else { vm.globalData.currNr = 0 } }) { Text(String(vm.globalData.currNr)) } } .offset(x: 0, y: -300) .scaleEffect(x: 2, y: 2) RealityView { content in do { vm.globalData.matX = try await ShaderGraphMaterial(named: "/Root/Mat_Stereo360", from: "360Stereo.usda", in: realityKitContentBundle) } catch { print("Error loading material: \(error)") } do { vm.globalData.currImage = try await TextureResource(named: vm.globalData.images[vm.globalData.currNr]) try vm.globalData.matX.setParameter(name: "imageFile", value: .textureResource(vm.globalData.currImage)) } catch { print("Error loading texture: \(error)") } let sphere = MeshResource.generateSphere(radius:1000) let entity = ModelEntity() entity.components.set(ModelComponent(mesh: sphere, materials: [vm.globalData.matX])) content.add(entity) } update: { content in Task { if updating { do { vm.globalData.currImage = nil vm.globalData.currImage = try await TextureResource(named: vm.globalData.images[vm.globalData.currNr]) try vm.globalData.matX.setParameter(name: "imageFile", value: .textureResource(vm.globalData.currImage)) updating = false; } catch { print("Error loading texture: \(error)") updating = false; } } } } } }