public void CreateInstancedMesh(string assetFileName, Transform instanceTransform, ref IntPtr instancedMesh) { var status = Error.None; var serializedData = File.ReadAllBytes(Application.streamingAssetsPath + "/" + assetFileName); if (serializedData == null || serializedData.Length == 0) { return; } var context = managerData.gameEngineState.Context(); var computeDevice = managerData.gameEngineState.ComputeDevice().GetDevice(); var simulationSettings = managerData.gameEngineState.SimulationSettings(); var scene = managerData.gameEngineState.Scene().GetScene(); if (simulationSettings.sceneType != SceneType.Embree) { Debug.LogWarning("Dynamic Objects are only supported with Embree."); return; } var instancedScenes = managerData.gameEngineState.instancedScenes; var instancedScene = IntPtr.Zero; if (instancedScenes != null && instancedScenes.ContainsKey(assetFileName)) { instancedScene = instancedScenes[assetFileName]; } else { status = PhononCore.iplLoadScene(context, simulationSettings, serializedData, serializedData.Length, computeDevice, null, ref instancedScene); if (status != Error.None) { throw new Exception(); } } var transformMatrix = Common.ConvertTransform(instanceTransform); status = PhononCore.iplCreateInstancedMesh(scene, instancedScene, transformMatrix, ref instancedMesh); if (status != Error.None) { throw new Exception(); } if (instancedScenes == null) { managerData.gameEngineState.instancedScenes = new Dictionary <string, IntPtr>(); } if (!managerData.gameEngineState.instancedScenes.ContainsKey(assetFileName)) { managerData.gameEngineState.instancedScenes.Add(assetFileName, instancedScene); } }
public Error AddAdditiveScene(UnityEngine.SceneManagement.Scene unityScene, IntPtr activeScene, ComputeDevice computeDevice, SimulationSettings simulationSettings, IntPtr globalContext, out IntPtr addedScene, out IntPtr addedMesh) { addedScene = IntPtr.Zero; addedMesh = IntPtr.Zero; if (simulationSettings.sceneType != SceneType.Embree) { Debug.LogWarning("Additive scenes are only supported with Embree."); return(Error.Fail); } string fileName = SceneFileName(unityScene.name); if (!File.Exists(fileName)) { return(Error.Fail); } byte[] data = File.ReadAllBytes(fileName); var error = PhononCore.iplLoadScene(globalContext, simulationSettings.sceneType, data, data.Length, computeDevice.GetDevice(), null, ref addedScene); var transformMatrix = new Matrix4x4 { m00 = 1.0f, m01 = 0.0f, m02 = 0.0f, m03 = 0.0f, m10 = 0.0f, m11 = 1.0f, m12 = 0.0f, m13 = 0.0f, m20 = 0.0f, m21 = 0.0f, m22 = 1.0f, m23 = 0.0f, m30 = 0.0f, m31 = 0.0f, m32 = 0.0f, m33 = 1.0f }; error = PhononCore.iplCreateInstancedMesh(activeScene, addedScene, transformMatrix, ref addedMesh); if (error != Error.None) { return(error); } PhononCore.iplAddInstancedMesh(activeScene, addedMesh); return(error); }
public void AddAdditiveScene(UnityEngine.SceneManagement.Scene unityScene) { string steamAudioSceneFile = Scene.SceneFileName(unityScene.name); if (!File.Exists(steamAudioSceneFile)) { return; } var context = managerData.gameEngineState.Context(); var computeDevice = managerData.gameEngineState.ComputeDevice().GetDevice(); var simulationSettings = managerData.gameEngineState.SimulationSettings(); if (simulationSettings.sceneType != SceneType.Embree) { Debug.LogWarning("Additive scenes are only supported with Embree."); return; } var scene = IntPtr.Zero; byte[] data = File.ReadAllBytes(steamAudioSceneFile); var error = PhononCore.iplLoadScene(context, simulationSettings.sceneType, data, data.Length, computeDevice, null, ref scene); var additiveScenes = managerData.gameEngineState.additiveScenes; if (additiveScenes == null) { managerData.gameEngineState.additiveScenes = new Dictionary <UnityEngine.SceneManagement.Scene, IntPtr>(); } if (!managerData.gameEngineState.additiveScenes.ContainsKey(unityScene)) { managerData.gameEngineState.additiveScenes.Add(unityScene, scene); } var activeScene = managerData.gameEngineState.Scene().GetScene(); var additiveSceneMeshes = managerData.gameEngineState.additiveSceneMeshes; var sceneMesh = IntPtr.Zero; var transformMatrix = new Matrix4x4 { m00 = 1.0f, m01 = 0.0f, m02 = 0.0f, m03 = 0.0f, m10 = 0.0f, m11 = 1.0f, m12 = 0.0f, m13 = 0.0f, m20 = 0.0f, m21 = 0.0f, m22 = 1.0f, m23 = 0.0f, m30 = 0.0f, m31 = 0.0f, m32 = 0.0f, m33 = 1.0f }; error = PhononCore.iplCreateInstancedMesh(activeScene, scene, transformMatrix, ref sceneMesh); if (error != Error.None) { throw new Exception(); } PhononCore.iplAddInstancedMesh(activeScene, sceneMesh); if (additiveSceneMeshes == null) { managerData.gameEngineState.additiveSceneMeshes = new Dictionary <UnityEngine.SceneManagement.Scene, IntPtr>(); } if (!managerData.gameEngineState.additiveSceneMeshes.ContainsKey(unityScene)) { managerData.gameEngineState.additiveSceneMeshes.Add(unityScene, sceneMesh); } }