diff --git a/Source/OpenTK/Audio/OpenAL/AL/Efx.cs b/Source/OpenTK/Audio/OpenAL/AL/Efx.cs index f1a6fb65..925e1971 100644 --- a/Source/OpenTK/Audio/OpenAL/AL/Efx.cs +++ b/Source/OpenTK/Audio/OpenAL/AL/Efx.cs @@ -242,7 +242,6 @@ namespace OpenTK.Audio DeleteEffects(effects.Length, ref effects[0]); } - /// This function deletes one Effect only. /// Pointer to an effect name/handle identifying the Effect Object to be deleted. public void DeleteEffect(int effect) @@ -535,81 +534,39 @@ namespace OpenTK.Audio /// After creation a Filter has no type (EfxFilterType.Null), so before it can be used to store a set of parameters, the application must specify what type of filter should be stored in the object, using Filter() with EfxFilteri. /// Number of Filters to be created. /// Pointer addressing sufficient memory to store n Filter object identifiers. - - public void GenFilters(int n, out int[] filters) + public void GenFilters(int n, out int filters) { - uint[] temp = new uint[n]; - GenFilters(n, out temp[0]); - filters = new int[n]; - for (int i = 0; i < n; i++) + unsafe { - filters[i] = (int)temp[i]; + fixed (int* ptr = &filters) + { + Imported_alGenFilters(n, (uint*)ptr); + filters = *ptr; + } } } - /// The GenFilters function is used to create one or more Filter objects. A Filter object stores a filter type and a set of parameter values to control that Filter. Filter objects can be attached to Sources as Direct Filters or Auxiliary Send Filters. - /// After creation a Filter has no type (EfxFilterType.Null), so before it can be used to store a set of parameters, the application must specify what type of filter should be stored in the object, using Filter() with EfxFilteri. - /// Pointer addressing sufficient memory to store n Filter object identifiers. - - public void GenFilters(int[] filters) - { - uint[] temp = new uint[filters.Length]; - GenFilters(temp.Length, out temp[0]); - for (int i = 0; i < temp.Length; i++) - { - filters[i] = (int)temp[i]; - } - } /// The GenFilters function is used to create one or more Filter objects. A Filter object stores a filter type and a set of parameter values to control that Filter. Filter objects can be attached to Sources as Direct Filters or Auxiliary Send Filters. /// After creation a Filter has no type (EfxFilterType.Null), so before it can be used to store a set of parameters, the application must specify what type of filter should be stored in the object, using Filter() with EfxFilteri. /// Number of Filters to be created. /// Pointer addressing sufficient memory to store n Filter object identifiers. - public int[] GenFilters(int n) { - uint[] temp = new uint[n]; - GenFilters(temp.Length, out temp[0]); + + if (n <= 0) throw new ArgumentOutOfRangeException("n", "Must be higher than 0."); int[] filters = new int[n]; - for (int i = 0; i < temp.Length; i++) - { - filters[i] = (int)temp[i]; - } + GenFilters(filters.Length, out filters[0]); return filters; } - /// This function generates only one Filter. - /// Storage UInt32 for the new filter name/handle. - [CLSCompliant(false)] - public void GenFilters(out uint filter) - { - unsafe - { - fixed (uint* ptr = &filter) - { - Imported_alGenFilters(1, ptr); - } - } - } - - /// This function generates only one Filter. - /// Storage UInt32 for the new filter name/handle. - - public void GenFilters(out int filter) - { - uint temp; - GenFilters(out temp); - filter = (int)temp; - } - /// This function generates only one Filter. /// Storage UInt32 for the new filter name/handle. - - public int GenFilters() + public int GenFilter() { - uint temp; - GenFilters(out temp); - return (int)temp; + int filter; + GenFilters(1, out filter); + return filter; } #endregion alGenFilters @@ -627,11 +584,11 @@ namespace OpenTK.Audio /// Number of Filters to be deleted. /// Pointer to n Filter object identifiers. [CLSCompliant(false)] - public void DeleteFilters(int n, ref uint[] filters) + public void DeleteFilters(int n, ref uint filters) { unsafe { - fixed (uint* ptr = filters) + fixed (uint* ptr = &filters) { Imported_alDeleteFilters(n, ptr); } @@ -641,60 +598,39 @@ namespace OpenTK.Audio /// The DeleteFilters function is used to delete and free resources for Filter objects previously created with GenFilters. /// Number of Filters to be deleted. /// Pointer to n Filter object identifiers. - - public void DeleteFilters(int n, ref int[] filters) - { - uint[] temp = new uint[n]; - for (int i = 0; i < n; i++) - { - temp[i] = (uint)filters[i]; - } - DeleteFilters(n, ref temp); - } - - /// The DeleteFilters function is used to delete and free resources for Filter objects previously created with GenFilters. - /// Pointer to n Filter object identifiers. - - public void DeleteFilters(int[] filters) - { - uint[] temp = new uint[filters.Length]; - for (int i = 0; i < temp.Length; i++) - { - temp[i] = (uint)filters[i]; - } - DeleteFilters(temp.Length, ref temp); - } - - /// This function deletes one Filter only. - /// Pointer to an filter name/handle identifying the Filter Object to be deleted. - [CLSCompliant(false)] - public void DeleteFilters(ref uint filter) + public void DeleteFilters(int n, ref int filters) { unsafe { - fixed (uint* ptr = &filter) + fixed (int* ptr = &filters) { - Imported_alDeleteFilters(1, ptr); + Imported_alDeleteFilters(n, (uint*)ptr); } } } /// This function deletes one Filter only. /// Pointer to an filter name/handle identifying the Filter Object to be deleted. - - public void DeleteFilters(ref int filter) + [CLSCompliant(false)] + public void DeleteFilters(uint[] filters) { - uint temp = (uint)filter; - DeleteFilters(ref temp); + if (filters == null) throw new ArgumentNullException("filters"); + DeleteFilters(filters.Length, ref filters[0]); + } + + /// This function deletes one Filter only. + /// Pointer to an filter name/handle identifying the Filter Object to be deleted. + public void DeleteFilters(int[] filters) + { + if (filters == null) throw new ArgumentNullException("filters"); + DeleteFilters(filters.Length, ref filters[0]); } /// This function deletes one Filter only. /// Pointer to an filter name/handle identifying the Filter Object to be deleted. - public void DeleteFilters(int filter) { - uint temp = (uint)filter; - DeleteFilters(ref temp); + DeleteFilters(1, ref filter); } #endregion alDeleteFilters