Example #1
0
        public void RemoveAllAdditiveScenes()
        {
            var additiveSceneMeshes = managerData.gameEngineState.additiveSceneMeshes;
            var additiveScenes      = managerData.gameEngineState.additiveScenes;
            var activeScene         = managerData.gameEngineState.Scene().GetScene();

            if (additiveSceneMeshes != null)
            {
                foreach (var additiveMesh in additiveSceneMeshes)
                {
                    IntPtr sceneMesh = additiveMesh.Value;
                    PhononCore.iplRemoveInstancedMesh(activeScene, sceneMesh);
                    PhononCore.iplDestroyInstancedMesh(ref sceneMesh);
                }

                additiveSceneMeshes.Clear();
            }

            if (additiveScenes != null)
            {
                foreach (var additiveScene in additiveScenes)
                {
                    IntPtr scene = additiveScene.Value;
                    PhononCore.iplDestroyScene(ref scene);
                }

                additiveScenes.Clear();
            }
        }
Example #2
0
 public void Destroy()
 {
     if (scene != IntPtr.Zero)
     {
         PhononCore.iplDestroyScene(ref scene);
     }
 }
Example #3
0
        public void Destroy()
        {
            if (editorAdditiveSceneMeshes != null)
            {
                for (int i = 0; i < editorAdditiveSceneMeshes.Count; ++i)
                {
                    IntPtr additiveMesh = editorAdditiveSceneMeshes[i];
                    PhononCore.iplRemoveInstancedMesh(scene.GetScene(), additiveMesh);
                    PhononCore.iplDestroyInstancedMesh(ref additiveMesh);
                }

                editorAdditiveSceneMeshes.Clear();
                editorAdditiveSceneMeshes = null;
            }

            if (editorAdditiveScenes != null)
            {
                for (int i = 0; i < editorAdditiveScenes.Count; ++i)
                {
                    IntPtr additiveScene = editorAdditiveScenes[i];
                    PhononCore.iplDestroyScene(ref additiveScene);
                }

                editorAdditiveScenes.Clear();
                editorAdditiveScenes = null;
            }

            environment.Destroy();
            probeManager.Destroy();
            scene.Destroy();
            computeDevice.Destroy();

            PhononCore.iplDestroyContext(ref context);
        }
Example #4
0
        public void Destroy()
        {
            if (materialBuffer != IntPtr.Zero)
            {
                Marshal.FreeHGlobal(materialBuffer);
                materialBuffer = IntPtr.Zero;
            }

            if (scene != IntPtr.Zero)
            {
                PhononCore.iplDestroyScene(ref scene);
            }
        }
Example #5
0
        public void RemoveAllInstancedScenes()
        {
            var instancedScenes = managerData.gameEngineState.instancedScenes;

            if (instancedScenes != null)
            {
                foreach (var item in instancedScenes)
                {
                    var instancedScene = item.Value;
                    PhononCore.iplDestroyScene(ref instancedScene);
                }
                instancedScenes.Clear();
            }
        }
Example #6
0
        void OnApplicationQuit()
        {
            var instancedScenes = managerData.gameEngineState.instancedScenes;

            if (instancedScenes != null)
            {
                foreach (var item in instancedScenes)
                {
                    var instancedScene = item.Value;
                    PhononCore.iplDestroyScene(ref instancedScene);
                }
                instancedScenes.Clear();
            }

            PhononUnityNative.iplUnityResetAudioEngine();
            PhononCore.iplCleanup();
        }
Example #7
0
        public void RemoveAdditiveScene(UnityEngine.SceneManagement.Scene unityScene)
        {
            var additiveSceneMeshes = managerData.gameEngineState.additiveSceneMeshes;
            var additiveScenes      = managerData.gameEngineState.additiveScenes;
            var activeScene         = managerData.gameEngineState.Scene().GetScene();

            if (additiveSceneMeshes != null && additiveSceneMeshes.ContainsKey(unityScene))
            {
                IntPtr sceneMesh = additiveSceneMeshes[unityScene];
                PhononCore.iplRemoveInstancedMesh(activeScene, sceneMesh);
                PhononCore.iplDestroyInstancedMesh(ref sceneMesh);
                additiveSceneMeshes.Remove(unityScene);
            }

            if (additiveScenes != null && additiveScenes.ContainsKey(unityScene))
            {
                IntPtr scene = additiveScenes[unityScene];
                PhononCore.iplDestroyScene(ref scene);
                additiveScenes.Remove(unityScene);
            }
        }
