public void DebugMessageCallback(DebugMessageCallbackFunc Callback) { DebugMessageCallbackInternalFunc adapter = (int source, int type, uint id, int severity, IntPtr length, IntPtr message, IntPtr userparam) => { int msgLength = 0; if (length.ToInt64() > int.MaxValue - 1) { msgLength = int.MaxValue - 1; } else { msgLength = (int)length.ToInt64(); } byte * pMessage = (byte *)message.ToPointer(); byte[] data = new byte[msgLength]; for (int n = 0; n < data.Length && *pMessage != 0; n++) { data[n] = *pMessage; pMessage++; } string strMessage = System.Text.Encoding.UTF8.GetString(data); Callback(source, type, (int)id, severity, strMessage); }; DebugMessageCallback(adapter); }
internal void DebugMessageCallback(DebugMessageCallbackInternalFunc Callback) { _glDebugMessageCallback(System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(Callback), new IntPtr(null)); }