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