@@ -510,48 +510,95 @@ public void enableSpatialMapping(boolean enable)
510510 */
511511 private void updateMeshData ()
512512 {
513- try
513+ // Use IntPointers for output parameters to ensure we read C-side writes
514+ try (IntPointer nbVerticesPerSubmesh = new IntPointer (1000 );
515+ IntPointer nbTrianglesPerSubmesh = new IntPointer (1000 );
516+ IntPointer nbSubmeshes = new IntPointer (1 );
517+ IntPointer updatedIndices = new IntPointer (1000 );
518+ IntPointer nbVerticesTot = new IntPointer (1 );
519+ IntPointer nbTrianglesTot = new IntPointer (1 ))
514520 {
515- // Extract the complete spatial map
516- sl_extract_whole_spatial_map (cameraID );
517-
518- // Get mesh size information
519521 int maxSubmesh = 1000 ;
520- int [] nbVerticesPerSubmesh = new int [maxSubmesh ];
521- int [] nbTrianglesPerSubmesh = new int [maxSubmesh ];
522- int [] nbSubmeshes = new int [1 ];
523- int [] updatedIndices = new int [maxSubmesh ];
524- int [] nbVerticesTot = new int [1 ];
525- int [] nbTrianglesTot = new int [1 ];
526522
527- sl_update_mesh (cameraID , nbVerticesPerSubmesh , nbTrianglesPerSubmesh , nbSubmeshes , updatedIndices , nbVerticesTot , nbTrianglesTot , maxSubmesh );
523+ int mappingState = sl_get_spatial_mapping_state (cameraID );
524+ LogTools .debug ("Spatial mapping state: {}" , mappingState );
525+ switch (mappingState )
526+ {
527+ case SL_SPATIAL_MAPPING_STATE_INITIALIZING :
528+ LogTools .debug ("Spatial mapping initializing..." );
529+ break ;
530+ case SL_SPATIAL_MAPPING_STATE_OK :
531+ LogTools .debug ("Spatial mapping OK" );
532+ break ;
533+ case SL_SPATIAL_MAPPING_STATE_NOT_ENOUGH_MEMORY :
534+ LogTools .debug ("Not enough memory for spatial mapping" );
535+ return ;
536+ case SL_SPATIAL_MAPPING_STATE_NOT_ENABLED :
537+ LogTools .debug ("Spatial mapping not enabled" );
538+ return ;
539+ case SL_SPATIAL_MAPPING_STATE_FPS_TOO_LOW :
540+ LogTools .debug ("FPS too low for spatial mapping" );
541+ return ;
542+ }
528543
529- int numVertices = nbVerticesTot [0 ];
530- int numTriangles = nbTrianglesTot [0 ];
544+ sl_request_mesh_async (cameraID );
545+
546+ // Check if mesh is ready
547+ int meshReadyStatus = sl_get_mesh_request_status_async (cameraID );
548+ if (meshReadyStatus != SL_ERROR_CODE_SUCCESS )
549+ {
550+ LogTools .debug ("Mesh not ready yet: {}" , getZEDErrorName (meshReadyStatus ));
551+ return ;
552+ }
531553
554+ // Call update_mesh with Pointers
555+ int updateResult = sl_update_mesh (cameraID ,
556+ nbVerticesPerSubmesh ,
557+ nbTrianglesPerSubmesh ,
558+ nbSubmeshes ,
559+ updatedIndices ,
560+ nbVerticesTot ,
561+ nbTrianglesTot ,
562+ maxSubmesh );
563+
564+ // Check result code
565+ if (updateResult != SL_ERROR_CODE_SUCCESS )
566+ {
567+ LogTools .warn ("sl_update_mesh failed with error: {} ({})" ,
568+ getZEDErrorName (updateResult ), updateResult );
569+ return ;
570+ }
571+
572+ // Read values from Pointers
573+ int numVertices = nbVerticesTot .get ();
574+ int numTriangles = nbTrianglesTot .get ();
532575 if (numVertices > 0 && numTriangles > 0 )
533576 {
534577 // Allocate arrays for mesh data
535- float [] vertices = new float [numVertices * 3 ]; // x, y, z for each vertex
536- int [] triangles = new int [numTriangles * 3 ]; // v1, v2, v3 indices for each triangle
537- byte [] colors = new byte [numVertices * 4 ]; // RGBA for each vertex
538- float [] uvs = null ; // Texture coordinates (not needed if save_texture is false)
539- byte [] texturePtr = null ; // Texture data (not needed if save_texture is false)
578+ float [] vertices = new float [numVertices * 3 ];
579+ int [] triangles = new int [numTriangles * 3 ];
580+ byte [] colors = new byte [numVertices * 4 ];
581+ float [] uvs = null ;
582+ byte [] texturePtr = null ;
540583
541- // Retrieve mesh data
542- sl_retrieve_mesh (cameraID , vertices , triangles , colors , uvs , texturePtr , nbSubmeshes [ 0 ] );
584+ // Retrieve using the calculated sizes
585+ int retrieveResult = sl_retrieve_mesh (cameraID , vertices , triangles , colors , uvs , texturePtr , maxSubmesh );
543586
544- // Store mesh data in fields
545- synchronized (this )
587+ if (retrieveResult == SL_ERROR_CODE_SUCCESS )
546588 {
547- meshVertices = vertices ;
548- meshTriangles = triangles ;
549- meshColors = colors ;
550- meshNumVertices = numVertices ;
551- meshNumTriangles = numTriangles ;
589+ synchronized (this )
590+ {
591+ meshVertices = vertices ;
592+ meshTriangles = triangles ;
593+ meshColors = colors ;
594+ meshNumVertices = numVertices ;
595+ meshNumTriangles = numTriangles ;
596+ }
597+ }
598+ else
599+ {
600+ LogTools .error ("Failed to retrieve mesh: " + getZEDErrorName (retrieveResult ));
552601 }
553-
554- LogTools .info ("Mesh updated: {} vertices, {} triangles (from {} submeshes)" , numVertices , numTriangles , nbSubmeshes [0 ]);
555602 }
556603 }
557604 catch (Exception e )
0 commit comments