opencamera

This commit is contained in:
Greg Shuflin
2025-12-17 16:37:21 -08:00
parent 65a5f3c066
commit 760d050391
2 changed files with 26 additions and 1 deletions
+6
View File
@@ -189,4 +189,10 @@ opaque playTrack : @& SDLTrack → SDLIO Bool
@[extern "sdl_get_cameras"]
opaque getCameras : SDLIO (List UInt32)
private opaque SDLCamera.nonemptyType : NonemptyType
def SDLCamera : Type := SDLCamera.nonemptyType.type
instance SDLCamera.instNonempty : Nonempty SDLCamera := SDLCamera.nonemptyType.property
@[extern "sdl_get_cameras"]
opaque openCamera : SDLIO UInt32 -> SDLCamera
end SDL
+20 -1
View File
@@ -95,6 +95,12 @@ static void sdl_mixer_audio_finalizer(void * h) {
static void sdl_mixer_audio_foreach(void * val, lean_obj_arg fn) {
}
static lean_external_class * sdl_camera_external_class = NULL;
static void sdl_camera_foreach(void * val, lean_obj_arg fn) {
}
static void sdl_camera_finalizer(void * h) {
}
lean_obj_res sdl_init(uint32_t flags, lean_obj_arg w) {
@@ -105,6 +111,7 @@ lean_obj_res sdl_init(uint32_t flags, lean_obj_arg w) {
sdl_window_external_class = lean_register_external_class(sdl_window_finalizer, sdl_window_foreach);
sdl_renderer_external_class = lean_register_external_class(sdl_renderer_finalizer, sdl_renderer_foreach);
sdl_surface_external_class = lean_register_external_class(sdl_surface_finalizer, sdl_surface_foreach);
sdl_camera_external_class = lean_register_external_class(sdl_camera_finalizer, sdl_camera_foreach);
return lean_io_result_mk_ok(lean_box_uint32(result));
}
@@ -389,7 +396,7 @@ lean_obj_res sdl_render_entire_texture(lean_object* g_renderer, lean_object * g_
}
lean_obj_res sdl_get_cameras(lean_obj_arg w) {
lean_obj_res sdl_get_cameras() {
int count = 0;
SDL_CameraID* devices = SDL_GetCameras(&count);
if (devices == NULL) {
@@ -420,6 +427,18 @@ lean_obj_res sdl_get_cameras(lean_obj_arg w) {
}
//TODO: implement 2nd SDL_CameraSpec arg
lean_obj_res sdl_open_camera(uint32_t instance_id) {
SDL_Camera* camera = SDL_OpenCamera(instance_id, NULL);
if (camera == NULL) {
return lean_io_result_mk_error(lean_mk_string(SDL_GetError()));
}
lean_object* external_camera = lean_alloc_external(sdl_camera_external_class, camera);
return lean_io_result_mk_ok(external_camera);
}
// Mouse support (caching avoids redundant SDL calls within the same frame)
static struct {