#include "moonlight_triangulation.h"
#include "HsFFI.h"
_Static_assert(ML_OBSTRUCTION_REFINEMENT_MAXIMUM_EDGE_LENGTH_NOT_FINITE == 60, "maximum-edge ABI code drift");
_Static_assert(ML_OBSTRUCTION_REFINEMENT_MAXIMUM_EDGE_LENGTH_NOT_POSITIVE == 61, "maximum-edge ABI code drift");
_Static_assert(ML_OBSTRUCTION_REFINEMENT_OVERSIZED_EDGE == 62, "maximum-edge ABI code drift");
_Static_assert(ML_OBSTRUCTION_REFINEMENT_SEAM_BRIDGE_BUDGET_EXCEEDED == 63, "seam-bridge ABI code drift");
_Static_assert(ML_OBSTRUCTION_REFINEMENT_SEAM_BRIDGE_MIDPOINT_COLLAPSED == 64, "seam-bridge ABI code drift");
_Static_assert(ML_OBSTRUCTION_BOUNDARY_SPLIT_REQUIRES_BOUNDARY_EDGE == 65, "boundary-split ABI code drift");
#if defined(_WIN32)
#include <windows.h>
static INIT_ONCE moonlight_runtime_once = INIT_ONCE_STATIC_INIT;
static BOOL CALLBACK moonlight_initialize_runtime(PINIT_ONCE once, PVOID parameter, PVOID *context) {
int argc = 1;
char program_name[] = "moonlight-triangulation";
char *argv[] = {program_name, NULL};
char **argv_pointer = argv;
(void)once;
(void)parameter;
(void)context;
hs_init(&argc, &argv_pointer);
return TRUE;
}
ML_API ml_status ml_runtime_initialize(void) {
return InitOnceExecuteOnce(&moonlight_runtime_once, moonlight_initialize_runtime, NULL, NULL)
? ML_STATUS_OK
: ML_STATUS_RUNTIME_FAILURE;
}
#else
#include <pthread.h>
static pthread_once_t moonlight_runtime_once = PTHREAD_ONCE_INIT;
static void moonlight_initialize_runtime(void) {
int argc = 1;
char program_name[] = "moonlight-triangulation";
char *argv[] = {program_name, NULL};
char **argv_pointer = argv;
hs_init(&argc, &argv_pointer);
}
ML_API ml_status ml_runtime_initialize(void) {
return pthread_once(&moonlight_runtime_once, moonlight_initialize_runtime) == 0
? ML_STATUS_OK
: ML_STATUS_RUNTIME_FAILURE;
}
#endif
ML_API uint32_t ml_abi_version(void) {
return 2;
}