LearnWithTouch/App/LearnWithTouch_ios/Classes/Unity/UnityInterface.h

408 lines
15 KiB
C

#pragma once
#include <stdint.h>
#include <stdarg.h>
#include "UnityForwardDecls.h"
#include "UnityRendering.h"
// unity plugin functions
// audio plugin api
typedef int (*UnityPluginGetAudioEffectDefinitionsFunc)(struct UnityAudioEffectDefinition*** descptr);
// OLD rendering plugin api (will become obsolete soon)
typedef void (*UnityPluginSetGraphicsDeviceFunc)(void* device, int deviceType, int eventType);
typedef void (*UnityPluginRenderMarkerFunc)(int marker);
// new rendering plugin api
typedef void (*UnityPluginLoadFunc)(struct IUnityInterfaces* unityInterfaces);
typedef void (*UnityPluginUnloadFunc)();
// log handler function
#ifdef __cplusplus
typedef bool (*LogEntryHandler)(LogType logType, const char* log, va_list list);
#endif
//
// these are functions referenced in trampoline and implemented in unity player lib
//
#ifdef __cplusplus
extern "C" {
#endif
// life cycle management
void UnityInitStartupTime();
void UnityInitRuntime(int argc, char* argv[]);
void UnityInitApplicationNoGraphics(const char* appPathName);
void UnityInitApplicationGraphics();
void UnityCleanup();
void UnityLoadApplication();
void UnityPlayerLoop(); // normal player loop
void UnityBatchPlayerLoop(); // batch mode like player loop, without rendering (usable for background processing)
void UnitySetPlayerFocus(int focused); // send OnApplicationFocus() message to scripts
void UnityLowMemory();
void UnityPause(int pause);
int UnityIsPaused(); // 0 if player is running, 1 if paused
void UnityWillPause(); // send the message that app will pause
void UnityWillResume(); // send the message that app will resume
void UnityInputProcess();
void UnityDeliverUIEvents(); // unity processing impacting UI will be called in there
// rendering
int UnityGetRenderingAPIs(int capacity, int* outAPIs);
void UnityFinishRendering();
// OpenGL ES.
int UnityHasRenderingAPIExtension(const char* extension);
void UnityOnSetCurrentGLContext(EAGLContext* context);
// This must match the one in ApiEnumsGLES.h
typedef enum UnityFramebufferTarget
{
kDrawFramebuffer = 0,
kReadFramebuffer,
kFramebufferTargetCount
} UnityFramebufferTarget;
void UnityBindFramebuffer(UnityFramebufferTarget target, int fbo);
void UnityRegisterFBO(UnityRenderBufferHandle color, UnityRenderBufferHandle depth, unsigned fbo);
// when texture (managed in trampoline) is used in unity (e.g. with external render surfaces)
// we need to poke unity when we delete it (so it could clear caches etc)
void UnityOnDeleteGLTexture(int tex);
// controling player internals
// TODO: needs some cleanup
void UnitySetAudioSessionActive(int active);
void UnityGLInvalidateState();
void UnityReloadResources();
int UnityIsCaptureScreenshotRequested();
void UnityCaptureScreenshot();
void UnitySendMessage(const char* obj, const char* method, const char* msg);
EAGLContext* UnityGetDataContextGLES();
#ifdef __cplusplus
void UnitySetLogEntryHandler(LogEntryHandler newHandler);
#endif
// plugins support
// WARNING: old UnityRegisterRenderingPlugin will become obsolete soon
void UnityRegisterRenderingPlugin(UnityPluginSetGraphicsDeviceFunc setDevice, UnityPluginRenderMarkerFunc renderMarker);
void UnityRegisterRenderingPluginV5(UnityPluginLoadFunc loadPlugin, UnityPluginUnloadFunc unloadPlugin);
void UnityRegisterAudioPlugin(UnityPluginGetAudioEffectDefinitionsFunc getAudioEffectDefinitions);
// resolution/orientation handling
void UnityGetRenderingResolution(unsigned* w, unsigned* h);
void UnityGetSystemResolution(unsigned* w, unsigned* h);
void UnityRequestRenderingResolution(unsigned w, unsigned h);
int UnityIsOrientationEnabled(unsigned /*ScreenOrientation*/ orientation);
int UnityHasOrientationRequest();
int UnityShouldAutorotate();
int UnityShouldChangeAllowedOrientations();
int UnityRequestedScreenOrientation(); // returns ScreenOrientation
void UnityOrientationRequestWasCommitted();
int UnityReportResizeView(unsigned w, unsigned h, unsigned /*ScreenOrientation*/ contentOrientation); // returns ScreenOrientation
void UnityReportSafeAreaChange(float x, float y, float w, float h);
void UnityReportBackbufferChange(UnityRenderBufferHandle colorBB, UnityRenderBufferHandle depthBB);
float UnityCalculateScalingFactorFromTargetDPI(UIScreen* screen);
// player settings
int UnityDisableDepthAndStencilBuffers();
int UnityUseAnimatedAutorotation();
int UnityGetDesiredMSAASampleCount(int defaultSampleCount);
int UnityGetSRGBRequested();
int UnityGetWideColorRequested();
int UnityGetShowActivityIndicatorOnLoading();
int UnityGetAccelerometerFrequency();
int UnityGetTargetFPS();
int UnityGetAppBackgroundBehavior();
int UnityGetDeferSystemGesturesTopEdge();
int UnityGetDeferSystemGesturesBottomEdge();
int UnityGetDeferSystemGesturesLeftEdge();
int UnityGetDeferSystemGesturesRightEdge();
int UnityGetHideHomeButton();
int UnityMetalFramebufferOnly();
int UnityMetalMemorylessDepth();
// push notifications
#if !PLATFORM_TVOS
void UnitySendLocalNotification(UILocalNotification* notification);
#endif
void UnitySendRemoteNotification(NSDictionary* notification);
void UnitySendDeviceToken(NSData* deviceToken);
void UnitySendRemoteNotificationError(NSError* error);
// native events
void UnityInvalidateDisplayDataCache(void* screen);
void UnityUpdateDisplayListCache(void** screens, int screenCount);
// profiler
void* UnityCreateProfilerCounter(const char*);
void UnityDestroyProfilerCounter(void*);
void UnityStartProfilerCounter(void*);
void UnityEndProfilerCounter(void*);
// sensors
void UnitySensorsSetGyroRotationRate(int idx, float x, float y, float z);
void UnitySensorsSetGyroRotationRateUnbiased(int idx, float x, float y, float z);
void UnitySensorsSetGravity(int idx, float x, float y, float z);
void UnitySensorsSetUserAcceleration(int idx, float x, float y, float z);
void UnitySensorsSetAttitude(int idx, float x, float y, float z, float w);
void UnityDidAccelerate(float x, float y, float z, double timestamp);
void UnitySetJoystickPosition(int joyNum, int axis, float pos);
int UnityStringToKey(const char *name);
void UnitySetKeyState(int key, int /*bool*/ state);
// WWW connection handling
void UnityReportWWWStatus(void* udata, int status);
void UnityReportWWWNetworkError(void* udata, int status);
void UnityReportWWWResponseHeader(void* udata, const char* headerName, const char* headerValue);
void UnityReportWWWReceivedResponse(void* udata, unsigned expectedDataLength);
void UnityReportWWWReceivedData(void* udata, const void* buffer, unsigned totalRead, unsigned expectedTotal);
void UnityReportWWWFinishedLoadingData(void* udata);
void UnityReportWWWSentData(void* udata, unsigned totalWritten, unsigned expectedTotal);
int UnityReportWWWValidateCertificate(void* udata, const void* certificateData, unsigned certificateSize);
const void* UnityWWWGetUploadData(void* udata, unsigned* bufferSize);
void UnityWWWConsumeUploadData(void* udata, unsigned consumedSize);
// AVCapture
void UnityReportAVCapturePermission();
void UnityDidCaptureVideoFrame(intptr_t tex, void* udata);
// logging override
#ifdef __cplusplus
} // extern "C"
#endif
// touches processing
#ifdef __cplusplus
extern "C" {
#endif
void UnitySetViewTouchProcessing(UIView* view, int /*ViewTouchProcessing*/ processingPolicy);
void UnityDropViewTouchProcessing(UIView* view);
void UnitySendTouchesBegin(NSSet* touches, UIEvent* event);
void UnitySendTouchesEnded(NSSet* touches, UIEvent* event);
void UnitySendTouchesCancelled(NSSet* touches, UIEvent* event);
void UnitySendTouchesMoved(NSSet* touches, UIEvent* event);
void UnityCancelTouches();
#ifdef __cplusplus
} // extern "C"
#endif
//
// these are functions referenced and implemented in trampoline
//
#ifdef __cplusplus
extern "C" {
#endif
// UnityAppController.mm
UIViewController* UnityGetGLViewController();
UIView* UnityGetGLView();
UIWindow* UnityGetMainWindow();
enum ScreenOrientation UnityCurrentOrientation();
// Unity/DisplayManager.mm
float UnityScreenScaleFactor(UIScreen* screen);
#ifdef __cplusplus
} // extern "C"
#endif
//
// these are functions referenced in unity player lib and implemented in trampoline
//
#ifdef __cplusplus
extern "C" {
#endif
// iPhone_Sensors.mm
void UnityInitJoysticks();
void UnityCoreMotionStart();
void UnityCoreMotionStop();
void UnityUpdateAccelerometerData();
int UnityIsGyroEnabled(int idx);
int UnityIsGyroAvailable();
void UnityUpdateGyroData();
void UnitySetGyroUpdateInterval(int idx, float interval);
float UnityGetGyroUpdateInterval(int idx);
void UnityUpdateJoystickData();
int UnityGetJoystickCount();
void UnityGetJoystickName(int idx, char* buffer, int maxLen);
void UnityGetJoystickAxisName(int idx, int axis, char* buffer, int maxLen);
void UnityGetNiceKeyname(int key, char* buffer, int maxLen);
// UnityAppController+Rendering.mm
void UnityInitMainScreenRenderingCallback();
void UnityGfxInitedCallback();
void UnityPresentContextCallback(struct UnityFrameStats const* frameStats);
void UnityFramerateChangeCallback(int targetFPS);
int UnitySelectedRenderingAPI();
NSBundle* UnityGetMetalBundle();
MTLDeviceRef UnityGetMetalDevice();
MTLCommandQueueRef UnityGetMetalCommandQueue();
MTLCommandQueueRef UnityGetMetalDrawableCommandQueue();
EAGLContext* UnityGetDataContextEAGL();
UnityRenderBufferHandle UnityBackbufferColor();
UnityRenderBufferHandle UnityBackbufferDepth();
int UnityIsWideColorSupported();
// UI/ActivityIndicator.mm
void UnityStartActivityIndicator();
void UnityStopActivityIndicator();
// UI/Keyboard.mm
void UnityKeyboard_Create(unsigned keyboardType, int autocorrection, int multiline, int secure, int alert, const char* text, const char* placeholder, int characterLimit);
void UnityKeyboard_Show();
void UnityKeyboard_Hide();
void UnityKeyboard_GetRect(float* x, float* y, float* w, float* h);
void UnityKeyboard_SetText(const char* text);
NSString* UnityKeyboard_GetText();
int UnityKeyboard_IsActive();
int UnityKeyboard_Status();
void UnityKeyboard_SetInputHidden(int hidden);
int UnityKeyboard_IsInputHidden();
void UnityKeyboard_SetCharacterLimit(unsigned characterLimit);
int UnityKeyboard_CanGetSelection();
void UnityKeyboard_GetSelection(int* location, int* range);
int UnityKeyboard_CanSetSelection();
void UnityKeyboard_SetSelection(int location, int range);
// UI/UnityViewControllerBase.mm
void UnityNotifyHideHomeButtonChange();
void UnityNotifyDeferSystemGesturesChange();
// Unity/AVCapture.mm
int UnityGetAVCapturePermission(int captureTypes);
void UnityRequestAVCapturePermission(int captureTypes);
// Unity/CameraCapture.mm
void UnityEnumVideoCaptureDevices(void* udata, void(*callback)(void* udata, const char* name, int frontFacing, int autoFocusPointSupported, int kind, const int* resolutions, int resCount));
void* UnityInitCameraCapture(int device, int w, int h, int fps, int isDepth, void* udata);
void UnityStartCameraCapture(void* capture);
void UnityPauseCameraCapture(void* capture);
void UnityStopCameraCapture(void* capture);
void UnityCameraCaptureExtents(void* capture, int* w, int* h);
void UnityCameraCaptureReadToMemory(void* capture, void* dst, int w, int h);
int UnityCameraCaptureVideoRotationDeg(void* capture);
int UnityCameraCaptureVerticallyMirrored(void* capture);
int UnityCameraCaptureSetAutoFocusPoint(void* capture, float x, float y);
// Unity/DeviceSettings.mm
const char* UnityDeviceUniqueIdentifier();
const char* UnityVendorIdentifier();
const char* UnityAdvertisingIdentifier();
int UnityAdvertisingTrackingEnabled();
const char* UnityDeviceName();
const char* UnitySystemName();
const char* UnitySystemVersion();
const char* UnityDeviceModel();
int UnityDeviceCPUCount();
int UnityDeviceGeneration();
float UnityDeviceDPI();
const char* UnitySystemLanguage();
// Unity/DisplayManager.mm
EAGLContext* UnityGetMainScreenContextGLES();
EAGLContext* UnityGetContextEAGL();
void UnityStartFrameRendering();
void UnityDestroyUnityRenderSurfaces();
// Unity/Filesystem.mm
const char* UnityApplicationDir();
const char* UnityDocumentsDir();
const char* UnityLibraryDir();
const char* UnityCachesDir();
int UnityUpdateNoBackupFlag(const char* path, int setFlag); // Returns 1 if successful, otherwise 0
// Unity/MetalHelper.mm
void UnityAddNewMetalAPIImplIfNeeded(MTLDeviceRef device);
// Unity/WWWConnection.mm
void* UnityStartWWWConnectionGet(void* udata, const void* headerDict, const char* url);
void* UnityStartWWWConnectionPost(void* udata, const void* headerDict, const char* url, const void* data, unsigned length);
void UnityDestroyWWWConnection(void* connection);
void UnityShouldCancelWWW(const void* connection);
// Unity/FullScreenVideoPlayer.mm
int UnityIsFullScreenPlaying();
void TryResumeFullScreenVideo();
//Apple TV Remote
int UnityGetAppleTVRemoteAllowExitToMenu();
void UnitySetAppleTVRemoteAllowExitToMenu(int val);
int UnityGetAppleTVRemoteAllowRotation();
void UnitySetAppleTVRemoteAllowRotation(int val);
int UnityGetAppleTVRemoteReportAbsoluteDpadValues();
void UnitySetAppleTVRemoteReportAbsoluteDpadValues(int val);
int UnityGetAppleTVRemoteTouchesEnabled();
void UnitySetAppleTVRemoteTouchesEnabled(int val);
// Unity/UnityReplayKit.mm
void UnityShouldCreateReplayKitOverlay();
#ifdef __cplusplus
} // extern "C"
#endif
#ifdef __OBJC__
// This is basically a wrapper for [NSString UTF8String] with additional strdup.
//
// Apparently multiple calls on UTF8String will leak memory (NSData objects) that are collected
// only when @autoreleasepool is exited. This function serves as documentation for this and as a
// handy wrapper.
inline char* AllocCString(NSString* value)
{
if (value == nil)
return 0;
const char* str = [value UTF8String];
return str ? strdup(str) : 0;
}
#endif