Example #8
0
        public Error Export(ComputeDevice computeDevice, MaterialValue defaultMaterial,
                            IntPtr globalContext, bool exportOBJ = false)
        {
            var error = Error.None;

            SceneType sceneType = SceneType.Phonon;    // Scene type should always be Phonon when exporting.

            var objects = SceneExporter.GetStaticGameObjectsForExport(SceneManager.GetActiveScene());

            Vector3[]  vertices        = null;
            Triangle[] triangles       = null;
            int[]      materialIndices = null;
            Material[] materials       = null;
            SceneExporter.GetGeometryAndMaterialBuffers(objects, ref vertices, ref triangles, ref materialIndices,
                                                        ref materials, false, exportOBJ);

            if (vertices.Length == 0 || triangles.Length == 0 || materialIndices.Length == 0 || materials.Length == 0)
            {
                throw new Exception(
                          "No Steam Audio Geometry tagged. Attach Steam Audio Geometry to one or more GameObjects that " +
                          "contain Mesh or Terrain geometry.");
            }

            error = PhononCore.iplCreateScene(globalContext, computeDevice.GetDevice(), sceneType,
                                              materials.Length, materials, null, null, null, null, IntPtr.Zero, ref scene);
            if (error != Error.None)
            {
                throw new Exception("Unable to create scene for export (" + materials.Length.ToString() +
                                    " materials): [" + error.ToString() + "]");
            }

            var staticMesh = IntPtr.Zero;

            error = PhononCore.iplCreateStaticMesh(scene, vertices.Length, triangles.Length, vertices, triangles,
                                                   materialIndices, ref staticMesh);
            if (error != Error.None)
            {
                throw new Exception("Unable to create static mesh for export (" + vertices.Length.ToString() +
                                    " vertices, " + triangles.Length.ToString() + " triangles): [" + error.ToString() + "]");
            }

#if UNITY_EDITOR
            if (!Directory.Exists(Application.streamingAssetsPath))
            {
                UnityEditor.AssetDatabase.CreateFolder("Assets", "StreamingAssets");
            }
#endif

            if (exportOBJ)
            {
                PhononCore.iplSaveSceneAsObj(scene, Common.ConvertString(ObjFileName()));
                Debug.Log("Scene exported to " + ObjFileName() + ".");
            }
            else
            {
                var dataSize = PhononCore.iplSaveScene(scene, null);
                var data     = new byte[dataSize];
                PhononCore.iplSaveScene(scene, data);

                var fileName = SceneFileName();
                File.WriteAllBytes(fileName, data);

                Debug.Log("Scene exported to " + fileName + ".");
            }

            PhononCore.iplDestroyStaticMesh(ref staticMesh);
            PhononCore.iplDestroyScene(ref scene);
            return(error);
        }
