GLFM: Update ASan no_sanitize attributes to both "address" and "hwaddress".

This commit is contained in:
Alberto Torres 2025-01-21 13:01:40 +01:00
parent a5c9bb3c70
commit 35497da6a6

View file

@ -3,6 +3,8 @@
// #if defined(__ANDROID__) // #if defined(__ANDROID__)
#define NO_SANITIZE __attribute__((no_sanitize("address", "hwaddress")))
#include "glfm.h" #include "glfm.h"
#include "glfm_internal.h" #include "glfm_internal.h"
@ -111,18 +113,18 @@ static GLFMPlatformData *platformDataGlobal = NULL;
// MARK: - Private function declarations // MARK: - Private function declarations
__attribute__((no_sanitize("hwaddress"))) static void *glfm__mainLoop(void *param); NO_SANITIZE static void *glfm__mainLoop(void *param);
__attribute__((no_sanitize("hwaddress"))) static int glfm__looperCallback(int pipe, int events, void *userData); NO_SANITIZE static int glfm__looperCallback(int pipe, int events, void *userData);
__attribute__((no_sanitize("hwaddress"))) static void glfm__setAllRequestedSensorsEnabled(GLFMDisplay *display, bool enable); NO_SANITIZE static void glfm__setAllRequestedSensorsEnabled(GLFMDisplay *display, bool enable);
__attribute__((no_sanitize("hwaddress"))) static void glfm__reportOrientationChangeIfNeeded(GLFMDisplay *display); NO_SANITIZE static void glfm__reportOrientationChangeIfNeeded(GLFMDisplay *display);
__attribute__((no_sanitize("hwaddress"))) static void glfm__reportInsetsChangedIfNeeded(GLFMDisplay *display); NO_SANITIZE static void glfm__reportInsetsChangedIfNeeded(GLFMDisplay *display);
__attribute__((no_sanitize("hwaddress"))) static bool glfm__updateSurfaceSizeIfNeeded(GLFMDisplay *display, bool force); NO_SANITIZE static bool glfm__updateSurfaceSizeIfNeeded(GLFMDisplay *display, bool force);
static float glfm__getRefreshRate(const GLFMDisplay *display); static float glfm__getRefreshRate(const GLFMDisplay *display);
__attribute__((no_sanitize("hwaddress"))) static void glfm__getDisplayChromeInsets(const GLFMDisplay *display, int *top, int *right, NO_SANITIZE static void glfm__getDisplayChromeInsets(const GLFMDisplay *display, int *top, int *right,
int *bottom, int *left); int *bottom, int *left);
__attribute__((no_sanitize("hwaddress"))) static void glfm__resetContentRect(GLFMPlatformData *platformData); NO_SANITIZE static void glfm__resetContentRect(GLFMPlatformData *platformData);
__attribute__((no_sanitize("hwaddress"))) static void glfm__updateKeyboardVisibility(GLFMPlatformData *platformData); NO_SANITIZE static void glfm__updateKeyboardVisibility(GLFMPlatformData *platformData);
__attribute__((no_sanitize("hwaddress"))) static void glfm__updateUserInterfaceChrome(GLFMPlatformData *platformData); NO_SANITIZE static void glfm__updateUserInterfaceChrome(GLFMPlatformData *platformData);
// MARK: - JNI code // MARK: - JNI code
@ -143,7 +145,7 @@ __attribute__((no_sanitize("hwaddress"))) static void glfm__updateUserInterfaceC
} \ } \
} while (0) } while (0)
__attribute__((no_sanitize("hwaddress"))) static jmethodID glfm__getJavaMethodID(JNIEnv *jni, jobject object, const char *name, const char *sig) { NO_SANITIZE static jmethodID glfm__getJavaMethodID(JNIEnv *jni, jobject object, const char *name, const char *sig) {
if (!object) { if (!object) {
return NULL; return NULL;
} }
@ -153,7 +155,7 @@ __attribute__((no_sanitize("hwaddress"))) static jmethodID glfm__getJavaMethodID
return glfm__wasJavaExceptionThrown(jni) ? NULL : methodID; return glfm__wasJavaExceptionThrown(jni) ? NULL : methodID;
} }
__attribute__((no_sanitize("hwaddress"))) static jfieldID glfm__getJavaFieldID(JNIEnv *jni, jobject object, const char *name, const char *sig) { NO_SANITIZE static jfieldID glfm__getJavaFieldID(JNIEnv *jni, jobject object, const char *name, const char *sig) {
if (!object) { if (!object) {
return NULL; return NULL;
} }
@ -163,7 +165,7 @@ __attribute__((no_sanitize("hwaddress"))) static jfieldID glfm__getJavaFieldID(J
return glfm__wasJavaExceptionThrown(jni) ? NULL : fieldID; return glfm__wasJavaExceptionThrown(jni) ? NULL : fieldID;
} }
__attribute__((no_sanitize("hwaddress"))) static jmethodID glfm__getJavaStaticMethodID(JNIEnv *jni, jclass class, const char *name, const char *sig) { NO_SANITIZE static jmethodID glfm__getJavaStaticMethodID(JNIEnv *jni, jclass class, const char *name, const char *sig) {
if (!class) { if (!class) {
return NULL; return NULL;
} }
@ -171,7 +173,7 @@ __attribute__((no_sanitize("hwaddress"))) static jmethodID glfm__getJavaStaticMe
return glfm__wasJavaExceptionThrown(jni) ? NULL : methodID; return glfm__wasJavaExceptionThrown(jni) ? NULL : methodID;
} }
__attribute__((no_sanitize("hwaddress"))) static jfieldID glfm__getJavaStaticFieldID(JNIEnv *jni, jclass class, const char *name, const char *sig) { NO_SANITIZE static jfieldID glfm__getJavaStaticFieldID(JNIEnv *jni, jclass class, const char *name, const char *sig) {
if (!class) { if (!class) {
return NULL; return NULL;
} }
@ -205,7 +207,7 @@ __attribute__((no_sanitize("hwaddress"))) static jfieldID glfm__getJavaStaticFie
// MARK: - EGL // MARK: - EGL
__attribute__((no_sanitize("hwaddress"))) static bool glfm__eglContextInit(GLFMPlatformData *platformData) { NO_SANITIZE static bool glfm__eglContextInit(GLFMPlatformData *platformData) {
// Available in eglext.h in API 18 // Available in eglext.h in API 18
static const int EGL_CONTEXT_MAJOR_VERSION_KHR = 0x3098; static const int EGL_CONTEXT_MAJOR_VERSION_KHR = 0x3098;
@ -311,14 +313,14 @@ __attribute__((no_sanitize("hwaddress"))) static bool glfm__eglContextInit(GLFMP
return true; return true;
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__eglContextDisable(GLFMPlatformData *platformData) { NO_SANITIZE static void glfm__eglContextDisable(GLFMPlatformData *platformData) {
if (platformData->eglDisplay != EGL_NO_DISPLAY) { if (platformData->eglDisplay != EGL_NO_DISPLAY) {
eglMakeCurrent(platformData->eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); eglMakeCurrent(platformData->eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
} }
platformData->eglContextCurrent = false; platformData->eglContextCurrent = false;
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__eglSurfaceInit(GLFMPlatformData *platformData) { NO_SANITIZE static void glfm__eglSurfaceInit(GLFMPlatformData *platformData) {
if (platformData->eglSurface == EGL_NO_SURFACE) { if (platformData->eglSurface == EGL_NO_SURFACE) {
platformData->eglSurface = eglCreateWindowSurface(platformData->eglDisplay, platformData->eglSurface = eglCreateWindowSurface(platformData->eglDisplay,
platformData->eglConfig, platformData->eglConfig,
@ -332,14 +334,14 @@ __attribute__((no_sanitize("hwaddress"))) static void glfm__eglSurfaceInit(GLFMP
eglSurfaceAttrib(platformData->eglDisplay, platformData->eglSurface, EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED); eglSurfaceAttrib(platformData->eglDisplay, platformData->eglSurface, EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED);
break; break;
case GLFMSwapBehaviorBufferDestroyed: case GLFMSwapBehaviorBufferDestroyed:
eglSurfaceAttrib(platformData->eglDisplay, platformData->eglSurface, EGL_SWAP_BEHAVIOR, EGL_BUFFER_DESTROYED); eglSurfaceAttrib(platformData->eglDisplay, platformData->eglSurface, EGL_SWAP_BEHAVIOR, EGL_BUFFER_DESTROYED);
}
} }
} }
}
#ifndef NDEBUG #ifndef NDEBUG
__attribute__((no_sanitize("hwaddress"))) static void glfm__eglLogConfig(GLFMPlatformData *platformData, EGLConfig config) { NO_SANITIZE static void glfm__eglLogConfig(GLFMPlatformData *platformData, EGLConfig config) {
GLFM_LOG("Config: %p", config); GLFM_LOG("Config: %p", config);
EGLint value = 0; EGLint value = 0;
eglGetConfigAttrib(platformData->eglDisplay, config, EGL_RENDERABLE_TYPE, &value); eglGetConfigAttrib(platformData->eglDisplay, config, EGL_RENDERABLE_TYPE, &value);
@ -366,7 +368,7 @@ __attribute__((no_sanitize("hwaddress"))) static void glfm__eglLogConfig(GLFMPla
#endif #endif
__attribute__((no_sanitize("hwaddress"))) static bool glfm__eglInit(GLFMPlatformData *platformData) { NO_SANITIZE static bool glfm__eglInit(GLFMPlatformData *platformData) {
if (platformData->eglDisplay != EGL_NO_DISPLAY) { if (platformData->eglDisplay != EGL_NO_DISPLAY) {
glfm__eglSurfaceInit(platformData); glfm__eglSurfaceInit(platformData);
return glfm__eglContextInit(platformData); return glfm__eglContextInit(platformData);
@ -502,7 +504,7 @@ __attribute__((no_sanitize("hwaddress"))) static bool glfm__eglInit(GLFMPlatform
return glfm__eglContextInit(platformData); return glfm__eglContextInit(platformData);
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__eglSurfaceDestroy(GLFMPlatformData *platformData) { NO_SANITIZE static void glfm__eglSurfaceDestroy(GLFMPlatformData *platformData) {
if (platformData->eglSurface != EGL_NO_SURFACE) { if (platformData->eglSurface != EGL_NO_SURFACE) {
eglDestroySurface(platformData->eglDisplay, platformData->eglSurface); eglDestroySurface(platformData->eglDisplay, platformData->eglSurface);
platformData->eglSurface = EGL_NO_SURFACE; platformData->eglSurface = EGL_NO_SURFACE;
@ -510,7 +512,7 @@ __attribute__((no_sanitize("hwaddress"))) static void glfm__eglSurfaceDestroy(GL
glfm__eglContextDisable(platformData); glfm__eglContextDisable(platformData);
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__eglDestroy(GLFMPlatformData *platformData) { NO_SANITIZE static void glfm__eglDestroy(GLFMPlatformData *platformData) {
if (platformData->eglDisplay != EGL_NO_DISPLAY) { if (platformData->eglDisplay != EGL_NO_DISPLAY) {
eglMakeCurrent(platformData->eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); eglMakeCurrent(platformData->eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
if (platformData->eglContext != EGL_NO_CONTEXT) { if (platformData->eglContext != EGL_NO_CONTEXT) {
@ -534,7 +536,7 @@ __attribute__((no_sanitize("hwaddress"))) static void glfm__eglDestroy(GLFMPlatf
platformData->eglContextCurrent = false; platformData->eglContextCurrent = false;
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__eglCheckError(GLFMPlatformData *platformData) { NO_SANITIZE static void glfm__eglCheckError(GLFMPlatformData *platformData) {
EGLint err = eglGetError(); EGLint err = eglGetError();
if (err == EGL_BAD_SURFACE) { if (err == EGL_BAD_SURFACE) {
glfm__eglSurfaceDestroy(platformData); glfm__eglSurfaceDestroy(platformData);
@ -558,7 +560,7 @@ __attribute__((no_sanitize("hwaddress"))) static void glfm__eglCheckError(GLFMPl
} }
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__drawFrame(GLFMPlatformData *platformData) { NO_SANITIZE static void glfm__drawFrame(GLFMPlatformData *platformData) {
if (!platformData->eglContextCurrent) { if (!platformData->eglContextCurrent) {
// Probably a bad config (Happens on Android 2.3 emulator) // Probably a bad config (Happens on Android 2.3 emulator)
return; return;
@ -606,7 +608,7 @@ typedef enum {
GLFMActivityCommandOnLowMemory, GLFMActivityCommandOnLowMemory,
} GLFMActivityCommand; } GLFMActivityCommand;
__attribute__((no_sanitize("hwaddress"))) static void glfm__sendCommand(ANativeActivity *activity, GLFMActivityCommand command) { NO_SANITIZE static void glfm__sendCommand(ANativeActivity *activity, GLFMActivityCommand command) {
GLFMPlatformData *platformData = activity->instance; GLFMPlatformData *platformData = activity->instance;
if (!platformData) { if (!platformData) {
return; return;
@ -617,7 +619,7 @@ __attribute__((no_sanitize("hwaddress"))) static void glfm__sendCommand(ANativeA
} }
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__activityOnStart(ANativeActivity *activity) { NO_SANITIZE static void glfm__activityOnStart(ANativeActivity *activity) {
GLFMPlatformData *platformData = activity->instance; GLFMPlatformData *platformData = activity->instance;
if (platformData && platformData->display) { if (platformData && platformData->display) {
glfm__updateUserInterfaceChrome(platformData); glfm__updateUserInterfaceChrome(platformData);
@ -625,42 +627,42 @@ __attribute__((no_sanitize("hwaddress"))) static void glfm__activityOnStart(ANat
glfm__sendCommand(activity, GLFMActivityCommandOnStart); glfm__sendCommand(activity, GLFMActivityCommandOnStart);
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__activityOnPause(ANativeActivity *activity) { NO_SANITIZE static void glfm__activityOnPause(ANativeActivity *activity) {
glfm__sendCommand(activity, GLFMActivityCommandOnPause); glfm__sendCommand(activity, GLFMActivityCommandOnPause);
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__activityOnResume(ANativeActivity *activity) { NO_SANITIZE static void glfm__activityOnResume(ANativeActivity *activity) {
glfm__sendCommand(activity, GLFMActivityCommandOnResume); glfm__sendCommand(activity, GLFMActivityCommandOnResume);
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__activityOnStop(ANativeActivity *activity) { NO_SANITIZE static void glfm__activityOnStop(ANativeActivity *activity) {
glfm__sendCommand(activity, GLFMActivityCommandOnStop); glfm__sendCommand(activity, GLFMActivityCommandOnStop);
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__activityOnWindowFocusChanged(ANativeActivity *activity, int hasFocus) { NO_SANITIZE static void glfm__activityOnWindowFocusChanged(ANativeActivity *activity, int hasFocus) {
glfm__sendCommand(activity, (hasFocus ? GLFMActivityCommandOnWindowFocusGained : glfm__sendCommand(activity, (hasFocus ? GLFMActivityCommandOnWindowFocusGained :
GLFMActivityCommandOnWindowFocusLost)); GLFMActivityCommandOnWindowFocusLost));
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__activityOnConfigurationChanged(ANativeActivity *activity) { NO_SANITIZE static void glfm__activityOnConfigurationChanged(ANativeActivity *activity) {
glfm__sendCommand(activity, GLFMActivityCommandOnConfigurationChanged); glfm__sendCommand(activity, GLFMActivityCommandOnConfigurationChanged);
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__activityOnLowMemory(ANativeActivity *activity) { NO_SANITIZE static void glfm__activityOnLowMemory(ANativeActivity *activity) {
glfm__sendCommand(activity, GLFMActivityCommandOnLowMemory); glfm__sendCommand(activity, GLFMActivityCommandOnLowMemory);
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__activityOnNativeWindowResized(ANativeActivity *activity, ANativeWindow *window) { NO_SANITIZE static void glfm__activityOnNativeWindowResized(ANativeActivity *activity, ANativeWindow *window) {
(void)window; (void)window;
glfm__sendCommand(activity, GLFMActivityCommandOnNativeWindowResized); glfm__sendCommand(activity, GLFMActivityCommandOnNativeWindowResized);
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__activityOnNativeWindowRedrawNeeded(ANativeActivity *activity, ANativeWindow *window) { NO_SANITIZE static void glfm__activityOnNativeWindowRedrawNeeded(ANativeActivity *activity, ANativeWindow *window) {
(void)window; (void)window;
glfm__sendCommand(activity, GLFMActivityCommandOnNativeWindowRedrawNeeded); glfm__sendCommand(activity, GLFMActivityCommandOnNativeWindowRedrawNeeded);
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__activityOnNativeWindowCreated(ANativeActivity *activity, ANativeWindow *window) { NO_SANITIZE static void glfm__activityOnNativeWindowCreated(ANativeActivity *activity, ANativeWindow *window) {
GLFMPlatformData *platformData = activity->instance; GLFMPlatformData *platformData = activity->instance;
pthread_mutex_lock(&platformData->mutex); pthread_mutex_lock(&platformData->mutex);
platformData->pendingWindow = window; platformData->pendingWindow = window;
@ -671,12 +673,12 @@ __attribute__((no_sanitize("hwaddress"))) static void glfm__activityOnNativeWind
pthread_mutex_unlock(&platformData->mutex); pthread_mutex_unlock(&platformData->mutex);
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__activityOnNativeWindowDestroyed(ANativeActivity *activity, ANativeWindow *window) { NO_SANITIZE static void glfm__activityOnNativeWindowDestroyed(ANativeActivity *activity, ANativeWindow *window) {
(void)window; (void)window;
glfm__sendCommand(activity, GLFMActivityCommandOnNativeWindowDestroyed); glfm__sendCommand(activity, GLFMActivityCommandOnNativeWindowDestroyed);
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__activityOnInputQueueCreated(ANativeActivity *activity, AInputQueue *queue) { NO_SANITIZE static void glfm__activityOnInputQueueCreated(ANativeActivity *activity, AInputQueue *queue) {
GLFMPlatformData *platformData = activity->instance; GLFMPlatformData *platformData = activity->instance;
pthread_mutex_lock(&platformData->mutex); pthread_mutex_lock(&platformData->mutex);
platformData->pendingInputQueue = queue; platformData->pendingInputQueue = queue;
@ -687,12 +689,12 @@ __attribute__((no_sanitize("hwaddress"))) static void glfm__activityOnInputQueue
pthread_mutex_unlock(&platformData->mutex); pthread_mutex_unlock(&platformData->mutex);
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__activityOnInputQueueDestroyed(ANativeActivity *activity, AInputQueue *queue) { NO_SANITIZE static void glfm__activityOnInputQueueDestroyed(ANativeActivity *activity, AInputQueue *queue) {
(void)queue; (void)queue;
glfm__sendCommand(activity, GLFMActivityCommandOnInputQueueDestroyed); glfm__sendCommand(activity, GLFMActivityCommandOnInputQueueDestroyed);
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__activityOnContentRectChanged(ANativeActivity *activity, const ARect *rect) { NO_SANITIZE static void glfm__activityOnContentRectChanged(ANativeActivity *activity, const ARect *rect) {
GLFMPlatformData *platformData = activity->instance; GLFMPlatformData *platformData = activity->instance;
int nextContentRectIndex = platformData->contentRectIndex ^ 1; int nextContentRectIndex = platformData->contentRectIndex ^ 1;
platformData->contentRectArray[nextContentRectIndex] = *rect; platformData->contentRectArray[nextContentRectIndex] = *rect;
@ -701,7 +703,7 @@ __attribute__((no_sanitize("hwaddress"))) static void glfm__activityOnContentRec
glfm__sendCommand(activity, GLFMActivityCommandOnContentRectChanged); glfm__sendCommand(activity, GLFMActivityCommandOnContentRectChanged);
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__activityOnDestroy(ANativeActivity *activity) { NO_SANITIZE static void glfm__activityOnDestroy(ANativeActivity *activity) {
GLFMPlatformData *platformData = activity->instance; GLFMPlatformData *platformData = activity->instance;
pthread_mutex_lock(&platformData->mutex); pthread_mutex_lock(&platformData->mutex);
glfm__sendCommand(activity, GLFMActivityCommandOnDestroy); glfm__sendCommand(activity, GLFMActivityCommandOnDestroy);
@ -720,13 +722,13 @@ __attribute__((no_sanitize("hwaddress"))) static void glfm__activityOnDestroy(AN
GLFM_LOG_LIFECYCLE("Goodbye"); GLFM_LOG_LIFECYCLE("Goodbye");
} }
__attribute__((no_sanitize("hwaddress"))) static void *glfm__activityOnSaveInstanceState(ANativeActivity *activity, size_t *outSize) { NO_SANITIZE static void *glfm__activityOnSaveInstanceState(ANativeActivity *activity, size_t *outSize) {
(void)activity; (void)activity;
*outSize = 0; *outSize = 0;
return NULL; return NULL;
} }
__attribute__((no_sanitize("hwaddress"))) JNIEXPORT void ANativeActivity_onCreate(ANativeActivity *activity, void *savedState, size_t savedStateSize) NO_SANITIZE JNIEXPORT void ANativeActivity_onCreate(ANativeActivity *activity, void *savedState, size_t savedStateSize)
{ {
(void)savedState; (void)savedState;
(void)savedStateSize; (void)savedStateSize;
@ -823,7 +825,7 @@ typedef struct {
} GLFMLooperMessage; } GLFMLooperMessage;
// Called from the UI thread // Called from the UI thread
__attribute__((no_sanitize("hwaddress"))) static int glfm__looperCallback(int pipe, int events, void *userData) { NO_SANITIZE static int glfm__looperCallback(int pipe, int events, void *userData) {
GLFMPlatformData *platformData = userData; GLFMPlatformData *platformData = userData;
GLFMLooperMessage message; GLFMLooperMessage message;
assert(ALooper_forThread() == platformData->uiLooper); assert(ALooper_forThread() == platformData->uiLooper);
@ -837,7 +839,7 @@ __attribute__((no_sanitize("hwaddress"))) static int glfm__looperCallback(int pi
/// Queues a function to execute on the UI thread. /// Queues a function to execute on the UI thread.
/// Returns true if the function was queued, false otherwise. /// Returns true if the function was queued, false otherwise.
__attribute__((no_sanitize("hwaddress"))) static bool glfm__runOnUIThread(GLFMPlatformData *platformData, GLFMUIThreadFunc function, NO_SANITIZE static bool glfm__runOnUIThread(GLFMPlatformData *platformData, GLFMUIThreadFunc function,
void *userData) { void *userData) {
assert(platformData->looper == ALooper_forThread()); assert(platformData->looper == ALooper_forThread());
if (platformData->looper != ALooper_forThread() || !function) { if (platformData->looper != ALooper_forThread() || !function) {
@ -856,7 +858,7 @@ __attribute__((no_sanitize("hwaddress"))) static bool glfm__runOnUIThread(GLFMPl
// MARK: - App command callback and input callbacks // MARK: - App command callback and input callbacks
__attribute__((no_sanitize("hwaddress"))) static void glfm__setAnimating(GLFMPlatformData *platformData, bool animating) { NO_SANITIZE static void glfm__setAnimating(GLFMPlatformData *platformData, bool animating) {
if (platformData->animating != animating) { if (platformData->animating != animating) {
platformData->animating = animating; platformData->animating = animating;
platformData->refreshRequested = true; platformData->refreshRequested = true;
@ -867,7 +869,7 @@ __attribute__((no_sanitize("hwaddress"))) static void glfm__setAnimating(GLFMPla
} }
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__onAppCmd(GLFMPlatformData *platformData, GLFMActivityCommand command) { NO_SANITIZE static void glfm__onAppCmd(GLFMPlatformData *platformData, GLFMActivityCommand command) {
switch (command) { switch (command) {
case GLFMActivityCommandOnNativeWindowCreated: { case GLFMActivityCommandOnNativeWindowCreated: {
GLFM_LOG_LIFECYCLE("OnNativeWindowCreated"); GLFM_LOG_LIFECYCLE("OnNativeWindowCreated");
@ -1011,7 +1013,7 @@ __attribute__((no_sanitize("hwaddress"))) static void glfm__onAppCmd(GLFMPlatfor
} }
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__unicodeToUTF8(uint32_t unicode, char utf8[5]) { NO_SANITIZE static void glfm__unicodeToUTF8(uint32_t unicode, char utf8[5]) {
if (unicode < 0x80) { if (unicode < 0x80) {
utf8[0] = (char)(unicode & 0x7fu); utf8[0] = (char)(unicode & 0x7fu);
utf8[1] = 0; utf8[1] = 0;
@ -1076,7 +1078,7 @@ static uint32_t glfm__getUnicodeChar(GLFMPlatformData *platformData, jint keyCod
* *
* When this, when the app is in the background, the app will pause in the ALooper_pollAll() call. * When this, when the app is in the background, the app will pause in the ALooper_pollAll() call.
*/ */
__attribute__((no_sanitize("hwaddress"))) static bool glfm__handleBackButton(GLFMPlatformData *platformData) { NO_SANITIZE static bool glfm__handleBackButton(GLFMPlatformData *platformData) {
if (!platformData || !platformData->activity) { if (!platformData || !platformData->activity) {
return false; return false;
} }
@ -1090,7 +1092,7 @@ __attribute__((no_sanitize("hwaddress"))) static bool glfm__handleBackButton(GLF
return !glfm__wasJavaExceptionThrown(jni) && handled; return !glfm__wasJavaExceptionThrown(jni) && handled;
} }
__attribute__((no_sanitize("hwaddress"))) static bool glfm__onKeyEvent(GLFMPlatformData *platformData, AInputEvent *event) { NO_SANITIZE static bool glfm__onKeyEvent(GLFMPlatformData *platformData, AInputEvent *event) {
if (!platformData || !platformData->display) { if (!platformData || !platformData->display) {
return false; return false;
} }
@ -1303,7 +1305,7 @@ __attribute__((no_sanitize("hwaddress"))) static bool glfm__onKeyEvent(GLFMPlatf
return handled; return handled;
} }
__attribute__((no_sanitize("hwaddress"))) static bool glfm__onTouchEvent(GLFMPlatformData *platformData, AInputEvent *event) { NO_SANITIZE static bool glfm__onTouchEvent(GLFMPlatformData *platformData, AInputEvent *event) {
if (!platformData || !platformData->display || !platformData->display->touchFunc) { if (!platformData || !platformData->display || !platformData->display->touchFunc) {
return false; return false;
} }
@ -1369,7 +1371,7 @@ __attribute__((no_sanitize("hwaddress"))) static bool glfm__onTouchEvent(GLFMPla
return true; return true;
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__onInputEvent(GLFMPlatformData *platformData) { NO_SANITIZE static void glfm__onInputEvent(GLFMPlatformData *platformData) {
AInputEvent *event = NULL; AInputEvent *event = NULL;
while (AInputQueue_getEvent(platformData->inputQueue, &event) >= 0) { while (AInputQueue_getEvent(platformData->inputQueue, &event) >= 0) {
if (AInputQueue_preDispatchEvent(platformData->inputQueue, event)) { if (AInputQueue_preDispatchEvent(platformData->inputQueue, event)) {
@ -1386,7 +1388,7 @@ __attribute__((no_sanitize("hwaddress"))) static void glfm__onInputEvent(GLFMPla
} }
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__onSensorEvent(GLFMPlatformData *platformData) { NO_SANITIZE static void glfm__onSensorEvent(GLFMPlatformData *platformData) {
ASensorEvent event; ASensorEvent event;
bool sensorEventReceived[GLFM_NUM_SENSORS] = { 0 }; bool sensorEventReceived[GLFM_NUM_SENSORS] = { 0 };
while (ASensorEventQueue_getEvents(platformData->sensorEventQueue, &event, 1) > 0) { while (ASensorEventQueue_getEvents(platformData->sensorEventQueue, &event, 1) > 0) {
@ -1542,7 +1544,7 @@ int pollAll(int timeoutMillis, int* outFd, int* outEvents, void** outData) {
return result; return result;
} }
__attribute__((no_sanitize("hwaddress"))) static void *glfm__mainLoop(void *param) { NO_SANITIZE static void *glfm__mainLoop(void *param) {
GLFM_LOG_LIFECYCLE("glfm__mainLoop"); GLFM_LOG_LIFECYCLE("glfm__mainLoop");
// Init platform data // Init platform data
@ -1714,7 +1716,7 @@ __attribute__((no_sanitize("hwaddress"))) static void *glfm__mainLoop(void *para
// MARK: - GLFM private functions // MARK: - GLFM private functions
__attribute__((no_sanitize("hwaddress"))) static jobject glfm__getDecorView(JNIEnv *jni, GLFMPlatformData *platformData) NO_SANITIZE static jobject glfm__getDecorView(JNIEnv *jni, GLFMPlatformData *platformData)
{ {
if (!platformData || !platformData->activity || (*jni)->ExceptionCheck(jni)) { if (!platformData || !platformData->activity || (*jni)->ExceptionCheck(jni)) {
return NULL; return NULL;
@ -1728,7 +1730,7 @@ __attribute__((no_sanitize("hwaddress"))) static jobject glfm__getDecorView(JNIE
return glfm__wasJavaExceptionThrown(jni) ? NULL : decorView; return glfm__wasJavaExceptionThrown(jni) ? NULL : decorView;
} }
__attribute__((no_sanitize("hwaddress"))) static ARect glfm__getDecorViewRect(GLFMPlatformData *platformData, const ARect *defaultRect) NO_SANITIZE static ARect glfm__getDecorViewRect(GLFMPlatformData *platformData, const ARect *defaultRect)
{ {
JNIEnv *jni = platformData->jniEnv; JNIEnv *jni = platformData->jniEnv;
if ((*jni)->ExceptionCheck(jni)) { if ((*jni)->ExceptionCheck(jni)) {
@ -1770,13 +1772,13 @@ __attribute__((no_sanitize("hwaddress"))) static ARect glfm__getDecorViewRect(GL
return result; return result;
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__updateUserInterfaceChromeCallback(GLFMPlatformData *platformData, void *userData) { NO_SANITIZE static void glfm__updateUserInterfaceChromeCallback(GLFMPlatformData *platformData, void *userData) {
(void)userData; (void)userData;
glfm__updateUserInterfaceChrome(platformData); glfm__updateUserInterfaceChrome(platformData);
} }
// Can be called from either native thread or UI thread // Can be called from either native thread or UI thread
__attribute__((no_sanitize("hwaddress"))) static void glfm__updateUserInterfaceChrome(GLFMPlatformData *platformData) { NO_SANITIZE static void glfm__updateUserInterfaceChrome(GLFMPlatformData *platformData) {
static const unsigned int View_STATUS_BAR_HIDDEN = 0x00000001; static const unsigned int View_STATUS_BAR_HIDDEN = 0x00000001;
static const unsigned int View_SYSTEM_UI_FLAG_LOW_PROFILE = 0x00000001; static const unsigned int View_SYSTEM_UI_FLAG_LOW_PROFILE = 0x00000001;
static const unsigned int View_SYSTEM_UI_FLAG_HIDE_NAVIGATION = 0x00000002; static const unsigned int View_SYSTEM_UI_FLAG_HIDE_NAVIGATION = 0x00000002;
@ -1890,7 +1892,7 @@ __attribute__((no_sanitize("hwaddress"))) static void glfm__updateUserInterfaceC
(*jni)->DeleteLocalRef(jni, decorView); (*jni)->DeleteLocalRef(jni, decorView);
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__resetContentRect(GLFMPlatformData *platformData) { NO_SANITIZE static void glfm__resetContentRect(GLFMPlatformData *platformData) {
// Reset's NativeActivity's content rect so that onContentRectChanged acts as a // Reset's NativeActivity's content rect so that onContentRectChanged acts as a
// OnGlobalLayoutListener. This is needed to detect changes to getWindowVisibleDisplayFrame() // OnGlobalLayoutListener. This is needed to detect changes to getWindowVisibleDisplayFrame()
// HACK: This uses undocumented fields. // HACK: This uses undocumented fields.
@ -1912,7 +1914,7 @@ __attribute__((no_sanitize("hwaddress"))) static void glfm__resetContentRect(GLF
glfm__clearJavaException(jni); glfm__clearJavaException(jni);
} }
__attribute__((no_sanitize("hwaddress"))) static ARect glfm__getWindowVisibleDisplayFrame(GLFMPlatformData *platformData, const ARect *defaultRect) NO_SANITIZE static ARect glfm__getWindowVisibleDisplayFrame(GLFMPlatformData *platformData, const ARect *defaultRect)
{ {
JNIEnv *jni = platformData->jniEnv; JNIEnv *jni = platformData->jniEnv;
if ((*jni)->ExceptionCheck(jni)) { if ((*jni)->ExceptionCheck(jni)) {
@ -1968,7 +1970,7 @@ __attribute__((no_sanitize("hwaddress"))) static ARect glfm__getWindowVisibleDis
return rect; return rect;
} }
__attribute__((no_sanitize("hwaddress"))) static bool glfm__getSafeInsets(const GLFMDisplay *display, int *top, int *right, NO_SANITIZE static bool glfm__getSafeInsets(const GLFMDisplay *display, int *top, int *right,
int *bottom, int *left) { int *bottom, int *left) {
GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData; GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData;
const int SDK_INT = platformData->activity->sdkVersion; const int SDK_INT = platformData->activity->sdkVersion;
@ -2004,7 +2006,7 @@ __attribute__((no_sanitize("hwaddress"))) static bool glfm__getSafeInsets(const
return true; return true;
} }
__attribute__((no_sanitize("hwaddress"))) static bool glfm__getSystemWindowInsets(const GLFMDisplay *display, int *top, int *right, NO_SANITIZE static bool glfm__getSystemWindowInsets(const GLFMDisplay *display, int *top, int *right,
int *bottom, int *left) { int *bottom, int *left) {
GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData; GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData;
const int SDK_INT = platformData->activity->sdkVersion; const int SDK_INT = platformData->activity->sdkVersion;
@ -2035,7 +2037,7 @@ __attribute__((no_sanitize("hwaddress"))) static bool glfm__getSystemWindowInset
} }
// Calls activity.getWindow().getWindowManager().getDefaultDisplay() // Calls activity.getWindow().getWindowManager().getDefaultDisplay()
__attribute__((no_sanitize("hwaddress"))) static jobject glfm__getWindowDisplay(GLFMPlatformData *platformData) { NO_SANITIZE static jobject glfm__getWindowDisplay(GLFMPlatformData *platformData) {
JNIEnv *jni = platformData->jniEnv; JNIEnv *jni = platformData->jniEnv;
jobject activity = platformData->activity->clazz; jobject activity = platformData->activity->clazz;
jobject window = glfm__callJavaMethod(jni, activity, "getWindow", jobject window = glfm__callJavaMethod(jni, activity, "getWindow",
@ -2058,7 +2060,7 @@ __attribute__((no_sanitize("hwaddress"))) static jobject glfm__getWindowDisplay(
return windowDisplay; return windowDisplay;
} }
__attribute__((no_sanitize("hwaddress"))) static float glfm__getRefreshRate(const GLFMDisplay *display) { NO_SANITIZE static float glfm__getRefreshRate(const GLFMDisplay *display) {
GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData; GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData;
JNIEnv *jni = platformData->jniEnv; JNIEnv *jni = platformData->jniEnv;
float refreshRate = -1; float refreshRate = -1;
@ -2073,7 +2075,7 @@ __attribute__((no_sanitize("hwaddress"))) static float glfm__getRefreshRate(cons
return refreshRate; return refreshRate;
} }
__attribute__((no_sanitize("hwaddress"))) static bool glfm__updateSurfaceSizeIfNeeded(GLFMDisplay *display, bool force) { NO_SANITIZE static bool glfm__updateSurfaceSizeIfNeeded(GLFMDisplay *display, bool force) {
GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData; GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData;
int32_t width = 0; int32_t width = 0;
int32_t height = 0; int32_t height = 0;
@ -2101,7 +2103,7 @@ __attribute__((no_sanitize("hwaddress"))) static bool glfm__updateSurfaceSizeIfN
return false; return false;
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__getDisplayChromeInsets(const GLFMDisplay *display, int *top, int *right, NO_SANITIZE static void glfm__getDisplayChromeInsets(const GLFMDisplay *display, int *top, int *right,
int *bottom, int *left) { int *bottom, int *left) {
bool success; bool success;
@ -2128,7 +2130,7 @@ __attribute__((no_sanitize("hwaddress"))) static void glfm__getDisplayChromeInse
} }
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__reportInsetsChangedIfNeeded(GLFMDisplay *display) { NO_SANITIZE static void glfm__reportInsetsChangedIfNeeded(GLFMDisplay *display) {
if (!display) { if (!display) {
return; return;
} }
@ -2149,7 +2151,7 @@ __attribute__((no_sanitize("hwaddress"))) static void glfm__reportInsetsChangedI
platformData->insets.valid = true; platformData->insets.valid = true;
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__reportOrientationChangeIfNeeded(GLFMDisplay *display) { NO_SANITIZE static void glfm__reportOrientationChangeIfNeeded(GLFMDisplay *display) {
if (!display) { if (!display) {
return; return;
} }
@ -2164,7 +2166,7 @@ __attribute__((no_sanitize("hwaddress"))) static void glfm__reportOrientationCha
} }
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__setOrientation(GLFMPlatformData *platformData) { NO_SANITIZE static void glfm__setOrientation(GLFMPlatformData *platformData) {
static const int ActivityInfo_SCREEN_ORIENTATION_SENSOR = 0x00000004; static const int ActivityInfo_SCREEN_ORIENTATION_SENSOR = 0x00000004;
static const int ActivityInfo_SCREEN_ORIENTATION_SENSOR_LANDSCAPE = 0x00000006; static const int ActivityInfo_SCREEN_ORIENTATION_SENSOR_LANDSCAPE = 0x00000006;
static const int ActivityInfo_SCREEN_ORIENTATION_SENSOR_PORTRAIT = 0x00000007; static const int ActivityInfo_SCREEN_ORIENTATION_SENSOR_PORTRAIT = 0x00000007;
@ -2195,7 +2197,7 @@ __attribute__((no_sanitize("hwaddress"))) static void glfm__setOrientation(GLFMP
glfm__clearJavaException(jni); glfm__clearJavaException(jni);
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__displayChromeUpdated(GLFMDisplay *display) { NO_SANITIZE static void glfm__displayChromeUpdated(GLFMDisplay *display) {
GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData; GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData;
glfm__updateUserInterfaceChrome(platformData); glfm__updateUserInterfaceChrome(platformData);
} }
@ -2216,7 +2218,7 @@ static const ASensor *glfm__getDeviceSensor(GLFMSensor sensor) {
} }
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__setAllRequestedSensorsEnabled(GLFMDisplay *display, bool enabledGlobally) { NO_SANITIZE static void glfm__setAllRequestedSensorsEnabled(GLFMDisplay *display, bool enabledGlobally) {
if (!display) { if (!display) {
return; return;
} }
@ -2262,7 +2264,7 @@ __attribute__((no_sanitize("hwaddress"))) static void glfm__setAllRequestedSenso
} }
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__sensorFuncUpdated(GLFMDisplay *display) { NO_SANITIZE static void glfm__sensorFuncUpdated(GLFMDisplay *display) {
if (display) { if (display) {
GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData; GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData;
glfm__setAllRequestedSensorsEnabled(display, platformData->animating); glfm__setAllRequestedSensorsEnabled(display, platformData->animating);
@ -2300,7 +2302,7 @@ static jobject glfm__getSystemService(GLFMPlatformData *platformData, const char
return service; return service;
} }
__attribute__((no_sanitize("hwaddress"))) static bool glfm__setKeyboardVisible(GLFMPlatformData *platformData, bool visible) { NO_SANITIZE static bool glfm__setKeyboardVisible(GLFMPlatformData *platformData, bool visible) {
static const int InputMethodManager_SHOW_FORCED = 2; static const int InputMethodManager_SHOW_FORCED = 2;
JNIEnv *jni = platformData->jniEnv; JNIEnv *jni = platformData->jniEnv;
@ -2343,7 +2345,7 @@ __attribute__((no_sanitize("hwaddress"))) static bool glfm__setKeyboardVisible(G
return !glfm__wasJavaExceptionThrown(jni); return !glfm__wasJavaExceptionThrown(jni);
} }
__attribute__((no_sanitize("hwaddress"))) static void glfm__updateKeyboardVisibility(GLFMPlatformData *platformData) { NO_SANITIZE static void glfm__updateKeyboardVisibility(GLFMPlatformData *platformData) {
if (platformData->display) { if (platformData->display) {
const ARect *contentRect = &platformData->contentRectArray[platformData->contentRectIndex]; const ARect *contentRect = &platformData->contentRectArray[platformData->contentRectIndex];
ARect windowRect = glfm__getDecorViewRect(platformData, contentRect); ARect windowRect = glfm__getDecorViewRect(platformData, contentRect);
@ -2455,7 +2457,7 @@ void glfmSwapBuffers(GLFMDisplay *display) {
} }
} }
__attribute__((no_sanitize("hwaddress"))) void glfmSetSupportedInterfaceOrientation(GLFMDisplay *display, GLFMInterfaceOrientation supportedOrientations) { NO_SANITIZE void glfmSetSupportedInterfaceOrientation(GLFMDisplay *display, GLFMInterfaceOrientation supportedOrientations) {
if (display && display->supportedOrientations != supportedOrientations) { if (display && display->supportedOrientations != supportedOrientations) {
display->supportedOrientations = supportedOrientations; display->supportedOrientations = supportedOrientations;
GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData; GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData;
@ -2463,7 +2465,7 @@ __attribute__((no_sanitize("hwaddress"))) void glfmSetSupportedInterfaceOrientat
} }
} }
__attribute__((no_sanitize("hwaddress"))) GLFMInterfaceOrientation glfmGetInterfaceOrientation(const GLFMDisplay *display) { NO_SANITIZE GLFMInterfaceOrientation glfmGetInterfaceOrientation(const GLFMDisplay *display) {
enum { enum {
Surface_ROTATION_0 = 0, Surface_ROTATION_0 = 0,
Surface_ROTATION_90 = 1, Surface_ROTATION_90 = 1,
@ -2497,18 +2499,18 @@ __attribute__((no_sanitize("hwaddress"))) GLFMInterfaceOrientation glfmGetInterf
} }
} }
__attribute__((no_sanitize("hwaddress"))) void glfmGetDisplaySize(const GLFMDisplay *display, int *width, int *height) { NO_SANITIZE void glfmGetDisplaySize(const GLFMDisplay *display, int *width, int *height) {
GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData; GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData;
if (width) *width = platformData->width; if (width) *width = platformData->width;
if (height) *height = platformData->height; if (height) *height = platformData->height;
} }
__attribute__((no_sanitize("hwaddress"))) double glfmGetDisplayScale(const GLFMDisplay *display) { NO_SANITIZE double glfmGetDisplayScale(const GLFMDisplay *display) {
GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData; GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData;
return platformData->scale; return platformData->scale;
} }
__attribute__((no_sanitize("hwaddress"))) void glfmGetDisplayChromeInsets(const GLFMDisplay *display, double *top, double *right, NO_SANITIZE void glfmGetDisplayChromeInsets(const GLFMDisplay *display, double *top, double *right,
double *bottom, double *left) { double *bottom, double *left) {
int intTop, intRight, intBottom, intLeft; int intTop, intRight, intBottom, intLeft;
glfm__getDisplayChromeInsets(display, &intTop, &intRight, &intBottom, &intLeft); glfm__getDisplayChromeInsets(display, &intTop, &intRight, &intBottom, &intLeft);
@ -2518,34 +2520,34 @@ __attribute__((no_sanitize("hwaddress"))) void glfmGetDisplayChromeInsets(const
if (left) *left = (double)intLeft; if (left) *left = (double)intLeft;
} }
__attribute__((no_sanitize("hwaddress"))) GLFMRenderingAPI glfmGetRenderingAPI(const GLFMDisplay *display) { NO_SANITIZE GLFMRenderingAPI glfmGetRenderingAPI(const GLFMDisplay *display) {
GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData; GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData;
return platformData->renderingAPI; return platformData->renderingAPI;
} }
__attribute__((no_sanitize("hwaddress"))) bool glfmHasTouch(const GLFMDisplay *display) { NO_SANITIZE bool glfmHasTouch(const GLFMDisplay *display) {
(void)display; (void)display;
// This will need to change, for say, TV apps // This will need to change, for say, TV apps
return true; return true;
} }
__attribute__((no_sanitize("hwaddress"))) void glfmSetMouseCursor(GLFMDisplay *display, GLFMMouseCursor mouseCursor) { NO_SANITIZE void glfmSetMouseCursor(GLFMDisplay *display, GLFMMouseCursor mouseCursor) {
(void)display; (void)display;
(void)mouseCursor; (void)mouseCursor;
// Do nothing // Do nothing
} }
__attribute__((no_sanitize("hwaddress"))) void glfmSetMultitouchEnabled(GLFMDisplay *display, bool multitouchEnabled) { NO_SANITIZE void glfmSetMultitouchEnabled(GLFMDisplay *display, bool multitouchEnabled) {
GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData; GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData;
platformData->multitouchEnabled = multitouchEnabled; platformData->multitouchEnabled = multitouchEnabled;
} }
__attribute__((no_sanitize("hwaddress"))) bool glfmGetMultitouchEnabled(const GLFMDisplay *display) { NO_SANITIZE bool glfmGetMultitouchEnabled(const GLFMDisplay *display) {
GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData; GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData;
return platformData->multitouchEnabled; return platformData->multitouchEnabled;
} }
__attribute__((no_sanitize("hwaddress"))) GLFMProc glfmGetProcAddress(const char *functionName) { NO_SANITIZE GLFMProc glfmGetProcAddress(const char *functionName) {
GLFMProc function = eglGetProcAddress(functionName); GLFMProc function = eglGetProcAddress(functionName);
if (!function) { if (!function) {
static void *handle = NULL; static void *handle = NULL;
@ -2557,29 +2559,29 @@ __attribute__((no_sanitize("hwaddress"))) GLFMProc glfmGetProcAddress(const char
return function; return function;
} }
__attribute__((no_sanitize("hwaddress"))) bool glfmHasVirtualKeyboard(const GLFMDisplay *display) { NO_SANITIZE bool glfmHasVirtualKeyboard(const GLFMDisplay *display) {
(void)display; (void)display;
return true; return true;
} }
__attribute__((no_sanitize("hwaddress"))) void glfmSetKeyboardVisible(GLFMDisplay *display, bool visible) { NO_SANITIZE void glfmSetKeyboardVisible(GLFMDisplay *display, bool visible) {
GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData; GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData;
if (glfm__setKeyboardVisible(platformData, visible)) { if (glfm__setKeyboardVisible(platformData, visible)) {
glfm__updateUserInterfaceChrome(platformData); glfm__updateUserInterfaceChrome(platformData);
} }
} }
__attribute__((no_sanitize("hwaddress"))) bool glfmIsKeyboardVisible(const GLFMDisplay *display) { NO_SANITIZE bool glfmIsKeyboardVisible(const GLFMDisplay *display) {
GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData; GLFMPlatformData *platformData = (GLFMPlatformData *)display->platformData;
return platformData->keyboardVisible; return platformData->keyboardVisible;
} }
__attribute__((no_sanitize("hwaddress"))) bool glfmIsSensorAvailable(const GLFMDisplay *display, GLFMSensor sensor) { NO_SANITIZE bool glfmIsSensorAvailable(const GLFMDisplay *display, GLFMSensor sensor) {
(void)display; (void)display;
return glfm__getDeviceSensor(sensor) != NULL; return glfm__getDeviceSensor(sensor) != NULL;
} }
__attribute__((no_sanitize("hwaddress"))) bool glfmIsHapticFeedbackSupported(const GLFMDisplay *display) { NO_SANITIZE bool glfmIsHapticFeedbackSupported(const GLFMDisplay *display) {
/* /*
Vibrator vibrator = (Vibrator)context.getSystemService(Context.VIBRATOR_SERVICE); Vibrator vibrator = (Vibrator)context.getSystemService(Context.VIBRATOR_SERVICE);
return vibrator ? vibrator.hasVibrator() : false; return vibrator ? vibrator.hasVibrator() : false;
@ -2604,7 +2606,7 @@ __attribute__((no_sanitize("hwaddress"))) bool glfmIsHapticFeedbackSupported(con
return result; return result;
} }
__attribute__((no_sanitize("hwaddress"))) void glfmPerformHapticFeedback(GLFMDisplay *display, GLFMHapticFeedbackStyle style) { NO_SANITIZE void glfmPerformHapticFeedback(GLFMDisplay *display, GLFMHapticFeedbackStyle style) {
// decorView.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, flags); // decorView.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, flags);
static const jint HapticFeedbackConstants_CONTEXT_CLICK = 6; // Light, API 23 static const jint HapticFeedbackConstants_CONTEXT_CLICK = 6; // Light, API 23
static const jint HapticFeedbackConstants_VIRTUAL_KEY = 1; // Medium static const jint HapticFeedbackConstants_VIRTUAL_KEY = 1; // Medium
@ -2658,7 +2660,7 @@ __attribute__((no_sanitize("hwaddress"))) void glfmPerformHapticFeedback(GLFMDis
(*jni)->DeleteLocalRef(jni, decorView); (*jni)->DeleteLocalRef(jni, decorView);
} }
__attribute__((no_sanitize("hwaddress"))) bool glfmHasClipboardText(const GLFMDisplay *display) { NO_SANITIZE bool glfmHasClipboardText(const GLFMDisplay *display) {
if (!display || !display->platformData) { if (!display || !display->platformData) {
return false; return false;
} }
@ -2697,7 +2699,7 @@ __attribute__((no_sanitize("hwaddress"))) bool glfmHasClipboardText(const GLFMDi
return hasText; return hasText;
} }
__attribute__((no_sanitize("hwaddress"))) void glfmRequestClipboardText(GLFMDisplay *display, GLFMClipboardTextFunc clipboardTextFunc) { NO_SANITIZE void glfmRequestClipboardText(GLFMDisplay *display, GLFMClipboardTextFunc clipboardTextFunc) {
if (!clipboardTextFunc) { if (!clipboardTextFunc) {
return; return;
} }
@ -2765,7 +2767,7 @@ __attribute__((no_sanitize("hwaddress"))) void glfmRequestClipboardText(GLFMDisp
(*jni)->DeleteLocalRef(jni, javaString); (*jni)->DeleteLocalRef(jni, javaString);
} }
__attribute__((no_sanitize("hwaddress"))) bool glfmSetClipboardText(GLFMDisplay *display, const char *string) { NO_SANITIZE bool glfmSetClipboardText(GLFMDisplay *display, const char *string) {
if (!string || !display || !display->platformData) { if (!string || !display || !display->platformData) {
return false; return false;
} }
@ -2818,19 +2820,19 @@ __attribute__((no_sanitize("hwaddress"))) bool glfmSetClipboardText(GLFMDisplay
// MARK: - Platform-specific functions // MARK: - Platform-specific functions
__attribute__((no_sanitize("hwaddress"))) bool glfmIsMetalSupported(const GLFMDisplay *display) { NO_SANITIZE bool glfmIsMetalSupported(const GLFMDisplay *display) {
(void)display; (void)display;
return false; return false;
} }
__attribute__((no_sanitize("hwaddress"))) ANativeActivity *glfmAndroidGetActivity(void) { NO_SANITIZE ANativeActivity *glfmAndroidGetActivity(void) {
if (!platformDataGlobal) { if (!platformDataGlobal) {
return NULL; return NULL;
} }
return platformDataGlobal->activity; return platformDataGlobal->activity;
} }
__attribute__((no_sanitize("hwaddress"))) void *glfmGetAndroidActivity(const GLFMDisplay *display) { NO_SANITIZE void *glfmGetAndroidActivity(const GLFMDisplay *display) {
if (!display || !display->platformData) { if (!display || !display->platformData) {
return NULL; return NULL;
} }