/// <summary>
        /// Initializes coco launcher from MetaKernel.
        /// </summary>
        public static void Start()
        {
            MetaCocoInterop.EnsureMaskExists();
            MetaKernelCocoInterop.ConnectCoco();

            UnityEngine.Application.runInBackground = true;
        }
        private void Update()
        {
            if (!Initialized)
            {
                return;
            }

            if (MetaCocoInterop.GetFrameHandsFlatbufferObject(ref _buffer, out _frame))
            {
                _recievedFirstFrame = true;

                meta.types.HandData?incomingRight = null;
                meta.types.HandData?incomingLeft  = null;
                for (int i = 0; i < _frame.HandsLength; i++)
                {
                    switch (_frame.Hands(i).Value.HandType)
                    {
                    case meta.types.HandType.RIGHT:
                        incomingRight = _frame.Hands(i);
                        break;

                    default:
                        incomingLeft = _frame.Hands(i);
                        break;
                    }
                }

                RightHand.UpdateHand(incomingRight);
                LeftHand.UpdateHand(incomingLeft);

                RightHand.UpdateEvents();
                LeftHand.UpdateEvents();
            }
        }
        internal static void ToggleDebugDrawing(bool targetState)
        {
            var targetStateString = targetState ? "true" : "false";
            var attribute         = "draw";

            MetaCocoInterop.meta_update_attribute("HandsDataPreprocessingBlock", attribute, targetStateString);
            MetaCocoInterop.meta_update_attribute("HandSegmentationBlock", attribute, targetStateString);
            MetaCocoInterop.meta_update_attribute("HandTrackingBlock", attribute, targetStateString);
            MetaCocoInterop.meta_update_attribute("HandFeatureExtractionBlock", attribute, targetStateString);
        }