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