1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- /**
- * Copyright(c) Live2D Inc. All rights reserved.
- *
- * Use of this source code is governed by the Live2D Open Software license
- * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html.
- */
- using AOT;
- using Live2D.Cubism.Core.Unmanaged;
- using System;
- using System.Runtime.InteropServices;
- using UnityEngine;
- namespace Live2D.Cubism.Core
- {
- /// <summary>
- /// Wrapper for core logs.
- /// </summary>
- internal static class CubismLogging
- {
- #region Delegates
- /// <summary>
- /// Delegate compatible with unmanaged log function.
- /// </summary>
- /// <param name="message">Message to log.</param>
- private unsafe delegate void UnmanagedLogDelegate(char* message);
- #endregion
- /// <summary>
- /// Delegate to pass to native Api.
- /// </summary>
- // ReSharper disable once PrivateFieldCanBeConvertedToLocalVariable
- private static UnmanagedLogDelegate LogDelegate { get; set; }
- #region Initialization
- /// <summary>
- /// Registers delegates.
- /// </summary>
- [RuntimeInitializeOnLoadMethod]
- // ReSharper disable once UnusedMember.Local
- private static unsafe void Initialize()
- {
- LogDelegate = LogUnmanaged;
- var logFunction = Marshal.GetFunctionPointerForDelegate(LogDelegate);
- csmSetLogFunction(logFunction);
- }
- #endregion
- /// <summary>
- /// Prints an unmanaged, null-terminated message.
- /// </summary>
- /// <param name="message">Message to log.</param>
- [MonoPInvokeCallback(typeof(UnmanagedLogDelegate))]
- private static unsafe void LogUnmanaged(char* message)
- {
- // Marshal message and log it.
- var managedMessage = Marshal.PtrToStringAnsi(new IntPtr(message));
- Debug.LogFormat("[Cubism] Core: {0}.", managedMessage);
- }
- #region Extern C
- [DllImport(CubismCoreDll.DllName)]
- private static extern void csmSetLogFunction(IntPtr logFunction);
- #endregion
- }
- }
|