暫無描述
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

UnityInterface.h 16KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423
  1. #pragma once
  2. #include <stdint.h>
  3. #include <stdarg.h>
  4. #include "UnityForwardDecls.h"
  5. #include "UnityRendering.h"
  6. #ifdef __OBJC__
  7. #import "Foundation/Foundation.h"
  8. #endif
  9. // unity plugin functions
  10. // audio plugin api
  11. typedef int (*UnityPluginGetAudioEffectDefinitionsFunc)(struct UnityAudioEffectDefinition*** descptr);
  12. // OLD rendering plugin api (will become obsolete soon)
  13. typedef void (*UnityPluginSetGraphicsDeviceFunc)(void* device, int deviceType, int eventType);
  14. typedef void (*UnityPluginRenderMarkerFunc)(int marker);
  15. // new rendering plugin api
  16. typedef void (*UnityPluginLoadFunc)(struct IUnityInterfaces* unityInterfaces);
  17. typedef void (*UnityPluginUnloadFunc)(void);
  18. // log handler function
  19. #ifdef __cplusplus
  20. typedef bool (*LogEntryHandler)(LogType logType, const char* log, va_list list);
  21. #endif
  22. //
  23. // these are functions referenced in trampoline and implemented in unity player lib
  24. //
  25. #ifdef __cplusplus
  26. extern "C" {
  27. #endif
  28. // life cycle management
  29. void UnityInitRuntime(int argc, char* argv[]);
  30. void UnityInitApplicationNoGraphics(const char* appPathName);
  31. void UnityUnloadApplication(void);
  32. void UnityQuitApplication(int exitCode);
  33. void UnityInitApplicationGraphics(void);
  34. void UnityCleanup(void);
  35. void UnityLoadApplication(void);
  36. void UnityLoadApplicationFromSceneLessState(void);
  37. void UnityPlayerLoop(void); // normal player loop
  38. void UnityBatchPlayerLoop(void); // batch mode like player loop, without rendering (usable for background processing)
  39. void UnitySetPlayerFocus(int focused); // send OnApplicationFocus() message to scripts
  40. void UnityLowMemory(void);
  41. void UnityPause(int pause);
  42. void UnitySuppressPauseMessage(void);
  43. int UnityIsPaused(void); // 0 if player is running, 1 if paused
  44. void UnityWillPause(void); // send the message that app will pause
  45. void UnityWillResume(void); // send the message that app will resume
  46. void UnityDeliverUIEvents(void); // unity processing impacting UI will be called in there
  47. void UnityWaitForFrame();
  48. void UnityInputProcess(void); // no longer used, will be removed soon
  49. // rendering
  50. int UnityGetRenderingAPI(void);
  51. void UnityFinishRendering(void);
  52. void UnityDisplayLinkCallback(double /*machAbsoluteTimeSeconds*/); // argument is not used anymore
  53. // controling player internals
  54. // TODO: needs some cleanup
  55. void UnitySetAudioSessionActive(int active);
  56. void UnityGLInvalidateState(void);
  57. void UnityReloadResources(void);
  58. int UnityIsCaptureScreenshotRequested(void);
  59. void UnityCaptureScreenshot(void);
  60. void UnitySendMessage(const char* obj, const char* method, const char* msg);
  61. void UnityUpdateMuteState(int mute);
  62. void UnityUpdateAudioOutputState(void);
  63. int UnityShouldMuteOtherAudioSources(void);
  64. int UnityShouldPrepareForIOSRecording(void);
  65. int UnityIsAudioManagerAvailableAndEnabled(void);
  66. #ifdef __cplusplus
  67. void UnitySetLogEntryHandler(LogEntryHandler newHandler);
  68. #endif
  69. // plugins support
  70. // WARNING: old UnityRegisterRenderingPlugin will become obsolete soon
  71. void UnityRegisterRenderingPlugin(UnityPluginSetGraphicsDeviceFunc setDevice, UnityPluginRenderMarkerFunc renderMarker);
  72. void UnityRegisterRenderingPluginV5(UnityPluginLoadFunc loadPlugin, UnityPluginUnloadFunc unloadPlugin);
  73. void UnityRegisterAudioPlugin(UnityPluginGetAudioEffectDefinitionsFunc getAudioEffectDefinitions);
  74. // resolution/orientation handling
  75. void UnityGetRenderingResolution(unsigned* w, unsigned* h);
  76. void UnityGetSystemResolution(unsigned* w, unsigned* h);
  77. void UnityRequestRenderingResolution(unsigned w, unsigned h);
  78. int UnityIsOrientationEnabled(unsigned /*ScreenOrientation*/ orientation);
  79. int UnityHasOrientationRequest(void);
  80. int UnityShouldAutorotate(void);
  81. int UnityAutorotationStatusChanged(void);
  82. int UnityShouldChangeAllowedOrientations(void);
  83. int UnityRequestedScreenOrientation(void); // returns ScreenOrientation
  84. void UnityOrientationRequestWasCommitted(void);
  85. int UnityReportResizeView(unsigned w, unsigned h, unsigned /*ScreenOrientation*/ contentOrientation); // returns ScreenOrientation
  86. void UnityReportSafeAreaChange(float x, float y, float w, float h);
  87. void UnityReportBackbufferChange(UnityRenderBufferHandle colorBB, UnityRenderBufferHandle depthBB);
  88. #if !PLATFORM_VISIONOS
  89. float UnityCalculateScalingFactorFromTargetDPI(UIScreen* screen);
  90. #endif
  91. void UnityReportDisplayCutouts(const float* x, const float* y, const float* width, const float* height, int count);
  92. // player settings
  93. int UnityDisableDepthAndStencilBuffers(void);
  94. int UnityUseAnimatedAutorotation(void);
  95. int UnityGetDesiredMSAASampleCount(int defaultSampleCount);
  96. int UnityGetSRGBRequested(void);
  97. int UnityGetWideColorRequested(void);
  98. void UnitySetEDRValues(float maxEDRValue, float currentEDRValue);
  99. void UnitySetHDRMode(int hdrMode);
  100. int UnityGetHDRModeRequested(void);
  101. int UnityGetShowActivityIndicatorOnLoading(void);
  102. int UnityGetAccelerometerFrequency(void);
  103. int UnityGetTargetFPS(void);
  104. int UnityGetUseCustomAppBackgroundBehavior(void);
  105. int UnityGetDeferSystemGesturesTopEdge(void);
  106. int UnityGetDeferSystemGesturesBottomEdge(void);
  107. int UnityGetDeferSystemGesturesLeftEdge(void);
  108. int UnityGetDeferSystemGesturesRightEdge(void);
  109. int UnityGetHideHomeButton(void);
  110. int UnityMetalFramebufferOnly(void);
  111. int UnityMetalMemorylessDepth(void);
  112. int UnityPreserveFramebufferAlpha(void);
  113. void UnitySetTargetFPS(int targetFPS);
  114. void UnitySetAbsoluteURL(const char* url);
  115. // native events
  116. void UnityInvalidateDisplayDataCache(void* screen);
  117. void UnityUpdateDisplayListCache(void** screens, int screenCount);
  118. // profiler
  119. void* UnityCreateProfilerCounter(const char*);
  120. void UnityDestroyProfilerCounter(void*);
  121. void UnityStartProfilerCounter(void*);
  122. void UnityEndProfilerCounter(void*);
  123. // sensors
  124. void UnitySensorsSetGyroRotationRate(int idx, float x, float y, float z);
  125. void UnitySensorsSetGyroRotationRateUnbiased(int idx, float x, float y, float z);
  126. void UnitySensorsSetGravity(int idx, float x, float y, float z);
  127. void UnitySensorsSetUserAcceleration(int idx, float x, float y, float z);
  128. void UnitySensorsSetAttitude(int idx, float x, float y, float z, float w);
  129. void UnityDidAccelerate(float x, float y, float z, double timestamp);
  130. void UnitySetJoystickPosition(int joyNum, int axis, float pos);
  131. int UnityStringToKey(const char *name);
  132. void UnitySetKeyState(int key, int /*bool*/ state);
  133. void UnitySetKeyboardKeyState(int key, int /*bool*/ state);
  134. void UnitySendKeyboardCommand(UIKeyCommand* command, int code);
  135. // UnityWebRequest handling
  136. void UnityReportWebRequestStatus(void* udata, int status);
  137. void UnityReportWebRequestNetworkError(void* udata, int status);
  138. void UnityReportWebRequestResponseHeader(void* udata, const char* headerName, const char* headerValue);
  139. void UnityReportWebRequestReceivedResponse(void* udata, unsigned expectedDataLength);
  140. void UnityReportWebRequestReceivedData(void* udata, const void* buffer, unsigned totalRead, unsigned expectedTotal);
  141. void UnityReportWebRequestFinishedLoadingData(void* udata);
  142. void UnityWebRequestRelease(void* udata);
  143. void UnityReportWebRequestSentData(void* udata, unsigned totalWritten, unsigned expectedTotal);
  144. int UnityReportWebRequestValidateCertificate(void* udata, const void* certificateData, unsigned certificateSize);
  145. unsigned long long UnityWebRequestResetUpload(void* udata);
  146. const void* UnityWebRequestGetUploadData(void* udata, unsigned* bufferSize);
  147. void UnityWebRequestConsumeUploadData(void* udata, unsigned consumedSize);
  148. // AVCapture
  149. void UnityReportAVCapturePermission(void* userData);
  150. void UnityDidCaptureVideoFrame(intptr_t tex, void* udata);
  151. // logging override
  152. #ifdef __cplusplus
  153. } // extern "C"
  154. #endif
  155. // touches processing
  156. #ifdef __cplusplus
  157. extern "C" {
  158. #endif
  159. void UnitySetViewTouchProcessing(UIView* view, int /*ViewTouchProcessing*/ processingPolicy);
  160. void UnityDropViewTouchProcessing(UIView* view);
  161. void UnitySendTouchesBegin(NSSet* touches, UIEvent* event);
  162. void UnitySendTouchesEnded(NSSet* touches, UIEvent* event);
  163. void UnitySendTouchesCancelled(NSSet* touches, UIEvent* event);
  164. void UnitySendTouchesMoved(NSSet* touches, UIEvent* event);
  165. void UnitySendTouchesUnfiltered(NSSet* touches, NSSet* allTouches);
  166. void UnityCancelTouches(void);
  167. #ifdef __cplusplus
  168. } // extern "C"
  169. #endif
  170. //
  171. // these are functions referenced and implemented in trampoline
  172. //
  173. #ifdef __cplusplus
  174. extern "C" {
  175. #endif
  176. // UnityAppController.mm
  177. UIViewController* UnityGetGLViewController(void);
  178. UIView* UnityGetGLView(void);
  179. UnityView* UnityGetUnityView(void);
  180. UIWindow* UnityGetMainWindow(void);
  181. enum ScreenOrientation UnityCurrentOrientation(void);
  182. // Unity/DisplayManager.mm
  183. #if !PLATFORM_VISIONOS
  184. float UnityScreenScaleFactor(UIScreen* screen);
  185. #endif
  186. // Unity/DeviceSettings.mm
  187. int UnityDeviceHasCutout(void);
  188. #ifdef __cplusplus
  189. } // extern "C"
  190. #endif
  191. //
  192. // these are functions referenced in unity player lib and implemented in trampoline
  193. //
  194. #ifdef __cplusplus
  195. extern "C" {
  196. #endif
  197. // iPhone_Sensors.mm
  198. void UnityInitJoysticks(void);
  199. void UnityCoreMotionStart(void);
  200. void UnityCoreMotionStop(void);
  201. void UnityUpdateAccelerometerData(void);
  202. int UnityIsGyroEnabled(int idx);
  203. int UnityIsGyroAvailable(void);
  204. void UnityUpdateGyroData(void);
  205. void UnitySetGyroUpdateInterval(int idx, float interval);
  206. float UnityGetGyroUpdateInterval(int idx);
  207. void UnityUpdateJoystickData(void);
  208. NSArray* UnityGetJoystickNames(void);
  209. void UnityGetJoystickAxisName(int idx, int axis, char* buffer, int maxLen);
  210. void UnityGetNiceKeyname(int key, char* buffer, int maxLen);
  211. // UnityAppController+Rendering.mm
  212. void UnityGfxInitedCallback(void);
  213. void UnityPresentContextCallback(struct UnityFrameStats const* frameStats);
  214. void UnityFramerateChangeCallback(int targetFPS);
  215. void UnitySelectRenderingAPI(void);
  216. int UnitySelectedRenderingAPI(void);
  217. int UnityIsBatchmode(void);
  218. NSBundle* UnityGetMetalBundle(void);
  219. MTLDeviceRef UnityGetMetalDevice(void);
  220. MTLCommandQueueRef UnityGetMetalCommandQueue(void);
  221. int UnityCommandQueueMaxCommandBufferCountMTL(void);
  222. // deprecated, soon to be removed
  223. MTLCommandQueueRef UnityGetMetalDrawableCommandQueue(void);
  224. UnityRenderBufferHandle UnityBackbufferColor(void);
  225. UnityRenderBufferHandle UnityBackbufferDepth(void);
  226. int UnityIsWideColorSupported(void);
  227. // UI/ActivityIndicator.mm
  228. void UnityStartActivityIndicator(void);
  229. void UnityStopActivityIndicator(void);
  230. // UI/Keyboard.mm
  231. void UnityKeyboard_Create(unsigned keyboardType, int autocorrection, int multiline, int secure, int alert, const char* text, const char* placeholder, int characterLimit);
  232. void UnityKeyboard_Show(void);
  233. void UnityKeyboard_Hide(void);
  234. void UnityKeyboard_GetRect(float* x, float* y, float* w, float* h);
  235. void UnityKeyboard_SetText(const char* text);
  236. NSString* UnityKeyboard_GetText(void);
  237. int UnityKeyboard_IsActive(void);
  238. int UnityKeyboard_Status(void);
  239. void UnityKeyboard_SetInputHidden(int hidden);
  240. int UnityKeyboard_IsInputHidden(void);
  241. void UnityKeyboard_SetCharacterLimit(unsigned characterLimit);
  242. int UnityKeyboard_CanGetSelection(void);
  243. void UnityKeyboard_GetSelection(int* location, int* range);
  244. int UnityKeyboard_CanSetSelection(void);
  245. void UnityKeyboard_SetSelection(int location, int range);
  246. // UI/UnityViewControllerBase.mm
  247. void UnityNotifyHideHomeButtonChange(void);
  248. void UnityNotifyDeferSystemGesturesChange(void);
  249. // Unity/AVCapture.mm
  250. int UnityGetAVCapturePermission(int captureTypes);
  251. void UnityRequestAVCapturePermission(int captureTypes, void* userData);
  252. // Unity/CameraCapture.mm
  253. void UnityEnumVideoCaptureDevices(void* udata, void(*callback)(void* udata, const char* name, int frontFacing, int autoFocusPointSupported, int kind, const int* resolutions, int resCount));
  254. void* UnityInitCameraCapture(int device, int w, int h, int fps, int isDepth, void* udata);
  255. void UnityStartCameraCapture(void* capture);
  256. void UnityPauseCameraCapture(void* capture);
  257. void UnityStopCameraCapture(void* capture);
  258. void UnityCameraCaptureExtents(void* capture, int* w, int* h);
  259. void UnityCameraCaptureReadToMemory(void* capture, void* dst, int w, int h);
  260. int UnityCameraCaptureVideoRotationDeg(void* capture);
  261. int UnityCameraCaptureVerticallyMirrored(void* capture);
  262. int UnityCameraCaptureSetAutoFocusPoint(void* capture, float x, float y);
  263. // Unity/DeviceSettings.mm
  264. const char* UnityDeviceUniqueIdentifier(void);
  265. const char* UnityVendorIdentifier(void);
  266. const char* UnityAdIdentifier(void);
  267. int UnityAdTrackingEnabled(void);
  268. int UnityGetLowPowerModeEnabled(void);
  269. int UnityGetWantsSoftwareDimming(void);
  270. void UnitySetWantsSoftwareDimming(int enabled);
  271. int UnityGetIosAppOnMac(void);
  272. const char* UnityDeviceName(void);
  273. const char* UnitySystemName(void);
  274. const char* UnitySystemVersion(void);
  275. const char* UnityDeviceModel(void);
  276. int UnityDeviceCPUCount(void);
  277. int UnityGetPhysicalMemory(void);
  278. int UnityDeviceGeneration(void);
  279. float UnityDeviceDPI(void);
  280. const char* UnitySystemLanguage(void);
  281. int UnityDeviceSupportsUpsideDown(void);
  282. // Unity/DisplayManager.mm
  283. void UnityActivateScreenForRendering(void* nativeDisplay);
  284. void UnityStartFrameRendering(void);
  285. void UnityDestroyUnityRenderSurfaces(void);
  286. int UnityMainScreenRefreshRate(void);
  287. void UnitySetBrightness(float brightness);
  288. float UnityGetBrightness(void);
  289. // Unity/Filesystem.mm
  290. const char* UnityDataBundleDir(void);
  291. void UnitySetDataBundleDirWithBundleId(const char * bundleId);
  292. const char* UnityDocumentsDir(void);
  293. const char* UnityLibraryDir(void);
  294. const char* UnityCachesDir(void);
  295. int UnityUpdateNoBackupFlag(const char* path, int setFlag); // Returns 1 if successful, otherwise 0
  296. // Unity/WWWConnection.mm
  297. void* UnityStartWWWConnectionGet(void* udata, const void* headerDict, const char* url);
  298. void* UnityStartWWWConnectionPost(void* udata, const void* headerDict, const char* url, const void* data, unsigned length);
  299. void UnityDestroyWWWConnection(void* connection);
  300. void UnityShouldCancelWWW(const void* connection);
  301. // Unity/FullScreenVideoPlayer.mm
  302. int UnityIsFullScreenPlaying(void);
  303. void TryResumeFullScreenVideo(void);
  304. //Apple TV Remote
  305. int UnityGetAppleTVRemoteAllowExitToMenu(void);
  306. void UnitySetAppleTVRemoteAllowExitToMenu(int val);
  307. int UnityGetAppleTVRemoteAllowRotation(void);
  308. void UnitySetAppleTVRemoteAllowRotation(int val);
  309. int UnityGetAppleTVRemoteReportAbsoluteDpadValues(void);
  310. void UnitySetAppleTVRemoteReportAbsoluteDpadValues(int val);
  311. int UnityGetAppleTVRemoteTouchesEnabled(void);
  312. void UnitySetAppleTVRemoteTouchesEnabled(int val);
  313. // Unity/UnityReplayKit.mm
  314. void UnityShouldCreateReplayKitOverlay(void);
  315. // Runtime analytics
  316. void UnitySendEmbeddedLaunchEvent(int launchType); // Tracks events when application is launched from native host app (Unity as a Library)
  317. #ifdef __cplusplus
  318. } // extern "C"
  319. #endif
  320. #ifdef __OBJC__
  321. // This is basically a wrapper for [NSString UTF8String] with additional strdup.
  322. //
  323. // Apparently multiple calls on UTF8String will leak memory (NSData objects) that are collected
  324. // only when @autoreleasepool is exited. This function serves as documentation for this and as a
  325. // handy wrapper.
  326. inline char* AllocCString(NSString* value)
  327. {
  328. if (value == nil)
  329. return 0;
  330. const char* str = [value UTF8String];
  331. return str ? strdup(str) : 0;
  332. }
  333. #endif