コード例 #1
0
        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);
            }
        }
コード例 #2
0
ファイル: Scene.cs プロジェクト: djr5851/Banana-Bop
        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);
        }
コード例 #3
0
        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);
            }
        }