580 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			580 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) Meta Platforms, Inc. and affiliates.
 | |
|  * All rights reserved.
 | |
|  *
 | |
|  * Licensed under the Oculus SDK License Agreement (the "License");
 | |
|  * you may not use the Oculus SDK except in compliance with the License,
 | |
|  * which is provided at the time of installation or download, or which
 | |
|  * otherwise accompanies this software in either electronic or hard copy form.
 | |
|  *
 | |
|  * You may obtain a copy of the License at
 | |
|  *
 | |
|  * https://developer.oculus.com/licenses/oculussdk/
 | |
|  *
 | |
|  * Unless required by applicable law or agreed to in writing, the Oculus SDK
 | |
|  * 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.
 | |
|  */
 | |
| 
 | |
| /************************************************************************************
 | |
|  * Filename    :   ONSPPropagationInterface.cs
 | |
|  * Content     :   Interface into the Oculus Audio propagation functions
 | |
|  ***********************************************************************************/
 | |
| 
 | |
| using System;
 | |
| using System.Runtime.InteropServices;
 | |
| using UnityEngine;
 | |
| using Oculus.Spatializer.Propagation;
 | |
| 
 | |
| namespace Oculus
 | |
| {
 | |
|     namespace Spatializer
 | |
|     {
 | |
|         namespace Propagation
 | |
|         {
 | |
|             /***********************************************************************************/
 | |
|             // ENUMS and STRUCTS
 | |
|             /***********************************************************************************/
 | |
|             public enum FaceType : uint
 | |
|             {
 | |
|                 TRIANGLES = 0,
 | |
|                 QUADS
 | |
|             }
 | |
| 
 | |
|             public enum MaterialProperty : uint
 | |
|             {
 | |
|                 ABSORPTION = 0,
 | |
|                 TRANSMISSION,
 | |
|                 SCATTERING
 | |
|             }
 | |
| 
 | |
|             // Matches internal mesh layout
 | |
|             [StructLayout(LayoutKind.Sequential, Pack = 1)]
 | |
|             public struct MeshGroup
 | |
|             {
 | |
|                 public UIntPtr indexOffset;
 | |
|                 public UIntPtr faceCount;
 | |
|                 [MarshalAs(UnmanagedType.U4)]
 | |
|                 public FaceType faceType;
 | |
|                 public IntPtr material;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| class ONSPPropagation
 | |
| {
 | |
|     static PropagationInterface CachedInterface;
 | |
|     public static PropagationInterface Interface { get { if (CachedInterface == null) CachedInterface = FindInterface(); return CachedInterface; } }
 | |
| 
 | |
|     static PropagationInterface FindInterface()
 | |
|     {
 | |
|         IntPtr temp;
 | |
|         try
 | |
|         {
 | |
|             WwisePluginInterface.ovrAudio_GetPluginContext(out temp, ClientType.OVRA_CLIENT_TYPE_WWISE_UNKNOWN);
 | |
|             Debug.Log("Propagation initialized with Wwise Oculus Spatializer plugin");
 | |
|             return new WwisePluginInterface();
 | |
|         }
 | |
|         catch(System.DllNotFoundException)
 | |
|         {
 | |
|             // this is fine
 | |
|         }
 | |
|         try
 | |
|         {
 | |
|             FMODPluginInterface.ovrAudio_GetPluginContext(out temp, ClientType.OVRA_CLIENT_TYPE_FMOD);
 | |
|             Debug.Log("Propagation initialized with FMOD Oculus Spatializer plugin");
 | |
|             return new FMODPluginInterface();
 | |
|         }
 | |
|         catch (System.DllNotFoundException)
 | |
|         {
 | |
|             // this is fine
 | |
|         }
 | |
| 
 | |
|         Debug.Log("Propagation initialized with Unity Oculus Spatializer plugin");
 | |
|         return new UnityNativeInterface();
 | |
|     }
 | |
| 
 | |
|     public enum ovrAudioScalarType : uint
 | |
|     {
 | |
|         Int8,
 | |
|         UInt8,
 | |
|         Int16,
 | |
|         UInt16,
 | |
|         Int32,
 | |
|         UInt32,
 | |
|         Int64,
 | |
|         UInt64,
 | |
|         Float16,
 | |
|         Float32,
 | |
|         Float64
 | |
|     }
 | |
| 
 | |
|     public class ClientType
 | |
|     {
 | |
|         // Copied from AudioSDK\OVRAudio\OVR_Audio_Internal.h
 | |
|         public const uint OVRA_CLIENT_TYPE_NATIVE = 0;
 | |
|         public const uint OVRA_CLIENT_TYPE_WWISE_2016 = 1;
 | |
|         public const uint OVRA_CLIENT_TYPE_WWISE_2017_1 = 2;
 | |
|         public const uint OVRA_CLIENT_TYPE_WWISE_2017_2 = 3;
 | |
|         public const uint OVRA_CLIENT_TYPE_WWISE_2018_1 = 4;
 | |
|         public const uint OVRA_CLIENT_TYPE_FMOD = 5;
 | |
|         public const uint OVRA_CLIENT_TYPE_UNITY = 6;
 | |
|         public const uint OVRA_CLIENT_TYPE_UE4 = 7;
 | |
|         public const uint OVRA_CLIENT_TYPE_VST = 8;
 | |
|         public const uint OVRA_CLIENT_TYPE_AAX = 9;
 | |
|         public const uint OVRA_CLIENT_TYPE_TEST = 10;
 | |
|         public const uint OVRA_CLIENT_TYPE_OTHER = 11;
 | |
|         public const uint OVRA_CLIENT_TYPE_WWISE_UNKNOWN = 12;
 | |
|         public const uint OVRA_CLIENT_TYPE_WWISE_2019_1 = 13;
 | |
|         public const uint OVRA_CLIENT_TYPE_WWISE_2019_2 = 14;
 | |
|         public const uint OVRA_CLIENT_TYPE_WWISE_2021_1 = 15;
 | |
|     }
 | |
| 
 | |
|     public interface PropagationInterface
 | |
|     {
 | |
|         /***********************************************************************************/
 | |
|         // Settings API
 | |
|         int SetPropagationQuality(float quality);
 | |
|         int SetPropagationThreadAffinity(UInt64 cpuMask);
 | |
| 
 | |
|         /***********************************************************************************/
 | |
|         // Geometry API
 | |
|         int CreateAudioGeometry(out IntPtr geometry);
 | |
|         int DestroyAudioGeometry(IntPtr geometry);
 | |
|         int AudioGeometryUploadMeshArrays(IntPtr geometry,
 | |
|                                                         float[] vertices, int vertexCount,
 | |
|                                                         int[] indices, int indexCount,
 | |
|                                                         MeshGroup[] groups, int groupCount);
 | |
|         int AudioGeometrySetTransform(IntPtr geometry, float[] matrix4x4);
 | |
|         int AudioGeometryGetTransform(IntPtr geometry, out float[] matrix4x4);
 | |
|         int AudioGeometryWriteMeshFile(IntPtr geometry, string filePath);
 | |
|         int AudioGeometryReadMeshFile(IntPtr geometry, string filePath);
 | |
|         int AudioGeometryWriteMeshFileObj(IntPtr geometry, string filePath);
 | |
| 
 | |
|         /***********************************************************************************/
 | |
|         // Material API
 | |
|         int AudioMaterialGetFrequency(IntPtr material, MaterialProperty property, float frequency, out float value);
 | |
|         int CreateAudioMaterial(out IntPtr material);
 | |
|         int DestroyAudioMaterial(IntPtr material);
 | |
|         int AudioMaterialSetFrequency(IntPtr material, MaterialProperty property, float frequency, float value);
 | |
|         int AudioMaterialReset(IntPtr material, MaterialProperty property);
 | |
|     }
 | |
| 
 | |
|     /***********************************************************************************/
 | |
|     // UNITY NATIVE
 | |
|     /***********************************************************************************/
 | |
|     public class UnityNativeInterface : PropagationInterface
 | |
|     {
 | |
|         // The name used for the plugin DLL.
 | |
|         public const string strOSPS = "AudioPluginOculusSpatializer";
 | |
| 
 | |
|         /***********************************************************************************/
 | |
|         // Context API: Required to create internal context if it does not exist yet
 | |
|         IntPtr context_ = IntPtr.Zero;
 | |
|         IntPtr context { get { if (context_ == IntPtr.Zero) { ovrAudio_GetPluginContext(out context_, ClientType.OVRA_CLIENT_TYPE_UNITY); } return context_; } }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         public static extern int ovrAudio_GetPluginContext(out IntPtr context, uint clientType);
 | |
| 
 | |
|         /***********************************************************************************/
 | |
|         // Settings API
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_SetPropagationQuality(IntPtr context, float quality);
 | |
|         public int SetPropagationQuality(float quality)
 | |
|         {
 | |
|             return ovrAudio_SetPropagationQuality(context, quality);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_SetPropagationThreadAffinity(IntPtr context, UInt64 cpuMask);
 | |
|         public int SetPropagationThreadAffinity(UInt64 cpuMask)
 | |
|         {
 | |
|             return ovrAudio_SetPropagationThreadAffinity(context, cpuMask);
 | |
|         }
 | |
| 
 | |
|         /***********************************************************************************/
 | |
|         // Geometry API
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_CreateAudioGeometry(IntPtr context, out IntPtr geometry);
 | |
|         public int CreateAudioGeometry(out IntPtr geometry)
 | |
|         {
 | |
|             return ovrAudio_CreateAudioGeometry(context, out geometry);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_DestroyAudioGeometry(IntPtr geometry);
 | |
|         public int DestroyAudioGeometry(IntPtr geometry)
 | |
|         {
 | |
|             return ovrAudio_DestroyAudioGeometry(geometry);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioGeometryUploadMeshArrays(IntPtr geometry,
 | |
|                                                                         float[] vertices, UIntPtr verticesBytesOffset, UIntPtr vertexCount, UIntPtr vertexStride, ovrAudioScalarType vertexType,
 | |
|                                                                         int[] indices, UIntPtr indicesByteOffset, UIntPtr indexCount, ovrAudioScalarType indexType,
 | |
|                                                                         MeshGroup[] groups, UIntPtr groupCount);
 | |
| 
 | |
|         public int AudioGeometryUploadMeshArrays(IntPtr geometry,
 | |
|                                                         float[] vertices, int vertexCount,
 | |
|                                                         int[] indices, int indexCount,
 | |
|                                                         MeshGroup[] groups, int groupCount)
 | |
|         {
 | |
|             return ovrAudio_AudioGeometryUploadMeshArrays(geometry,
 | |
|                 vertices, UIntPtr.Zero, (UIntPtr)vertexCount, UIntPtr.Zero, ovrAudioScalarType.Float32,
 | |
|                 indices, UIntPtr.Zero, (UIntPtr)indexCount, ovrAudioScalarType.UInt32,
 | |
|                 groups, (UIntPtr)groupCount);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioGeometrySetTransform(IntPtr geometry, float[] matrix4x4);
 | |
|         public int AudioGeometrySetTransform(IntPtr geometry, float[] matrix4x4)
 | |
|         {
 | |
|             return ovrAudio_AudioGeometrySetTransform(geometry, matrix4x4);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioGeometryGetTransform(IntPtr geometry, out float[] matrix4x4);
 | |
|         public int AudioGeometryGetTransform(IntPtr geometry, out float[] matrix4x4)
 | |
|         {
 | |
|             return ovrAudio_AudioGeometryGetTransform(geometry, out matrix4x4);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioGeometryWriteMeshFile(IntPtr geometry, string filePath);
 | |
|         public int AudioGeometryWriteMeshFile(IntPtr geometry, string filePath)
 | |
|         {
 | |
|             return ovrAudio_AudioGeometryWriteMeshFile(geometry, filePath);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioGeometryReadMeshFile(IntPtr geometry, string filePath);
 | |
|         public int AudioGeometryReadMeshFile(IntPtr geometry, string filePath)
 | |
|         {
 | |
|             return ovrAudio_AudioGeometryReadMeshFile(geometry, filePath);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioGeometryWriteMeshFileObj(IntPtr geometry, string filePath);
 | |
|         public int AudioGeometryWriteMeshFileObj(IntPtr geometry, string filePath)
 | |
|         {
 | |
|             return ovrAudio_AudioGeometryWriteMeshFileObj(geometry, filePath);
 | |
|         }
 | |
| 
 | |
|         /***********************************************************************************/
 | |
|         // Material API
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_CreateAudioMaterial(IntPtr context, out IntPtr material);
 | |
|         public int CreateAudioMaterial(out IntPtr material)
 | |
|         {
 | |
|             return ovrAudio_CreateAudioMaterial(context, out material);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_DestroyAudioMaterial(IntPtr material);
 | |
|         public int DestroyAudioMaterial(IntPtr material)
 | |
|         {
 | |
|             return ovrAudio_DestroyAudioMaterial(material);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioMaterialSetFrequency(IntPtr material, MaterialProperty property, float frequency, float value);
 | |
|         public int AudioMaterialSetFrequency(IntPtr material, MaterialProperty property, float frequency, float value)
 | |
|         {
 | |
|             return ovrAudio_AudioMaterialSetFrequency(material, property, frequency, value);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioMaterialGetFrequency(IntPtr material, MaterialProperty property, float frequency, out float value);
 | |
|         public int AudioMaterialGetFrequency(IntPtr material, MaterialProperty property, float frequency, out float value)
 | |
|         {
 | |
|             return ovrAudio_AudioMaterialGetFrequency(material, property, frequency, out value);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioMaterialReset(IntPtr material, MaterialProperty property);
 | |
|         public int AudioMaterialReset(IntPtr material, MaterialProperty property)
 | |
|         {
 | |
|             return ovrAudio_AudioMaterialReset(material, property);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /***********************************************************************************/
 | |
|     // WWISE
 | |
|     /***********************************************************************************/
 | |
|     public class WwisePluginInterface : PropagationInterface
 | |
|     {
 | |
|         // The name used for the plugin DLL.
 | |
|         public const string strOSPS = "OculusSpatializerWwise";
 | |
| 
 | |
|         /***********************************************************************************/
 | |
|         // Context API: Required to create internal context if it does not exist yet
 | |
|         IntPtr context_ = IntPtr.Zero;
 | |
|         IntPtr context { get { if (context_ == IntPtr.Zero) { ovrAudio_GetPluginContext(out context_, ClientType.OVRA_CLIENT_TYPE_WWISE_UNKNOWN); } return context_; } }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         public static extern int ovrAudio_GetPluginContext(out IntPtr context, uint clientType);
 | |
| 
 | |
|         /***********************************************************************************/
 | |
|         // Settings API
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_SetPropagationQuality(IntPtr context, float quality);
 | |
|         public int SetPropagationQuality(float quality)
 | |
|         {
 | |
|             return ovrAudio_SetPropagationQuality(context, quality);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_SetPropagationThreadAffinity(IntPtr context, UInt64 cpuMask);
 | |
|         public int SetPropagationThreadAffinity(UInt64 cpuMask)
 | |
|         {
 | |
|             return ovrAudio_SetPropagationThreadAffinity(context, cpuMask);
 | |
|         }
 | |
| 
 | |
|         /***********************************************************************************/
 | |
|         // Geometry API
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_CreateAudioGeometry(IntPtr context, out IntPtr geometry);
 | |
|         public int CreateAudioGeometry(out IntPtr geometry)
 | |
|         {
 | |
|             return ovrAudio_CreateAudioGeometry(context, out geometry);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_DestroyAudioGeometry(IntPtr geometry);
 | |
|         public int DestroyAudioGeometry(IntPtr geometry)
 | |
|         {
 | |
|             return ovrAudio_DestroyAudioGeometry(geometry);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioGeometryUploadMeshArrays(IntPtr geometry,
 | |
|                                                                         float[] vertices, UIntPtr verticesBytesOffset, UIntPtr vertexCount, UIntPtr vertexStride, ovrAudioScalarType vertexType,
 | |
|                                                                         int[] indices, UIntPtr indicesByteOffset, UIntPtr indexCount, ovrAudioScalarType indexType,
 | |
|                                                                         MeshGroup[] groups, UIntPtr groupCount);
 | |
| 
 | |
|         public int AudioGeometryUploadMeshArrays(IntPtr geometry,
 | |
|                                                         float[] vertices, int vertexCount,
 | |
|                                                         int[] indices, int indexCount,
 | |
|                                                         MeshGroup[] groups, int groupCount)
 | |
|         {
 | |
|             return ovrAudio_AudioGeometryUploadMeshArrays(geometry,
 | |
|                 vertices, UIntPtr.Zero, (UIntPtr)vertexCount, UIntPtr.Zero, ovrAudioScalarType.Float32,
 | |
|                 indices, UIntPtr.Zero, (UIntPtr)indexCount, ovrAudioScalarType.UInt32,
 | |
|                 groups, (UIntPtr)groupCount);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioGeometrySetTransform(IntPtr geometry, float[] matrix4x4);
 | |
|         public int AudioGeometrySetTransform(IntPtr geometry, float[] matrix4x4)
 | |
|         {
 | |
|             return ovrAudio_AudioGeometrySetTransform(geometry, matrix4x4);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioGeometryGetTransform(IntPtr geometry, out float[] matrix4x4);
 | |
|         public int AudioGeometryGetTransform(IntPtr geometry, out float[] matrix4x4)
 | |
|         {
 | |
|             return ovrAudio_AudioGeometryGetTransform(geometry, out matrix4x4);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioGeometryWriteMeshFile(IntPtr geometry, string filePath);
 | |
|         public int AudioGeometryWriteMeshFile(IntPtr geometry, string filePath)
 | |
|         {
 | |
|             return ovrAudio_AudioGeometryWriteMeshFile(geometry, filePath);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioGeometryReadMeshFile(IntPtr geometry, string filePath);
 | |
|         public int AudioGeometryReadMeshFile(IntPtr geometry, string filePath)
 | |
|         {
 | |
|             return ovrAudio_AudioGeometryReadMeshFile(geometry, filePath);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioGeometryWriteMeshFileObj(IntPtr geometry, string filePath);
 | |
|         public int AudioGeometryWriteMeshFileObj(IntPtr geometry, string filePath)
 | |
|         {
 | |
|             return ovrAudio_AudioGeometryWriteMeshFileObj(geometry, filePath);
 | |
|         }
 | |
| 
 | |
|         /***********************************************************************************/
 | |
|         // Material API
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_CreateAudioMaterial(IntPtr context, out IntPtr material);
 | |
|         public int CreateAudioMaterial(out IntPtr material)
 | |
|         {
 | |
|             return ovrAudio_CreateAudioMaterial(context, out material);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_DestroyAudioMaterial(IntPtr material);
 | |
|         public int DestroyAudioMaterial(IntPtr material)
 | |
|         {
 | |
|             return ovrAudio_DestroyAudioMaterial(material);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioMaterialSetFrequency(IntPtr material, MaterialProperty property, float frequency, float value);
 | |
|         public int AudioMaterialSetFrequency(IntPtr material, MaterialProperty property, float frequency, float value)
 | |
|         {
 | |
|             return ovrAudio_AudioMaterialSetFrequency(material, property, frequency, value);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioMaterialGetFrequency(IntPtr material, MaterialProperty property, float frequency, out float value);
 | |
|         public int AudioMaterialGetFrequency(IntPtr material, MaterialProperty property, float frequency, out float value)
 | |
|         {
 | |
|             return ovrAudio_AudioMaterialGetFrequency(material, property, frequency, out value);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioMaterialReset(IntPtr material, MaterialProperty property);
 | |
|         public int AudioMaterialReset(IntPtr material, MaterialProperty property)
 | |
|         {
 | |
|             return ovrAudio_AudioMaterialReset(material, property);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /***********************************************************************************/
 | |
|     // FMOD
 | |
|     /***********************************************************************************/
 | |
|     public class FMODPluginInterface : PropagationInterface
 | |
|     {
 | |
|         // The name used for the plugin DLL.
 | |
|         public const string strOSPS = "OculusSpatializerFMOD";
 | |
| 
 | |
|         /***********************************************************************************/
 | |
|         // Context API: Required to create internal context if it does not exist yet
 | |
|         IntPtr context_ = IntPtr.Zero;
 | |
|         IntPtr context { get { if (context_ == IntPtr.Zero) { ovrAudio_GetPluginContext(out context_, ClientType.OVRA_CLIENT_TYPE_FMOD); } return context_; } }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         public static extern int ovrAudio_GetPluginContext(out IntPtr context, uint clientType);
 | |
| 
 | |
|         /***********************************************************************************/
 | |
|         // Settings API
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_SetPropagationQuality(IntPtr context, float quality);
 | |
|         public int SetPropagationQuality(float quality)
 | |
|         {
 | |
|             return ovrAudio_SetPropagationQuality(context, quality);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_SetPropagationThreadAffinity(IntPtr context, UInt64 cpuMask);
 | |
|         public int SetPropagationThreadAffinity(UInt64 cpuMask)
 | |
|         {
 | |
|             return ovrAudio_SetPropagationThreadAffinity(context, cpuMask);
 | |
|         }
 | |
| 
 | |
|         /***********************************************************************************/
 | |
|         // Geometry API
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_CreateAudioGeometry(IntPtr context, out IntPtr geometry);
 | |
|         public int CreateAudioGeometry(out IntPtr geometry)
 | |
|         {
 | |
|             return ovrAudio_CreateAudioGeometry(context, out geometry);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_DestroyAudioGeometry(IntPtr geometry);
 | |
|         public int DestroyAudioGeometry(IntPtr geometry)
 | |
|         {
 | |
|             return ovrAudio_DestroyAudioGeometry(geometry);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioGeometryUploadMeshArrays(IntPtr geometry,
 | |
|                                                                         float[] vertices, UIntPtr verticesBytesOffset, UIntPtr vertexCount, UIntPtr vertexStride, ovrAudioScalarType vertexType,
 | |
|                                                                         int[] indices, UIntPtr indicesByteOffset, UIntPtr indexCount, ovrAudioScalarType indexType,
 | |
|                                                                         MeshGroup[] groups, UIntPtr groupCount);
 | |
| 
 | |
|         public int AudioGeometryUploadMeshArrays(IntPtr geometry,
 | |
|                                                         float[] vertices, int vertexCount,
 | |
|                                                         int[] indices, int indexCount,
 | |
|                                                         MeshGroup[] groups, int groupCount)
 | |
|         {
 | |
|             return ovrAudio_AudioGeometryUploadMeshArrays(geometry,
 | |
|                 vertices, UIntPtr.Zero, (UIntPtr)vertexCount, UIntPtr.Zero, ovrAudioScalarType.Float32,
 | |
|                 indices, UIntPtr.Zero, (UIntPtr)indexCount, ovrAudioScalarType.UInt32,
 | |
|                 groups, (UIntPtr)groupCount);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioGeometrySetTransform(IntPtr geometry, float[] matrix4x4);
 | |
|         public int AudioGeometrySetTransform(IntPtr geometry, float[] matrix4x4)
 | |
|         {
 | |
|             return ovrAudio_AudioGeometrySetTransform(geometry, matrix4x4);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioGeometryGetTransform(IntPtr geometry, out float[] matrix4x4);
 | |
|         public int AudioGeometryGetTransform(IntPtr geometry, out float[] matrix4x4)
 | |
|         {
 | |
|             return ovrAudio_AudioGeometryGetTransform(geometry, out matrix4x4);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioGeometryWriteMeshFile(IntPtr geometry, string filePath);
 | |
|         public int AudioGeometryWriteMeshFile(IntPtr geometry, string filePath)
 | |
|         {
 | |
|             return ovrAudio_AudioGeometryWriteMeshFile(geometry, filePath);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioGeometryReadMeshFile(IntPtr geometry, string filePath);
 | |
|         public int AudioGeometryReadMeshFile(IntPtr geometry, string filePath)
 | |
|         {
 | |
|             return ovrAudio_AudioGeometryReadMeshFile(geometry, filePath);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioGeometryWriteMeshFileObj(IntPtr geometry, string filePath);
 | |
|         public int AudioGeometryWriteMeshFileObj(IntPtr geometry, string filePath)
 | |
|         {
 | |
|             return ovrAudio_AudioGeometryWriteMeshFileObj(geometry, filePath);
 | |
|         }
 | |
| 
 | |
|         /***********************************************************************************/
 | |
|         // Material API
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_CreateAudioMaterial(IntPtr context, out IntPtr material);
 | |
|         public int CreateAudioMaterial(out IntPtr material)
 | |
|         {
 | |
|             return ovrAudio_CreateAudioMaterial(context, out material);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_DestroyAudioMaterial(IntPtr material);
 | |
|         public int DestroyAudioMaterial(IntPtr material)
 | |
|         {
 | |
|             return ovrAudio_DestroyAudioMaterial(material);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioMaterialSetFrequency(IntPtr material, MaterialProperty property, float frequency, float value);
 | |
|         public int AudioMaterialSetFrequency(IntPtr material, MaterialProperty property, float frequency, float value)
 | |
|         {
 | |
|             return ovrAudio_AudioMaterialSetFrequency(material, property, frequency, value);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioMaterialGetFrequency(IntPtr material, MaterialProperty property, float frequency, out float value);
 | |
|         public int AudioMaterialGetFrequency(IntPtr material, MaterialProperty property, float frequency, out float value)
 | |
|         {
 | |
|             return ovrAudio_AudioMaterialGetFrequency(material, property, frequency, out value);
 | |
|         }
 | |
| 
 | |
|         [DllImport(strOSPS)]
 | |
|         private static extern int ovrAudio_AudioMaterialReset(IntPtr material, MaterialProperty property);
 | |
|         public int AudioMaterialReset(IntPtr material, MaterialProperty property)
 | |
|         {
 | |
|             return ovrAudio_AudioMaterialReset(material, property);
 | |
|         }
 | |
|     }
 | |
| }
 |