Example #9
0
        public Error Export(ComputeDevice computeDevice, SimulationSettings simulationSettings,
                            MaterialValue defaultMaterial, IntPtr globalContext, bool exportOBJ = false)
        {
            var error = Error.None;

            var objects           = GameObject.FindObjectsOfType <SteamAudioGeometry>();
            var totalNumVertices  = 0;
            var totalNumTriangles = 0;
            var totalNumMaterials = 1;  // Global material.

            for (var i = 0; i < objects.Length; ++i)
            {
                totalNumVertices  += objects[i].GetNumVertices();
                totalNumTriangles += objects[i].GetNumTriangles();
                totalNumMaterials += objects[i].GetNumMaterials();
            }

            simulationSettings.sceneType = SceneType.Phonon;    // Scene type should always be Phonon when exporting.

            var vertices        = new Vector3[totalNumVertices];
            var triangles       = new Triangle[totalNumTriangles];
            var materialIndices = new int[totalNumTriangles];
            var materials       = new Material[totalNumMaterials + 1]; // Offset added to avoid creating Material
                                                                       // for each object and then copying it.

            var vertexOffset   = 0;
            var triangleOffset = 0;

            var materialOffset = 1;

            materials[0].absorptionHigh   = defaultMaterial.HighFreqAbsorption;
            materials[0].absorptionMid    = defaultMaterial.MidFreqAbsorption;
            materials[0].absorptionLow    = defaultMaterial.LowFreqAbsorption;
            materials[0].scattering       = defaultMaterial.Scattering;
            materials[0].transmissionHigh = defaultMaterial.HighFreqTransmission;
            materials[0].transmissionMid  = defaultMaterial.MidFreqTransmission;
            materials[0].transmissionLow  = defaultMaterial.LowFreqTransmission;

            for (var i = 0; i < objects.Length; ++i)
            {
                objects[i].GetGeometry(vertices, ref vertexOffset, triangles, ref triangleOffset, materials,
                                       materialIndices, ref materialOffset);
            }

            error = PhononCore.iplCreateScene(globalContext, computeDevice.GetDevice(), simulationSettings,
                                              materials.Length, materials, null, null, null, null, IntPtr.Zero, ref scene);
            if (error != Error.None)
            {
                throw new Exception("Unable to create scene for export (" + objects.Length.ToString() +
                                    " materials): [" + error.ToString() + "]");
            }

            var staticMesh = IntPtr.Zero;

            error = PhononCore.iplCreateStaticMesh(scene, totalNumVertices, totalNumTriangles, vertices, triangles,
                                                   materialIndices, ref staticMesh);
            if (error != Error.None)
            {
                throw new Exception("Unable to create static mesh for export (" + totalNumVertices.ToString() +
                                    " vertices, " + totalNumTriangles.ToString() + " triangles): [" + error.ToString() + "]");
            }

#if UNITY_EDITOR
            if (!Directory.Exists(Application.streamingAssetsPath))
            {
                UnityEditor.AssetDatabase.CreateFolder("Assets", "StreamingAssets");
            }
#endif

            if (exportOBJ)
            {
                PhononCore.iplDumpSceneToObjFile(scene, Common.ConvertString(ObjFileName()));
                Debug.Log("Scene dumped to " + ObjFileName() + ".");
            }
            else
            {
                var dataSize = PhononCore.iplSaveFinalizedScene(scene, null);
                var data     = new byte[dataSize];
                PhononCore.iplSaveFinalizedScene(scene, data);

                var fileName = SceneFileName();
                File.WriteAllBytes(fileName, data);

                Debug.Log("Scene exported to " + fileName + ".");
            }

            PhononCore.iplDestroyStaticMesh(ref staticMesh);
            PhononCore.iplDestroyScene(ref scene);
            return(error);
        }
        public void Export(string assetFileName, bool exportOBJ)
        {
            if (!ValidateGeometry())
            {
                return;
            }

            assetFileName = Application.streamingAssetsPath + "/" + assetFileName;

            var objects = SceneExporter.GetDynamicGameObjectsForExport(this);

            Vector3[]  vertices        = null;
            Triangle[] triangles       = null;
            int[]      materialIndices = null;
            Material[] materials       = null;
            SceneExporter.GetGeometryAndMaterialBuffers(objects, ref vertices, ref triangles, ref materialIndices,
                                                        ref materials, true, exportOBJ);

            // TODO: Make the log callback function accessible from any class.
            var context = IntPtr.Zero;
            var status  = PhononCore.iplCreateContext(null, IntPtr.Zero, IntPtr.Zero, ref context);

            if (status != Error.None)
            {
                throw new Exception();
            }

            var computeDevice = IntPtr.Zero;
            var sceneType     = SceneType.Phonon;

            var scene = IntPtr.Zero;

            status = PhononCore.iplCreateScene(context, computeDevice, sceneType, materials.Length, materials,
                                               null, null, null, null, IntPtr.Zero, ref scene);
            if (status != Error.None)
            {
                throw new Exception();
            }

            var staticMesh = IntPtr.Zero;

            status = PhononCore.iplCreateStaticMesh(scene, vertices.Length, triangles.Length, vertices, triangles,
                                                    materialIndices, ref staticMesh);
            if (status != Error.None)
            {
                throw new Exception();
            }

            if (exportOBJ)
            {
                PhononCore.iplSaveSceneAsObj(scene, Common.ConvertString(assetFileName + ".obj"));
            }
            else
            {
                var size = PhononCore.iplSaveScene(scene, null);
                var data = new byte[size];
                PhononCore.iplSaveScene(scene, data);

                File.WriteAllBytes(assetFileName, data);
            }

            PhononCore.iplDestroyStaticMesh(ref staticMesh);
            PhononCore.iplDestroyScene(ref scene);
            PhononCore.iplDestroyContext(ref context);

            var exportedFileName = (exportOBJ) ? assetFileName + ".obj" : assetFileName;

            Debug.Log(string.Format("Steam Audio Dynamic Object [{0}]: Exported to {1}.", name, exportedFileName));
        }