SteamAudio/Scripts/Runtime/SteamAudio.cs
2024-05-14 04:06:02 +02:00

1373 lines
37 KiB
C#
Executable File

//
// Copyright 2017-2023 Valve Corporation.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
using System;
using System.Runtime.InteropServices;
using UnityEngine;
namespace SteamAudio
{
// CONSTANTS
public static class Constants
{
public const uint kVersionMajor = 4;
public const uint kVersionMinor = 5;
public const uint kVersionPatch = 1;
public const uint kVersion = (kVersionMajor << 16) | (kVersionMinor << 8) | kVersionPatch;
}
// ENUMERATIONS
public enum Bool
{
False,
True
}
public enum Error
{
Success,
Failure,
OutOfMemory,
Initialization
}
public enum LogLevel
{
Info,
Warning,
Error,
Debug
}
public enum SIMDLevel
{
SSE2,
SSE4,
AVX,
AVX2,
AVX512,
NEON = SSE2
}
[Flags]
public enum ContextFlags
{
Validation = 1 << 0,
Force32Bit = 0x7fffffff
}
public enum OpenCLDeviceType
{
Any,
CPU,
GPU
}
public enum SceneType
{
Default,
Embree,
RadeonRays,
#if UNITY_2019_2_OR_NEWER
[InspectorName("Unity")]
#endif
Custom
}
public enum HRTFType
{
Default,
SOFA
}
public enum HRTFNormType
{
None,
RMS
}
public enum ProbeGenerationType
{
Centroid,
UniformFloor
}
public enum BakedDataVariation
{
Reverb,
StaticSource,
StaticListener,
Dynamic
}
public enum BakedDataType
{
Reflections,
Pathing
}
[Flags]
public enum SimulationFlags
{
Direct = 1 << 0,
Reflections = 1 << 1,
Pathing = 1 << 2
}
[Flags]
public enum DirectSimulationFlags
{
DistanceAttenuation = 1 << 0,
AirAbsorption = 1 << 1,
Directivity = 1 << 2,
Occlusion = 1 << 3,
Transmission = 1 << 4
}
public enum HRTFInterpolation
{
Nearest,
Bilinear
}
public enum DistanceAttenuationModelType
{
Default,
InverseDistance,
Callback
}
public enum AirAbsorptionModelType
{
Default,
Exponential,
Callback
}
public enum OcclusionType
{
Raycast,
Volumetric
}
[Flags]
public enum DirectEffectFlags
{
ApplyDistanceAttenuation = 1 << 0,
ApplyAirAbsorption = 1 << 1,
ApplyDirectivity = 1 << 2,
ApplyOcclusion = 1 << 3,
ApplyTransmission = 1 << 4
}
public enum TransmissionType
{
FrequencyIndependent,
FrequencyDependent
}
public enum ReflectionEffectType
{
Convolution,
Parametric,
Hybrid,
#if UNITY_2019_2_OR_NEWER
[InspectorName("TrueAudio Next")]
#endif
TrueAudioNext
}
[Flags]
public enum ReflectionsBakeFlags
{
BakeConvolution = 1 << 0,
BakeParametric = 1 << 1
}
// CALLBACKS
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
public delegate void ProgressCallback(float progress, IntPtr userData);
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
public delegate void LogCallback(LogLevel level, string message);
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
public delegate IntPtr AllocateCallback(UIntPtr size, UIntPtr alignment);
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
public delegate void FreeCallback(IntPtr memoryBlock);
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
public delegate void ClosestHitCallback(ref Ray ray, float minDistance, float maxDistance, out Hit hit, IntPtr userData);
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
public delegate void AnyHitCallback(ref Ray ray, float minDistance, float maxDistance, out byte occluded, IntPtr userData);
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
public delegate void BatchedClosestHitCallback(int numRays, Ray[] rays, float[] minDistances, float[] maxDistances, [Out] Hit[] hits, IntPtr userData);
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
public delegate void BatchedAnyHitCallback(int numRays, Ray[] rays, float[] minDistances, float[] maxDistances, [Out] byte[] occluded, IntPtr userData);
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
public delegate float DistanceAttenuationCallback(float distance, IntPtr userData);
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
public delegate float AirAbsorptionCallback(float distance, int band, IntPtr userData);
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
public delegate float DirectivityCallback(Vector3 direction, IntPtr userData);
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
public delegate void PathingVisualizationCallback(Vector3 from, Vector3 to, Bool occluded, IntPtr userData);
// STRUCTURES
[StructLayout(LayoutKind.Sequential)]
public struct ContextSettings
{
public uint version;
public LogCallback logCallback;
public AllocateCallback allocateCallback;
public FreeCallback freeCallback;
public SIMDLevel simdLevel;
public ContextFlags flags;
}
[Serializable]
[StructLayout(LayoutKind.Sequential)]
public struct Vector3
{
public float x;
public float y;
public float z;
}
[StructLayout(LayoutKind.Sequential)]
public struct Matrix4x4
{
public float m00;
public float m01;
public float m02;
public float m03;
public float m10;
public float m11;
public float m12;
public float m13;
public float m20;
public float m21;
public float m22;
public float m23;
public float m30;
public float m31;
public float m32;
public float m33;
}
[StructLayout(LayoutKind.Sequential)]
public struct Box
{
public Vector3 minCoordinates;
public Vector3 maxCoordinates;
}
[Serializable]
[StructLayout(LayoutKind.Sequential)]
public struct Sphere
{
public Vector3 center;
public float radius;
}
[StructLayout(LayoutKind.Sequential)]
public struct CoordinateSpace3
{
public Vector3 right;
public Vector3 up;
public Vector3 ahead;
public Vector3 origin;
}
[StructLayout(LayoutKind.Sequential)]
public struct SerializedObjectSettings
{
public IntPtr data;
public UIntPtr size;
}
[StructLayout(LayoutKind.Sequential)]
public struct EmbreeDeviceSettings { }
[StructLayout(LayoutKind.Sequential)]
public struct OpenCLDeviceSettings
{
public OpenCLDeviceType type;
public int numCUsToReserve;
public float fractionCUsForIRUpdate;
public Bool requiresTAN;
}
[StructLayout(LayoutKind.Sequential)]
public struct OpenCLDeviceDesc
{
public IntPtr platform;
public string platformName;
public string platformVendor;
public string platformVersion;
public IntPtr device;
public string deviceName;
public string deviceVendor;
public string deviceVersion;
public OpenCLDeviceType type;
public int numConvolutionCUs;
public int numIRUpdateCUs;
public int granularity;
public float perfScore;
}
[StructLayout(LayoutKind.Sequential)]
public struct RadeonRaysDeviceSettings { }
[StructLayout(LayoutKind.Sequential)]
public struct TrueAudioNextDeviceSettings
{
public int frameSize;
public int irSize;
public int order;
public int maxSources;
}
[StructLayout(LayoutKind.Sequential)]
public struct Triangle
{
public int index0;
public int index1;
public int index2;
}
[StructLayout(LayoutKind.Sequential)]
public struct Material
{
public float absorptionLow;
public float absorptionMid;
public float absorptionHigh;
public float scattering;
public float transmissionLow;
public float transmissionMid;
public float transmissionHigh;
}
[StructLayout(LayoutKind.Sequential)]
public struct Ray
{
public Vector3 origin;
public Vector3 direction;
}
[StructLayout(LayoutKind.Sequential)]
public struct Hit
{
public float distance;
public int triangleIndex;
public int objectIndex;
public int materialIndex;
public Vector3 normal;
public IntPtr material;
}
[StructLayout(LayoutKind.Sequential)]
public struct SceneSettings
{
public SceneType type;
public ClosestHitCallback closestHitCallback;
public AnyHitCallback anyHitCallback;
public BatchedClosestHitCallback batchedClosestHitCallback;
public BatchedAnyHitCallback batchedAnyHitCallback;
public IntPtr userData;
public IntPtr embreeDevice;
public IntPtr radeonRaysDevice;
}
[StructLayout(LayoutKind.Sequential)]
public struct StaticMeshSettings
{
public int numVertices;
public int numTriangles;
public int numMaterials;
public IntPtr vertices;
public IntPtr triangles;
public IntPtr materialIndices;
public IntPtr materials;
}
[StructLayout(LayoutKind.Sequential)]
public struct InstancedMeshSettings
{
public IntPtr subScene;
public Matrix4x4 transform;
}
[StructLayout(LayoutKind.Sequential)]
public struct AudioSettings
{
public int samplingRate;
public int frameSize;
}
[StructLayout(LayoutKind.Sequential)]
public struct HRTFSettings
{
public HRTFType type;
public string sofaFileName;
public IntPtr sofaFileData;
public int sofaFileDataSize;
public float volume;
public HRTFNormType normType;
}
[StructLayout(LayoutKind.Sequential)]
public struct ProbeGenerationParams
{
public ProbeGenerationType type;
public float spacing;
public float height;
public Matrix4x4 transform;
}
[StructLayout(LayoutKind.Sequential)]
[Serializable]
public struct BakedDataIdentifier
{
public BakedDataType type;
public BakedDataVariation variation;
public Sphere endpointInfluence;
}
[StructLayout(LayoutKind.Sequential)]
public struct ReflectionsBakeParams
{
public IntPtr scene;
public IntPtr probeBatch;
public SceneType sceneType;
public BakedDataIdentifier identifier;
public ReflectionsBakeFlags flags;
public int numRays;
public int numDiffuseSamples;
public int numBounces;
public float simulatedDuration;
public float savedDuration;
public int order;
public int numThreads;
public int rayBatchSize;
public float irradianceMinDistance;
public int bakeBatchSize;
public IntPtr openCLDevice;
public IntPtr radeonRaysDevice;
}
[StructLayout(LayoutKind.Sequential)]
public struct PathBakeParams
{
public IntPtr scene;
public IntPtr probeBatch;
public BakedDataIdentifier identifier;
public int numSamples;
public float radius;
public float threshold;
public float visRange;
public float pathRange;
public int numThreads;
}
[StructLayout(LayoutKind.Sequential)]
public struct DistanceAttenuationModel
{
public DistanceAttenuationModelType type;
public float minDistance;
public DistanceAttenuationCallback callback;
public IntPtr userData;
public Bool dirty;
}
[StructLayout(LayoutKind.Sequential)]
public struct AirAbsorptionModel
{
public AirAbsorptionModelType type;
public float coefficientsLow;
public float coefficientsMid;
public float coefficientsHigh;
public AirAbsorptionCallback callback;
public IntPtr userData;
public Bool dirty;
}
[StructLayout(LayoutKind.Sequential)]
public struct Directivity
{
public float dipoleWeight;
public float dipolePower;
public DirectivityCallback callback;
public IntPtr userData;
}
[StructLayout(LayoutKind.Sequential)]
public struct SimulationSettings
{
public SimulationFlags flags;
public SceneType sceneType;
public ReflectionEffectType reflectionType;
public int maxNumOcclusionSamples;
public int maxNumRays;
public int numDiffuseSamples;
public float maxDuration;
public int maxOrder;
public int maxNumSources;
public int numThreads;
public int rayBatchSize;
public int numVisSamples;
public int samplingRate;
public int frameSize;
public IntPtr openCLDevice;
public IntPtr radeonRaysDevice;
public IntPtr tanDevice;
}
[StructLayout(LayoutKind.Sequential)]
public struct SourceSettings
{
public SimulationFlags flags;
}
[StructLayout(LayoutKind.Sequential)]
public struct SimulationInputs
{
public SimulationFlags flags;
public DirectSimulationFlags directFlags;
public CoordinateSpace3 source;
public DistanceAttenuationModel distanceAttenuationModel;
public AirAbsorptionModel airAbsorptionModel;
public Directivity directivity;
public OcclusionType occlusionType;
public float occlusionRadius;
public int numOcclusionSamples;
public float reverbScaleLow;
public float reverbScaleMid;
public float reverbScaleHigh;
public float hybridReverbTransitionTime;
public float hybridReverbOverlapPercent;
public Bool baked;
public BakedDataIdentifier bakedDataIdentifier;
public IntPtr pathingProbes;
public float visRadius;
public float visThreshold;
public float visRange;
public int pathingOrder;
public Bool enableValidation;
public Bool findAlternatePaths;
public int numTransmissionRays;
}
[StructLayout(LayoutKind.Sequential)]
public struct SimulationSharedInputs
{
public CoordinateSpace3 listener;
public int numRays;
public int numBounces;
public float duration;
public int order;
public float irradianceMinDistance;
public PathingVisualizationCallback pathingVisualizationCallback;
public IntPtr pathingUserData;
}
[StructLayout(LayoutKind.Sequential)]
public struct DirectEffectParams
{
public DirectEffectFlags flags;
public TransmissionType transmissionType;
public float distanceAttenuation;
public float airAbsorptionLow;
public float airAbsorptionMid;
public float airAbsorptionHigh;
public float directivity;
public float occlusion;
public float transmissionLow;
public float transmissionMid;
public float transmissionHigh;
}
[StructLayout(LayoutKind.Sequential)]
public struct ReflectionEffectParams
{
public ReflectionEffectType type;
public IntPtr ir;
public float reverbTimesLow;
public float reverbTimesMid;
public float reverbTimesHigh;
public float eqLow;
public float eqMid;
public float eqHigh;
public int delay;
public int numChannels;
public int irSize;
public IntPtr tanDevice;
public int tanSlot;
}
[StructLayout(LayoutKind.Sequential)]
public struct PathEffectParams
{
public float eqCoeffsLow;
public float eqCoeffsMid;
public float eqCoeffsHigh;
public IntPtr shCoeffs;
public int order;
public Bool binaural;
public IntPtr hrtf;
public CoordinateSpace3 listener;
}
[StructLayout(LayoutKind.Sequential)]
public struct SimulationOutputs
{
public DirectEffectParams direct;
public ReflectionEffectParams reflections;
public PathEffectParams pathing;
}
[StructLayout(LayoutKind.Sequential)]
public struct PerspectiveCorrection
{
public Bool enabled;
public float xfactor;
public float yfactor;
public Matrix4x4 transform;
}
// FUNCTIONS
public static class API
{
// Context
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern Error iplContextCreate(ref ContextSettings settings, out IntPtr context);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern IntPtr iplContextRetain(IntPtr context);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplContextRelease(ref IntPtr context);
// Geometry
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern Vector3 iplCalculateRelativeDirection(IntPtr context, Vector3 sourcePosition, Vector3 listenerPosition, Vector3 listenerAhead, Vector3 listenerUp);
// Serialization
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern Error iplSerializedObjectCreate(IntPtr context, ref SerializedObjectSettings settings, out IntPtr serializedObject);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern IntPtr iplSerializedObjectRetain(IntPtr serializedObject);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplSerializedObjectRelease(ref IntPtr serializedObject);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern UIntPtr iplSerializedObjectGetSize(IntPtr serializedObject);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern IntPtr iplSerializedObjectGetData(IntPtr serializedObject);
// Embree
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern Error iplEmbreeDeviceCreate(IntPtr context, ref EmbreeDeviceSettings settings, out IntPtr device);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern IntPtr iplEmbreeDeviceRetain(IntPtr device);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplEmbreeDeviceRelease(ref IntPtr device);
// OpenCL
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern Error iplOpenCLDeviceListCreate(IntPtr context, ref OpenCLDeviceSettings settings, out IntPtr deviceList);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern IntPtr iplOpenCLDeviceListRetain(IntPtr deviceList);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplOpenCLDeviceListRelease(ref IntPtr deviceList);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern int iplOpenCLDeviceListGetNumDevices(IntPtr deviceList);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplOpenCLDeviceListGetDeviceDesc(IntPtr deviceList, int index, out OpenCLDeviceDesc deviceDesc);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern Error iplOpenCLDeviceCreate(IntPtr context, IntPtr deviceList, int index, out IntPtr device);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern IntPtr iplOpenCLDeviceRetain(IntPtr device);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplOpenCLDeviceRelease(ref IntPtr device);
// Radeon Rays
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern Error iplRadeonRaysDeviceCreate(IntPtr openCLDevice, ref RadeonRaysDeviceSettings settings, out IntPtr rrDevice);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern IntPtr iplRadeonRaysDeviceRetain(IntPtr device);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplRadeonRaysDeviceRelease(ref IntPtr device);
// TrueAudio Next
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern Error iplTrueAudioNextDeviceCreate(IntPtr openCLDevice, ref TrueAudioNextDeviceSettings settings, out IntPtr tanDevice);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern IntPtr iplTrueAudioNextDeviceRetain(IntPtr device);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplTrueAudioNextDeviceRelease(ref IntPtr device);
// Scene
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern Error iplSceneCreate(IntPtr context, ref SceneSettings settings, out IntPtr scene);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern IntPtr iplSceneRetain(IntPtr scene);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplSceneRelease(ref IntPtr scene);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern Error iplSceneLoad(IntPtr context, ref SceneSettings settings, IntPtr serializedObject, ProgressCallback progressCallback, IntPtr progressCallbackUserData, out IntPtr scene);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplSceneSave(IntPtr scene, IntPtr serializedObject);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplSceneSaveOBJ(IntPtr scene, string fileBaseName);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplSceneCommit(IntPtr scene);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern Error iplStaticMeshCreate(IntPtr scene, ref StaticMeshSettings settings, out IntPtr staticMesh);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern IntPtr iplStaticMeshRetain(IntPtr staticMesh);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplStaticMeshRelease(ref IntPtr staticMesh);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern Error iplStaticMeshLoad(IntPtr scene, IntPtr serializedObject, ProgressCallback progressCallback, IntPtr progressCallbackUserData, out IntPtr staticMesh);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplStaticMeshSave(IntPtr staticMesh, IntPtr serializedObject);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplStaticMeshAdd(IntPtr staticMesh, IntPtr scene);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplStaticMeshRemove(IntPtr staticMesh, IntPtr scene);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern Error iplInstancedMeshCreate(IntPtr scene, ref InstancedMeshSettings settings, out IntPtr instancedMesh);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern IntPtr iplInstancedMeshRetain(IntPtr instancedMesh);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplInstancedMeshRelease(ref IntPtr instancedMesh);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplInstancedMeshAdd(IntPtr instancedMesh, IntPtr scene);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplInstancedMeshRemove(IntPtr instancedMesh, IntPtr scene);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplInstancedMeshUpdateTransform(IntPtr instancedMesh, IntPtr scene, Matrix4x4 transform);
// HRTF
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern Error iplHRTFCreate(IntPtr context, ref AudioSettings audioSettings, ref HRTFSettings hrtfSettings, out IntPtr hrtf);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern IntPtr iplHRTFRetain(IntPtr hrtf);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplHRTFRelease(ref IntPtr hrtf);
// Probes
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern Error iplProbeArrayCreate(IntPtr context, out IntPtr probeArray);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern IntPtr iplProbeArrayRetain(IntPtr probeArray);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplProbeArrayRelease(ref IntPtr probeArray);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplProbeArrayGenerateProbes(IntPtr probeArray, IntPtr scene, ref ProbeGenerationParams generationParams);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern int iplProbeArrayGetNumProbes(IntPtr probeArray);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern Sphere iplProbeArrayGetProbe(IntPtr probeArray, int index);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern Error iplProbeBatchCreate(IntPtr context, out IntPtr probeBatch);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern IntPtr iplProbeBatchRetain(IntPtr probeBatch);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplProbeBatchRelease(ref IntPtr probeBatch);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern Error iplProbeBatchLoad(IntPtr context, IntPtr serializedObject, out IntPtr probeBatch);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplProbeBatchSave(IntPtr probeBatch, IntPtr serializedObject);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern int iplProbeBatchGetNumProbes(IntPtr probeBatch);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplProbeBatchAddProbe(IntPtr probeBatch, Sphere probe);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplProbeBatchAddProbeArray(IntPtr probeBatch, IntPtr probeArray);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplProbeBatchRemoveProbe(IntPtr probeBatch, int index);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplProbeBatchCommit(IntPtr probeBatch);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplProbeBatchRemoveData(IntPtr probeBatch, ref BakedDataIdentifier identifier);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern UIntPtr iplProbeBatchGetDataSize(IntPtr probeBatch, ref BakedDataIdentifier identifier);
// Baking
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplReflectionsBakerBake(IntPtr context, ref ReflectionsBakeParams bakeParams, ProgressCallback progressCallback, IntPtr userData);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplReflectionsBakerCancelBake(IntPtr context);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplPathBakerBake(IntPtr context, ref PathBakeParams bakeParams, ProgressCallback progressCallback, IntPtr userData);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplPathBakerCancelBake(IntPtr context);
// Run-Time Simulation
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern Error iplSimulatorCreate(IntPtr context, ref SimulationSettings settings, out IntPtr simulator);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern IntPtr iplSimulatorRetain(IntPtr simulator);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplSimulatorRelease(ref IntPtr simulator);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplSimulatorSetScene(IntPtr simulator, IntPtr scene);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplSimulatorAddProbeBatch(IntPtr simulator, IntPtr probeBatch);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplSimulatorRemoveProbeBatch(IntPtr simulator, IntPtr probeBatch);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplSimulatorSetSharedInputs(IntPtr simulator, SimulationFlags flags, ref SimulationSharedInputs sharedInputs);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplSimulatorCommit(IntPtr simulator);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplSimulatorRunDirect(IntPtr simulator);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplSimulatorRunReflections(IntPtr simulator);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplSimulatorRunPathing(IntPtr simulator);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern Error iplSourceCreate(IntPtr simulator, ref SourceSettings settings, out IntPtr source);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern IntPtr iplSourceRetain(IntPtr source);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplSourceRelease(ref IntPtr source);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplSourceAdd(IntPtr source, IntPtr simulator);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplSourceRemove(IntPtr source, IntPtr simulator);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplSourceSetInputs(IntPtr source, SimulationFlags flags, ref SimulationInputs inputs);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("phonon")]
#endif
public static extern void iplSourceGetOutputs(IntPtr source, SimulationFlags flags, ref SimulationOutputs outputs);
// UNITY PLUGIN
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("audioplugin_phonon")]
#endif
public static extern void iplUnityInitialize(IntPtr context);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("audioplugin_phonon")]
#endif
public static extern void iplUnitySetPerspectiveCorrection(PerspectiveCorrection correction);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("audioplugin_phonon")]
#endif
public static extern void iplUnitySetHRTF(IntPtr hrtf);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("audioplugin_phonon")]
#endif
public static extern void iplUnitySetSimulationSettings(SimulationSettings simulationSettings);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("audioplugin_phonon")]
#endif
public static extern void iplUnitySetReverbSource(IntPtr reverbSource);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("audioplugin_phonon")]
#endif
public static extern int iplUnityAddSource(IntPtr source);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("audioplugin_phonon")]
#endif
public static extern void iplUnityRemoveSource(int handle);
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
#else
[DllImport("audioplugin_phonon")]
#endif
public static extern void iplUnityTerminate();
}
}