| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- using System;
- using System.Runtime.InteropServices;
- using UnityEngine.Experimental.Rendering;
- using UnityEngine.Rendering;
- namespace com.zibra.liquid.Bridge
- {
- internal static class LiquidBridge
- {
- #if UNITY_EDITOR
- // Editor library selection
- #if UNITY_EDITOR_WIN
- public const String PluginLibraryName = "ZibraLiquidNative_Win_Editor";
- #elif UNITY_EDITOR_OSX
- public const String PluginLibraryName = "ZibraLiquidNative_Mac_Editor";
- #else
- #error Unsupported platform
- #endif
- #else
- // Player library selection
- #if UNITY_IOS || UNITY_TVOS
- public const String PluginLibraryName = "__Internal";
- #elif UNITY_WSA
- public const String PluginLibraryName = "ZibraLiquidNative_WSA";
- #elif UNITY_STANDALONE_OSX
- public const String PluginLibraryName = "ZibraLiquidNative_Mac";
- #elif UNITY_STANDALONE_WIN
- public const String PluginLibraryName = "ZibraLiquidNative_Win";
- #elif UNITY_ANDROID
- public const String PluginLibraryName = "ZibraLiquidNative_Android";
- #else
- #error Unsupported platform
- #endif
- #endif
- #if ZIBRA_EFFECTS_PROFILING_ENABLED
- [StructLayout(LayoutKind.Sequential)]
- public struct DebugTimestampItem
- {
- public uint EventType;
- public float ExecutionTime;
- }
- #endif
- [DllImport(PluginLibraryName)]
- public static extern IntPtr ZibraLiquid_GetRenderEventWithDataFunc();
- [DllImport(PluginLibraryName)]
- public static extern IntPtr ZibraLiquid_GPUReadbackGetData(Int32 InstanceID, UInt32 size);
- [DllImport(PluginLibraryName)]
- public static extern Int32 ZibraLiquid_IsLoaded();
- [DllImport(PluginLibraryName)]
- public static extern void ZibraLiquid_WaitLoad();
- [DllImport(PluginLibraryName)]
- public static extern Int32 ZibraLiquid_GarbageCollect();
- #if ZIBRA_EFFECTS_PROFILING_ENABLED
- [DllImport(PluginLibraryName, CallingConvention = CallingConvention.Cdecl)]
- public static extern uint ZibraLiquid_GetDebugTimestamps(Int32 InstanceID,
- [In, Out] DebugTimestampItem[] timestampsItems);
- #endif
- #if UNITY_EDITOR
- [DllImport(PluginLibraryName)]
- public static extern Int32 ZibraLiquid_GetCurrentAffineBufferIndex(Int32 InstanceID);
- [DllImport(PluginLibraryName)]
- private static extern IntPtr ZibraLiquid_GetHardwareID();
- #if !ZIBRA_EFFECTS_NO_LICENSE_CHECK
- [DllImport(PluginLibraryName)]
- public static extern Int32 ZibraLiquid_GetRandomNumber();
- [DllImport(PluginLibraryName)]
- public static extern void ZibraLiquid_ValidateLicense([MarshalAs(UnmanagedType.LPStr)] string serverResponse,
- Int32 responseSize);
- #endif
- #endif
- public enum EventID : int
- {
- None = 0,
- StepPhysics = 1,
- DrawLiquid = 2,
- UpdateLiquidParameters = 3,
- UpdateManipulatorParameters = 4,
- ClearSDFAndID = 5,
- CreateFluidInstance = 6,
- RegisterParticlesBuffers = 7,
- SetCameraParameters = 8,
- SetRenderParameters = 9,
- RegisterManipulators = 10,
- RegisterSolverBuffers = 11,
- RegisterRenderResources = 12,
- ReleaseResources = 13,
- InitializeGpuReadback = 14,
- UpdateReadback = 15,
- SetCameraParams = 16,
- UpdateMeshRenderGlobalParameters = 17,
- InitializeGraphicsPipeline = 18,
- UpdateSolverParameters = 19,
- UpdateSDFObjects = 20,
- RenderSDF = 21,
- DrawEffectParticles = 22
- }
- internal struct EventData
- {
- public int InstanceID;
- public IntPtr ExtraData;
- };
- public enum TextureFormat
- {
- None,
- R8G8B8A8_SNorm,
- R16G16B16A16_SFloat,
- R32G32B32A32_SFloat,
- R16_SFloat,
- R32_SFloat,
- }
- public static TextureFormat ToBridgeTextureFormat(GraphicsFormat format)
- {
- switch (format)
- {
- case GraphicsFormat.R8G8B8A8_UNorm:
- return TextureFormat.R8G8B8A8_SNorm;
- case GraphicsFormat.R16G16B16A16_SFloat:
- return TextureFormat.R16G16B16A16_SFloat;
- case GraphicsFormat.R32G32B32A32_SFloat:
- return TextureFormat.R32G32B32A32_SFloat;
- case GraphicsFormat.R16_SFloat:
- return TextureFormat.R16_SFloat;
- case GraphicsFormat.R32_SFloat:
- return TextureFormat.R32_SFloat;
- default:
- return TextureFormat.None;
- }
- }
- #if UNITY_EDITOR
- public static string GetHardwareIDWrapper()
- {
- IntPtr cstr = ZibraLiquid_GetHardwareID();
- string result = Marshal.PtrToStringAnsi(cstr);
- return result;
- }
- #endif
- public static int EventAndInstanceID(EventID eventID, int InstanceID)
- {
- return (int)eventID | (InstanceID << 8);
- }
- public static void SubmitInstanceEvent(CommandBuffer cmd, int instanceID, EventID eventID,
- IntPtr data = default)
- {
- EventData eventData;
- eventData.InstanceID = instanceID;
- eventData.ExtraData = data;
- IntPtr eventDataNative = Marshal.AllocHGlobal(Marshal.SizeOf(eventData));
- Marshal.StructureToPtr(eventData, eventDataNative, true);
- cmd.IssuePluginEventAndData(ZibraLiquid_GetRenderEventWithDataFunc(), (int)eventID, eventDataNative);
- }
- public static bool NeedGarbageCollect()
- {
- switch (UnityEngine.SystemInfo.graphicsDeviceType)
- {
- case GraphicsDeviceType.Vulkan:
- case GraphicsDeviceType.Direct3D12:
- case GraphicsDeviceType.XboxOneD3D12:
- case GraphicsDeviceType.GameCoreXboxOne:
- case GraphicsDeviceType.GameCoreXboxSeries:
- return true;
- default:
- return false;
- }
- }
- }
- }
|