/* automatically generated by ocaml-bindgen 0.0.1 */ #include "celeritas.h" #include #include #include #include #include #include Core* caml_get_global_core() { CAMLparam0(); CAMLlocal1(result); result = get_global_core(); CAMLreturn(result); } void caml_core_Bringup(value caml_optional_window) { CAMLparam1(caml_optional_window); void* optional_window = Nativeint_val(Field(caml_optional_window, 1)); core_Bringup(optional_window); CAMLreturn0; } void caml_frame_Begin() { CAMLparam0(); frame_Begin(); CAMLreturn0; } void caml_frame_Draw() { CAMLparam0(); frame_Draw(); CAMLreturn0; } void caml_frame_End() { CAMLparam0(); frame_End(); CAMLreturn0; } Vec2* caml_Vec2_of_value(value caml_x) { Vec2* x = malloc(sizeof(struct Vec2)); x->x = Double_val(Field(caml_x, 0)); x->y = Double_val(Field(caml_x, 1)); return x; } value caml_Vec2_to_value(struct Vec2* x) { CAMLparam0(); CAMLlocal1(caml_x); caml_x = caml_alloc_tuple(2); Store_field(caml_x, 0, caml_copy_double(x->x)); Store_field(caml_x, 1, caml_copy_double(x->y)); CAMLreturn(caml_x); } Vec3* caml_Vec3_of_value(value caml_x) { Vec3* x = malloc(sizeof(struct Vec3)); x->x = Double_val(Field(caml_x, 0)); x->y = Double_val(Field(caml_x, 1)); x->z = Double_val(Field(caml_x, 2)); return x; } value caml_Vec3_to_value(struct Vec3* x) { CAMLparam0(); CAMLlocal1(caml_x); caml_x = caml_alloc_tuple(3); Store_field(caml_x, 0, caml_copy_double(x->x)); Store_field(caml_x, 1, caml_copy_double(x->y)); Store_field(caml_x, 2, caml_copy_double(x->z)); CAMLreturn(caml_x); } Vec4* caml_Vec4_of_value(value caml_x) { Vec4* x = malloc(sizeof(struct Vec4)); x->x = Double_val(Field(caml_x, 0)); x->y = Double_val(Field(caml_x, 1)); x->z = Double_val(Field(caml_x, 2)); x->w = Double_val(Field(caml_x, 3)); return x; } value caml_Vec4_to_value(struct Vec4* x) { CAMLparam0(); CAMLlocal1(caml_x); caml_x = caml_alloc_tuple(4); Store_field(caml_x, 0, caml_copy_double(x->x)); Store_field(caml_x, 1, caml_copy_double(x->y)); Store_field(caml_x, 2, caml_copy_double(x->z)); Store_field(caml_x, 3, caml_copy_double(x->w)); CAMLreturn(caml_x); } Vec3 caml_vec3_add(value caml_a, value caml_b) { CAMLparam2(caml_a, caml_b); CAMLlocal1(result); Vec3 a = caml_Vec3_of_value(caml_a); Vec3 b = caml_Vec3_of_value(caml_b); result = vec3_add(a, b); CAMLreturn(result); } #include value bindgen_alloc(value caml_size) { CAMLparam1(caml_size); // Convert OCaml integer to C size size_t size = Int_val(caml_size); printf("Allocated size %ld \n", size); void* ptr = malloc(sizeof(size)); if (ptr == NULL) { // TODO: handle allocation failure CAMLreturn(Val_unit); } // Wrap the pointer as an OCaml value CAMLreturn(caml_copy_nativeint(ptr)); } void bindgen_free(value caml_addr) { free(Nativeint_val(caml_addr)); } value bindgen_alloc_string(value caml_string) { CAMLparam1(caml_string); char* str = String_val(caml_string); CAMLreturn(caml_copy_nativeint((intnat)str)); }