From 8527483c0b96cdbc18960ecc46617f7abeba6a49 Mon Sep 17 00:00:00 2001 From: the_fiddler Date: Fri, 23 Oct 2009 16:10:55 +0000 Subject: [PATCH] Fixed x86-specific ABI assumption (do not return structure directly when a pointer is expected). Patch by jonp. --- Source/OpenTK/Audio/OpenAL/Alc/Alc.cs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Source/OpenTK/Audio/OpenAL/Alc/Alc.cs b/Source/OpenTK/Audio/OpenAL/Alc/Alc.cs index b0026e11..c6f50981 100644 --- a/Source/OpenTK/Audio/OpenAL/Alc/Alc.cs +++ b/Source/OpenTK/Audio/OpenAL/Alc/Alc.cs @@ -88,8 +88,14 @@ namespace OpenTK.Audio.OpenAL /// a pointer to a set of attributes: ALC_FREQUENCY, ALC_MONO_SOURCES, ALC_REFRESH, ALC_STEREO_SOURCES, ALC_SYNC /// Returns a pointer to the new context (NULL on failure). The attribute list can be NULL, or a zero terminated list of integer pairs composed of valid ALC attribute tokens and requested values. [DllImport(Alc.Lib, EntryPoint = "alcCreateContext", ExactSpelling = true, CallingConvention = Alc.Style), SuppressUnmanagedCodeSecurity] + unsafe static extern IntPtr sys_CreateContext([In] IntPtr device, [In] int* attrlist); + [CLSCompliant(false)] - unsafe public static extern ContextHandle CreateContext([In] IntPtr device, [In] int* attrlist); + unsafe public static ContextHandle CreateContext([In] IntPtr device, [In] int* attrlist) + { + return new ContextHandle(sys_CreateContext(device, attrlist)); + } + // ALC_API ALCcontext * ALC_APIENTRY alcCreateContext( ALCdevice *device, const ALCint* attrlist ); /// This function creates a context using a specified device. @@ -138,7 +144,12 @@ namespace OpenTK.Audio.OpenAL /// This function retrieves the current context. /// Returns a pointer to the current context. [DllImport(Alc.Lib, EntryPoint = "alcGetCurrentContext", ExactSpelling = true, CallingConvention = Alc.Style), SuppressUnmanagedCodeSecurity()] - public static extern ContextHandle GetCurrentContext(); + private static extern IntPtr sys_GetCurrentContext(); + + public static ContextHandle GetCurrentContext() + { + return new ContextHandle(sys_GetCurrentContext()); + } // ALC_API ALCcontext * ALC_APIENTRY alcGetCurrentContext( void ); /// This function retrieves a context's device pointer.