{"id":1016,"date":"2026-04-09T12:35:57","date_gmt":"2026-04-09T10:35:57","guid":{"rendered":"https:\/\/www.youbiquo.eu\/geckode\/?page_id=1016"},"modified":"2026-04-09T13:31:05","modified_gmt":"2026-04-09T11:31:05","slug":"advanced","status":"publish","type":"page","link":"https:\/\/www.youbiquo.eu\/geckode\/en\/advanced\/","title":{"rendered":"Advanced"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1016\" class=\"elementor elementor-1016\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-59a1b7c e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent\" data-id=\"59a1b7c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4552b6e elementor-widget elementor-widget-heading\" data-id=\"4552b6e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Advanced<\/h2>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-af25e4d e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent\" data-id=\"af25e4d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-03d1ffe e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"03d1ffe\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2d8b463 elementor-widget__width-initial elementor-toc--minimized-on-tablet elementor-widget elementor-widget-table-of-contents\" data-id=\"2d8b463\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;headings_by_tags&quot;:[&quot;h3&quot;,&quot;h4&quot;,&quot;h5&quot;,&quot;h6&quot;],&quot;exclude_headings_by_selector&quot;:&quot;footer&quot;,&quot;marker_view&quot;:&quot;bullets&quot;,&quot;icon&quot;:{&quot;value&quot;:&quot;far fa-dot-circle&quot;,&quot;library&quot;:&quot;fa-regular&quot;,&quot;rendered_tag&quot;:&quot;&lt;svg class=\\&quot;e-font-icon-svg e-far-dot-circle\\&quot; viewBox=\\&quot;0 0 512 512\\&quot; xmlns=\\&quot;http:\\\/\\\/www.w3.org\\\/2000\\\/svg\\&quot;&gt;&lt;path d=\\&quot;M256 56c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m0-48C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 168c-44.183 0-80 35.817-80 80s35.817 80 80 80 80-35.817 80-80-35.817-80-80-80z\\&quot;&gt;&lt;\\\/path&gt;&lt;\\\/svg&gt;&quot;},&quot;no_headings_message&quot;:&quot;Non sono state trovate intestazioni in questa pagina.&quot;,&quot;minimize_box&quot;:&quot;yes&quot;,&quot;minimized_on&quot;:&quot;tablet&quot;,&quot;hierarchical_view&quot;:&quot;yes&quot;,&quot;min_height&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"table-of-contents.default\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-toc__header\">\n\t\t\t\t\t\t<h2 class=\"elementor-toc__header-title\">\n\t\t\t\tAdvanced \u2014 LeonardoXR SDK\t\t\t<\/h2>\n\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-toc__toggle-button elementor-toc__toggle-button--expand\" role=\"button\" tabindex=\"0\" aria-controls=\"elementor-toc__2d8b463\" aria-expanded=\"true\" aria-label=\"Open table of contents\"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/div>\n\t\t\t\t<div class=\"elementor-toc__toggle-button elementor-toc__toggle-button--collapse\" role=\"button\" tabindex=\"0\" aria-controls=\"elementor-toc__2d8b463\" aria-expanded=\"true\" aria-label=\"Close table of contents\"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<div id=\"elementor-toc__2d8b463\" class=\"elementor-toc__body\">\n\t\t\t<div class=\"elementor-toc__spinner-container\">\n\t\t\t\t<svg class=\"elementor-toc__spinner eicon-animation-spin e-font-icon-svg e-eicon-loading\" aria-hidden=\"true\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M500 975V858C696 858 858 696 858 500S696 142 500 142 142 304 142 500H25C25 237 238 25 500 25S975 237 975 500 763 975 500 975Z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-110d8e7 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"110d8e7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5538572 elementor-widget elementor-widget-text-editor\" data-id=\"5538572\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h1>Advanced<\/h1><ul><li class=\"code-line\" dir=\"auto\" data-line=\"2\"><em><strong>Version<\/strong> 1.0.2<\/em><\/li><li class=\"code-line\" dir=\"auto\" data-line=\"2\"><em><strong>Device:<\/strong> Youbiquo Leonardo XR<\/em><\/li><li class=\"code-line\" dir=\"auto\" data-line=\"2\"><em><strong> Base SDK:<\/strong> Snapdragon Spaces 1.0.4<\/em><\/li><\/ul><p class=\"code-line\" dir=\"auto\" data-line=\"4\">This section covers advanced configurations and features available on LeonardoXR, divided into general Snapdragon Spaces platform functionality and LeonardoXR proprietary advanced features.<\/p><hr class=\"code-line\" dir=\"auto\" data-line=\"6\" \/><h2>Advanced \u2014 Snapdragon Spaces<\/h2><h3>Adding a New Interaction Profile<\/h3><p>To use an interaction profile not included in the Snapdragon Spaces plugin:<\/p><ol class=\"code-line\" dir=\"auto\" data-line=\"14\"><li class=\"code-line\" dir=\"auto\" data-line=\"14\">Go to\u00a0<strong>Project Settings &gt; XR Plug-in Management &gt; OpenXR (Android) &gt; Interaction Profiles<\/strong>.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"15\">Add the desired profile by clicking the\u00a0<strong>+<\/strong>\u00a0button.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"16\">Configure the corresponding Input Actions in the Input System Asset.<\/li><\/ol><h3 id=\"custom-controller\" class=\"code-line\" dir=\"auto\" data-line=\"18\">Custom Controller<\/h3><p class=\"code-line\" dir=\"auto\" data-line=\"20\">Describes how to build a custom Android controller archive (<code>.aar<\/code>) using the Custom Controller Package \u2014 the Android Studio project included in the developer package.<\/p><h4 class=\"code-line\" dir=\"auto\" data-line=\"22\"><strong>Process Overview<\/strong><\/h4><ol class=\"code-line\" dir=\"auto\" data-line=\"24\"><li class=\"code-line\" dir=\"auto\" data-line=\"24\">Open the Android Studio project included in the Snapdragon Spaces developer package.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"25\">Modify the companion Activity as needed (layout, buttons, additional axes).<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"26\">Build the project to obtain a\u00a0<code>.aar<\/code>\u00a0file.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"27\">Import the\u00a0<code>.aar<\/code>\u00a0into the Unity project as a native Android plugin (in\u00a0<code>Assets\/Plugins\/Android<\/code>).<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"28\">Configure the Android manifest to declare the new Activity.<\/li><\/ol><blockquote class=\"code-line\" dir=\"auto\" data-line=\"30\"><p class=\"code-line\" dir=\"auto\" data-line=\"30\"><strong>NOTE<\/strong>\u00a0Adding a custom controller archive can cause Gradle caching errors. If build errors occur, delete the\u00a0<code>Temp\/gradleOut<\/code> folder and rebuild.<\/p><\/blockquote><h3 id=\"display-refresh-rate\" class=\"code-line\" dir=\"auto\" data-line=\"32\">Display Refresh Rate<\/h3><p class=\"code-line\" dir=\"auto\" data-line=\"34\">The\u00a0<code>XR_EXT_display_refresh_rate<\/code>\u00a0extension allows querying and setting the display refresh rate at runtime.<\/p><h4 class=\"code-line\" dir=\"auto\" data-line=\"36\"><strong>Query Current Refresh Rate<\/strong><\/h4><pre><span style=\"color: #003366;\"><code class=\"code-line language-csharp\" dir=\"auto\" data-line=\"38\"><span class=\"hljs-keyword\">using<\/span> Qualcomm.Snapdragon.Spaces;\n\nBaseRuntimeFeature baseRuntime = OpenXRSettings.Instance.GetFeature&lt;BaseRuntimeFeature&gt;();\n<span class=\"hljs-built_in\">float<\/span> currentHz = baseRuntime.GetDisplayRefreshRate();\nDebug.Log(<span class=\"hljs-string\">$\"Current refresh rate: <span class=\"hljs-subst\">{currentHz}<\/span> Hz\"<\/span>);<\/code><\/span><code class=\"code-line language-csharp\" dir=\"auto\" data-line=\"38\">\n<\/code><\/pre><h4 class=\"code-line\" dir=\"auto\" data-line=\"46\"><strong>Get Supported Refresh Rates<\/strong><\/h4><pre><span style=\"color: #003366;\"><code class=\"code-line language-csharp\" dir=\"auto\" data-line=\"48\"><span class=\"hljs-built_in\">float<\/span>[] supportedRates = baseRuntime.GetSupportedDisplayRefreshRates();\n<span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-built_in\">float<\/span> rate <span class=\"hljs-keyword\">in<\/span> supportedRates)\n    Debug.Log(<span class=\"hljs-string\">$\"Supported: <span class=\"hljs-subst\">{rate}<\/span> Hz\"<\/span>);\n<\/code><\/span><\/pre><h4 class=\"code-line\" dir=\"auto\" data-line=\"54\"><strong>Set Refresh Rate<\/strong><\/h4><pre><span style=\"color: #003366;\"><code class=\"code-line language-csharp\" dir=\"auto\" data-line=\"56\">baseRuntime.RequestDisplayRefreshRate(<span class=\"hljs-number\">90.0f<\/span>);\n<\/code><\/span><\/pre><blockquote class=\"code-line\" dir=\"auto\" data-line=\"60\"><p class=\"code-line\" dir=\"auto\" data-line=\"60\"><strong>NOTE<\/strong>\u00a0The requested refresh rate must be among those returned by\u00a0<code>GetSupportedDisplayRefreshRates()<\/code>. Unsupported values are ignored.<\/p><\/blockquote><h3 id=\"advanced-android-thread-performance\" class=\"code-line\" dir=\"auto\" data-line=\"62\">Advanced Android Thread Performance<\/h3><p class=\"code-line\" dir=\"auto\" data-line=\"64\">The\u00a0<code>SpacesThreadUtility<\/code>\u00a0component improves thread scheduling priority on Android, producing more consistent frame timing.<\/p><h4 class=\"code-line\" dir=\"auto\" data-line=\"66\"><strong>Setup<\/strong><\/h4><p class=\"code-line\" dir=\"auto\" data-line=\"68\">Add the\u00a0<code>SpacesThreadUtility<\/code>\u00a0component to a persistent GameObject in the scene (e.g. the same GameObject hosting the AR Session or XR Origin). No configuration is required \u2014 it activates automatically on initialisation and acts on the main Unity threads.<\/p><h4 class=\"code-line\" dir=\"auto\" data-line=\"70\"><strong>When to Use<\/strong><\/h4><p class=\"code-line\" dir=\"auto\" data-line=\"72\">Recommended for all LeonardoXR applications that exhibit framerate jitter or frame timing variability, especially in scenes with heavy rendering or many active AR subsystems.<\/p><h3 id=\"performance-settings\" class=\"code-line\" dir=\"auto\" data-line=\"74\">Performance Settings<\/h3><p class=\"code-line\" dir=\"auto\" data-line=\"76\">The OpenXR extension\u00a0<code>XR_EXT_performance_settings<\/code>\u00a0exposes performance level hints for CPU and GPU via a new method on\u00a0<code>BaseRuntimeFeature<\/code>.<\/p><table class=\"code-line\" dir=\"auto\" data-line=\"78\"><thead class=\"code-line\" dir=\"auto\" data-line=\"78\"><tr class=\"code-line\" dir=\"auto\" data-line=\"78\"><th>Level<\/th><th>Description<\/th><\/tr><\/thead><tbody class=\"code-line\" dir=\"auto\" data-line=\"80\"><tr class=\"code-line\" dir=\"auto\" data-line=\"80\"><td>PowerSavings<\/td><td>Reduces CPU\/GPU clocks to the minimum necessary. Useful for simple scenes or static UI.<\/td><\/tr><tr class=\"code-line\" dir=\"auto\" data-line=\"81\"><td>SustainedLow<\/td><td>Sustained performance at a low level.<\/td><\/tr><tr class=\"code-line\" dir=\"auto\" data-line=\"82\"><td>SustainedHigh<\/td><td>Sustained high-level performance. Recommended for most AR apps.<\/td><\/tr><tr class=\"code-line\" dir=\"auto\" data-line=\"83\"><td>Boost<\/td><td>Maximum performance for short periods (not sustainably maintained).<\/td><\/tr><\/tbody><\/table><pre><span style=\"color: #003366;\"><code class=\"code-line language-csharp\" dir=\"auto\" data-line=\"85\"><span class=\"hljs-keyword\">using<\/span> Qualcomm.Snapdragon.Spaces;\n<span class=\"hljs-keyword\">using<\/span> UnityEngine.XR.OpenXR;\n\nBaseRuntimeFeature baseRuntime = OpenXRSettings.Instance.GetFeature&lt;BaseRuntimeFeature&gt;();\nbaseRuntime.SetPerformanceLevel(PerformanceDomain.Cpu, PerformanceLevel.SustainedHigh);\nbaseRuntime.SetPerformanceLevel(PerformanceDomain.Gpu, PerformanceLevel.SustainedHigh);\n<\/code><\/span><\/pre><blockquote class=\"code-line\" dir=\"auto\" data-line=\"94\"><p class=\"code-line\" dir=\"auto\" data-line=\"94\"><strong>NOTE<\/strong>\u00a0The\u00a0<code>Boost<\/code>\u00a0level consumes significantly more power and may cause thermal throttling if sustained. Use it only for brief critical operations (e.g. loading a heavy scene).<\/p><\/blockquote><hr class=\"code-line\" dir=\"auto\" data-line=\"96\" \/><h2 id=\"advanced--leonardoxr\" class=\"code-line\" dir=\"auto\" data-line=\"98\">Advanced \u2014 LeonardoXR<\/h2><h3 id=\"qnn-inference-plugin--advanced-guide\" class=\"code-line\" dir=\"auto\" data-line=\"100\">QNN Inference Plugin \u2014 Advanced Guide<\/h3><blockquote class=\"code-line\" dir=\"auto\" data-line=\"102\"><p class=\"code-line\" dir=\"auto\" data-line=\"102\"><strong>DOCUMENTATION IN PROGRESS<\/strong>\u00a0This section will cover advanced usage of the QNN (Qualcomm Neural Network) Inference Plugin on Leonardo XR, including:<\/p><ul class=\"code-line\" dir=\"auto\" data-line=\"103\"><li class=\"code-line\" dir=\"auto\" data-line=\"103\">Model preparation and conversion (ONNX \u2192 QNN format).<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"104\">Loading models at runtime via plugin APIs.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"105\">Running inference on the NPU with input\/output tensor management.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"106\">Memory management and throughput optimisation.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"107\">Debug and performance profiling of inference.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"108\">Use cases: object detection, pose estimation, real-time segmentation.<\/li><\/ul><p class=\"code-line\" dir=\"auto\" data-line=\"110\">Detailed documentation will be available in a future release.<\/p><\/blockquote><h3 id=\"intercept-openxr-function--advanced-guide\" class=\"code-line\" dir=\"auto\" data-line=\"112\">Intercept OpenXR Function \u2014 Advanced Guide<\/h3><blockquote class=\"code-line\" dir=\"auto\" data-line=\"114\"><p class=\"code-line\" dir=\"auto\" data-line=\"114\"><strong>DOCUMENTATION IN PROGRESS<\/strong>\u00a0This section will cover advanced usage of the Intercept OpenXR Function mechanism on Leonardo XR, including:<\/p><ul class=\"code-line\" dir=\"auto\" data-line=\"115\"><li class=\"code-line\" dir=\"auto\" data-line=\"115\">Architecture of the OpenXR interception layer.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"116\">Registering custom handlers for specific OpenXR functions.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"117\">Use cases: rendering pipeline override, custom data injection into the XR layer, low-level OpenXR debugging.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"118\">Safety and stability considerations.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"119\">Interaction with other LeonardoXR SDK components.<\/li><\/ul><p class=\"code-line\" dir=\"auto\" data-line=\"121\">This feature is intended for developers with direct experience of low-level OpenXR APIs. Detailed documentation will be available in a future release.<\/p><\/blockquote>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Advanced Advanced \u2014 LeonardoXR SDK Advanced Version 1.0.2 Device: Youbiquo Leonardo XR Base SDK: Snapdragon Spaces 1.0.4 This section covers advanced configurations and features available on LeonardoXR, divided into general Snapdragon Spaces platform functionality and LeonardoXR proprietary advanced features. Advanced \u2014 Snapdragon Spaces Adding a New Interaction Profile To use an interaction profile not included in the Snapdragon Spaces plugin: Go to\u00a0Project Settings &gt; XR Plug-in Management &gt; OpenXR (Android) &gt; Interaction Profiles. Add the desired profile by clicking the\u00a0+\u00a0button. Configure the corresponding Input Actions in the Input System Asset. Custom Controller Describes how to build a custom Android controller archive (.aar) using the Custom Controller Package \u2014 the Android Studio project included in the developer package. Process Overview Open the Android Studio project included in the Snapdragon Spaces developer package. Modify the companion Activity as needed (layout, buttons, additional axes). Build the project to obtain a\u00a0.aar\u00a0file. Import the\u00a0.aar\u00a0into the Unity project as a native Android plugin (in\u00a0Assets\/Plugins\/Android). Configure the Android manifest to declare the new Activity. NOTE\u00a0Adding a custom controller archive can cause Gradle caching errors. If build errors occur, delete the\u00a0Temp\/gradleOut folder and rebuild. Display Refresh Rate The\u00a0XR_EXT_display_refresh_rate\u00a0extension allows querying and setting the display refresh rate at runtime. Query Current Refresh Rate using Qualcomm.Snapdragon.Spaces; BaseRuntimeFeature baseRuntime = OpenXRSettings.Instance.GetFeature&lt;BaseRuntimeFeature&gt;(); float currentHz = baseRuntime.GetDisplayRefreshRate(); Debug.Log($&#8221;Current refresh rate: {currentHz} Hz&#8221;); Get Supported Refresh Rates float[] supportedRates = baseRuntime.GetSupportedDisplayRefreshRates(); foreach (float rate in supportedRates) Debug.Log($&#8221;Supported: {rate} Hz&#8221;); Set Refresh Rate baseRuntime.RequestDisplayRefreshRate(90.0f); NOTE\u00a0The requested refresh rate must be among those returned by\u00a0GetSupportedDisplayRefreshRates(). Unsupported values are ignored. Advanced Android Thread Performance The\u00a0SpacesThreadUtility\u00a0component improves thread scheduling priority on Android, producing more consistent frame timing. Setup Add the\u00a0SpacesThreadUtility\u00a0component to a persistent GameObject in the scene (e.g. the same GameObject hosting the AR Session or XR Origin). No configuration is required \u2014 it activates automatically on initialisation and acts on the main Unity threads. When to Use Recommended for all LeonardoXR applications that exhibit framerate jitter or frame timing variability, especially in scenes with heavy rendering or many active AR subsystems. Performance Settings The OpenXR extension\u00a0XR_EXT_performance_settings\u00a0exposes performance level hints for CPU and GPU via a new method on\u00a0BaseRuntimeFeature. Level Description PowerSavings Reduces CPU\/GPU clocks to the minimum necessary. Useful for simple scenes or static UI. SustainedLow Sustained performance at a low level. SustainedHigh Sustained high-level performance. Recommended for most AR apps. Boost Maximum performance for short periods (not sustainably maintained). using Qualcomm.Snapdragon.Spaces; using UnityEngine.XR.OpenXR; BaseRuntimeFeature baseRuntime = OpenXRSettings.Instance.GetFeature&lt;BaseRuntimeFeature&gt;(); baseRuntime.SetPerformanceLevel(PerformanceDomain.Cpu, PerformanceLevel.SustainedHigh); baseRuntime.SetPerformanceLevel(PerformanceDomain.Gpu, PerformanceLevel.SustainedHigh); NOTE\u00a0The\u00a0Boost\u00a0level consumes significantly more power and may cause thermal throttling if sustained. Use it only for brief critical operations (e.g. loading a heavy scene). Advanced \u2014 LeonardoXR QNN Inference Plugin \u2014 Advanced Guide DOCUMENTATION IN PROGRESS\u00a0This section will cover advanced usage of the QNN (Qualcomm Neural Network) Inference Plugin on Leonardo XR, including: Model preparation and conversion (ONNX \u2192 QNN format). Loading models at runtime via plugin APIs. Running inference on the NPU with input\/output tensor management. Memory management and throughput optimisation. Debug and performance profiling of inference. Use cases: object detection, pose estimation, real-time segmentation. Detailed documentation will be available in a future release. Intercept OpenXR Function \u2014 Advanced Guide DOCUMENTATION IN PROGRESS\u00a0This section will cover advanced usage of the Intercept OpenXR Function mechanism on Leonardo XR, including: Architecture of the OpenXR interception layer. Registering custom handlers for specific OpenXR functions. Use cases: rendering pipeline override, custom data injection into the XR layer, low-level OpenXR debugging. Safety and stability considerations. Interaction with other LeonardoXR SDK components. This feature is intended for developers with direct experience of low-level OpenXR APIs. Detailed documentation will be available in a future release.<\/p>\n","protected":false},"author":11,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1016","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Advanced - Geckode!<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.youbiquo.eu\/geckode\/en\/advanced\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Advanced - Geckode!\" \/>\n<meta property=\"og:description\" content=\"Advanced Advanced \u2014 LeonardoXR SDK Advanced Version 1.0.2 Device: Youbiquo Leonardo XR Base SDK: Snapdragon Spaces 1.0.4 This section covers advanced configurations and features available on LeonardoXR, divided into general Snapdragon Spaces platform functionality and LeonardoXR proprietary advanced features. Advanced \u2014 Snapdragon Spaces Adding a New Interaction Profile To use an interaction profile not included in the Snapdragon Spaces plugin: Go to\u00a0Project Settings &gt; XR Plug-in Management &gt; OpenXR (Android) &gt; Interaction Profiles. Add the desired profile by clicking the\u00a0+\u00a0button. Configure the corresponding Input Actions in the Input System Asset. Custom Controller Describes how to build a custom Android controller archive (.aar) using the Custom Controller Package \u2014 the Android Studio project included in the developer package. Process Overview Open the Android Studio project included in the Snapdragon Spaces developer package. Modify the companion Activity as needed (layout, buttons, additional axes). Build the project to obtain a\u00a0.aar\u00a0file. Import the\u00a0.aar\u00a0into the Unity project as a native Android plugin (in\u00a0Assets\/Plugins\/Android). Configure the Android manifest to declare the new Activity. NOTE\u00a0Adding a custom controller archive can cause Gradle caching errors. If build errors occur, delete the\u00a0Temp\/gradleOut folder and rebuild. Display Refresh Rate The\u00a0XR_EXT_display_refresh_rate\u00a0extension allows querying and setting the display refresh rate at runtime. Query Current Refresh Rate using Qualcomm.Snapdragon.Spaces; BaseRuntimeFeature baseRuntime = OpenXRSettings.Instance.GetFeature&lt;BaseRuntimeFeature&gt;(); float currentHz = baseRuntime.GetDisplayRefreshRate(); Debug.Log($&quot;Current refresh rate: {currentHz} Hz&quot;); Get Supported Refresh Rates float[] supportedRates = baseRuntime.GetSupportedDisplayRefreshRates(); foreach (float rate in supportedRates) Debug.Log($&quot;Supported: {rate} Hz&quot;); Set Refresh Rate baseRuntime.RequestDisplayRefreshRate(90.0f); NOTE\u00a0The requested refresh rate must be among those returned by\u00a0GetSupportedDisplayRefreshRates(). Unsupported values are ignored. Advanced Android Thread Performance The\u00a0SpacesThreadUtility\u00a0component improves thread scheduling priority on Android, producing more consistent frame timing. Setup Add the\u00a0SpacesThreadUtility\u00a0component to a persistent GameObject in the scene (e.g. the same GameObject hosting the AR Session or XR Origin). No configuration is required \u2014 it activates automatically on initialisation and acts on the main Unity threads. When to Use Recommended for all LeonardoXR applications that exhibit framerate jitter or frame timing variability, especially in scenes with heavy rendering or many active AR subsystems. Performance Settings The OpenXR extension\u00a0XR_EXT_performance_settings\u00a0exposes performance level hints for CPU and GPU via a new method on\u00a0BaseRuntimeFeature. Level Description PowerSavings Reduces CPU\/GPU clocks to the minimum necessary. Useful for simple scenes or static UI. SustainedLow Sustained performance at a low level. SustainedHigh Sustained high-level performance. Recommended for most AR apps. Boost Maximum performance for short periods (not sustainably maintained). using Qualcomm.Snapdragon.Spaces; using UnityEngine.XR.OpenXR; BaseRuntimeFeature baseRuntime = OpenXRSettings.Instance.GetFeature&lt;BaseRuntimeFeature&gt;(); baseRuntime.SetPerformanceLevel(PerformanceDomain.Cpu, PerformanceLevel.SustainedHigh); baseRuntime.SetPerformanceLevel(PerformanceDomain.Gpu, PerformanceLevel.SustainedHigh); NOTE\u00a0The\u00a0Boost\u00a0level consumes significantly more power and may cause thermal throttling if sustained. Use it only for brief critical operations (e.g. loading a heavy scene). Advanced \u2014 LeonardoXR QNN Inference Plugin \u2014 Advanced Guide DOCUMENTATION IN PROGRESS\u00a0This section will cover advanced usage of the QNN (Qualcomm Neural Network) Inference Plugin on Leonardo XR, including: Model preparation and conversion (ONNX \u2192 QNN format). Loading models at runtime via plugin APIs. Running inference on the NPU with input\/output tensor management. Memory management and throughput optimisation. Debug and performance profiling of inference. Use cases: object detection, pose estimation, real-time segmentation. Detailed documentation will be available in a future release. Intercept OpenXR Function \u2014 Advanced Guide DOCUMENTATION IN PROGRESS\u00a0This section will cover advanced usage of the Intercept OpenXR Function mechanism on Leonardo XR, including: Architecture of the OpenXR interception layer. Registering custom handlers for specific OpenXR functions. Use cases: rendering pipeline override, custom data injection into the XR layer, low-level OpenXR debugging. Safety and stability considerations. Interaction with other LeonardoXR SDK components. This feature is intended for developers with direct experience of low-level OpenXR APIs. Detailed documentation will be available in a future release.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.youbiquo.eu\/geckode\/en\/advanced\/\" \/>\n<meta property=\"og:site_name\" content=\"Geckode!\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-09T11:31:05+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.youbiquo.eu\/geckode\/en\/advanced\/\",\"url\":\"https:\/\/www.youbiquo.eu\/geckode\/en\/advanced\/\",\"name\":\"Advanced - Geckode!\",\"isPartOf\":{\"@id\":\"https:\/\/www.youbiquo.eu\/geckode\/#website\"},\"datePublished\":\"2026-04-09T10:35:57+00:00\",\"dateModified\":\"2026-04-09T11:31:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.youbiquo.eu\/geckode\/en\/advanced\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.youbiquo.eu\/geckode\/en\/advanced\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.youbiquo.eu\/geckode\/en\/advanced\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.youbiquo.eu\/geckode\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Advanced\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.youbiquo.eu\/geckode\/#website\",\"url\":\"https:\/\/www.youbiquo.eu\/geckode\/\",\"name\":\"Geckode!\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.youbiquo.eu\/geckode\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.youbiquo.eu\/geckode\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.youbiquo.eu\/geckode\/#organization\",\"name\":\"Geckode!\",\"url\":\"https:\/\/www.youbiquo.eu\/geckode\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.youbiquo.eu\/geckode\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.youbiquo.eu\/geckode\/wp-content\/uploads\/sites\/7\/2026\/02\/Gemini_Generated_Image_ns1dvvns1dvvns1d-e1774014413830.png\",\"contentUrl\":\"https:\/\/www.youbiquo.eu\/geckode\/wp-content\/uploads\/sites\/7\/2026\/02\/Gemini_Generated_Image_ns1dvvns1dvvns1d-e1774014413830.png\",\"width\":778,\"height\":778,\"caption\":\"Geckode!\"},\"image\":{\"@id\":\"https:\/\/www.youbiquo.eu\/geckode\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Advanced - Geckode!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.youbiquo.eu\/geckode\/en\/advanced\/","og_locale":"en_US","og_type":"article","og_title":"Advanced - Geckode!","og_description":"Advanced Advanced \u2014 LeonardoXR SDK Advanced Version 1.0.2 Device: Youbiquo Leonardo XR Base SDK: Snapdragon Spaces 1.0.4 This section covers advanced configurations and features available on LeonardoXR, divided into general Snapdragon Spaces platform functionality and LeonardoXR proprietary advanced features. Advanced \u2014 Snapdragon Spaces Adding a New Interaction Profile To use an interaction profile not included in the Snapdragon Spaces plugin: Go to\u00a0Project Settings &gt; XR Plug-in Management &gt; OpenXR (Android) &gt; Interaction Profiles. Add the desired profile by clicking the\u00a0+\u00a0button. Configure the corresponding Input Actions in the Input System Asset. Custom Controller Describes how to build a custom Android controller archive (.aar) using the Custom Controller Package \u2014 the Android Studio project included in the developer package. Process Overview Open the Android Studio project included in the Snapdragon Spaces developer package. Modify the companion Activity as needed (layout, buttons, additional axes). Build the project to obtain a\u00a0.aar\u00a0file. Import the\u00a0.aar\u00a0into the Unity project as a native Android plugin (in\u00a0Assets\/Plugins\/Android). Configure the Android manifest to declare the new Activity. NOTE\u00a0Adding a custom controller archive can cause Gradle caching errors. If build errors occur, delete the\u00a0Temp\/gradleOut folder and rebuild. Display Refresh Rate The\u00a0XR_EXT_display_refresh_rate\u00a0extension allows querying and setting the display refresh rate at runtime. Query Current Refresh Rate using Qualcomm.Snapdragon.Spaces; BaseRuntimeFeature baseRuntime = OpenXRSettings.Instance.GetFeature&lt;BaseRuntimeFeature&gt;(); float currentHz = baseRuntime.GetDisplayRefreshRate(); Debug.Log($\"Current refresh rate: {currentHz} Hz\"); Get Supported Refresh Rates float[] supportedRates = baseRuntime.GetSupportedDisplayRefreshRates(); foreach (float rate in supportedRates) Debug.Log($\"Supported: {rate} Hz\"); Set Refresh Rate baseRuntime.RequestDisplayRefreshRate(90.0f); NOTE\u00a0The requested refresh rate must be among those returned by\u00a0GetSupportedDisplayRefreshRates(). Unsupported values are ignored. Advanced Android Thread Performance The\u00a0SpacesThreadUtility\u00a0component improves thread scheduling priority on Android, producing more consistent frame timing. Setup Add the\u00a0SpacesThreadUtility\u00a0component to a persistent GameObject in the scene (e.g. the same GameObject hosting the AR Session or XR Origin). No configuration is required \u2014 it activates automatically on initialisation and acts on the main Unity threads. When to Use Recommended for all LeonardoXR applications that exhibit framerate jitter or frame timing variability, especially in scenes with heavy rendering or many active AR subsystems. Performance Settings The OpenXR extension\u00a0XR_EXT_performance_settings\u00a0exposes performance level hints for CPU and GPU via a new method on\u00a0BaseRuntimeFeature. Level Description PowerSavings Reduces CPU\/GPU clocks to the minimum necessary. Useful for simple scenes or static UI. SustainedLow Sustained performance at a low level. SustainedHigh Sustained high-level performance. Recommended for most AR apps. Boost Maximum performance for short periods (not sustainably maintained). using Qualcomm.Snapdragon.Spaces; using UnityEngine.XR.OpenXR; BaseRuntimeFeature baseRuntime = OpenXRSettings.Instance.GetFeature&lt;BaseRuntimeFeature&gt;(); baseRuntime.SetPerformanceLevel(PerformanceDomain.Cpu, PerformanceLevel.SustainedHigh); baseRuntime.SetPerformanceLevel(PerformanceDomain.Gpu, PerformanceLevel.SustainedHigh); NOTE\u00a0The\u00a0Boost\u00a0level consumes significantly more power and may cause thermal throttling if sustained. Use it only for brief critical operations (e.g. loading a heavy scene). Advanced \u2014 LeonardoXR QNN Inference Plugin \u2014 Advanced Guide DOCUMENTATION IN PROGRESS\u00a0This section will cover advanced usage of the QNN (Qualcomm Neural Network) Inference Plugin on Leonardo XR, including: Model preparation and conversion (ONNX \u2192 QNN format). Loading models at runtime via plugin APIs. Running inference on the NPU with input\/output tensor management. Memory management and throughput optimisation. Debug and performance profiling of inference. Use cases: object detection, pose estimation, real-time segmentation. Detailed documentation will be available in a future release. Intercept OpenXR Function \u2014 Advanced Guide DOCUMENTATION IN PROGRESS\u00a0This section will cover advanced usage of the Intercept OpenXR Function mechanism on Leonardo XR, including: Architecture of the OpenXR interception layer. Registering custom handlers for specific OpenXR functions. Use cases: rendering pipeline override, custom data injection into the XR layer, low-level OpenXR debugging. Safety and stability considerations. Interaction with other LeonardoXR SDK components. This feature is intended for developers with direct experience of low-level OpenXR APIs. Detailed documentation will be available in a future release.","og_url":"https:\/\/www.youbiquo.eu\/geckode\/en\/advanced\/","og_site_name":"Geckode!","article_modified_time":"2026-04-09T11:31:05+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.youbiquo.eu\/geckode\/en\/advanced\/","url":"https:\/\/www.youbiquo.eu\/geckode\/en\/advanced\/","name":"Advanced - Geckode!","isPartOf":{"@id":"https:\/\/www.youbiquo.eu\/geckode\/#website"},"datePublished":"2026-04-09T10:35:57+00:00","dateModified":"2026-04-09T11:31:05+00:00","breadcrumb":{"@id":"https:\/\/www.youbiquo.eu\/geckode\/en\/advanced\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.youbiquo.eu\/geckode\/en\/advanced\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.youbiquo.eu\/geckode\/en\/advanced\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.youbiquo.eu\/geckode\/"},{"@type":"ListItem","position":2,"name":"Advanced"}]},{"@type":"WebSite","@id":"https:\/\/www.youbiquo.eu\/geckode\/#website","url":"https:\/\/www.youbiquo.eu\/geckode\/","name":"Geckode!","description":"","publisher":{"@id":"https:\/\/www.youbiquo.eu\/geckode\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.youbiquo.eu\/geckode\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.youbiquo.eu\/geckode\/#organization","name":"Geckode!","url":"https:\/\/www.youbiquo.eu\/geckode\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.youbiquo.eu\/geckode\/#\/schema\/logo\/image\/","url":"https:\/\/www.youbiquo.eu\/geckode\/wp-content\/uploads\/sites\/7\/2026\/02\/Gemini_Generated_Image_ns1dvvns1dvvns1d-e1774014413830.png","contentUrl":"https:\/\/www.youbiquo.eu\/geckode\/wp-content\/uploads\/sites\/7\/2026\/02\/Gemini_Generated_Image_ns1dvvns1dvvns1d-e1774014413830.png","width":778,"height":778,"caption":"Geckode!"},"image":{"@id":"https:\/\/www.youbiquo.eu\/geckode\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.youbiquo.eu\/geckode\/wp-json\/wp\/v2\/pages\/1016","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.youbiquo.eu\/geckode\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.youbiquo.eu\/geckode\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.youbiquo.eu\/geckode\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/www.youbiquo.eu\/geckode\/wp-json\/wp\/v2\/comments?post=1016"}],"version-history":[{"count":30,"href":"https:\/\/www.youbiquo.eu\/geckode\/wp-json\/wp\/v2\/pages\/1016\/revisions"}],"predecessor-version":[{"id":1084,"href":"https:\/\/www.youbiquo.eu\/geckode\/wp-json\/wp\/v2\/pages\/1016\/revisions\/1084"}],"wp:attachment":[{"href":"https:\/\/www.youbiquo.eu\/geckode\/wp-json\/wp\/v2\/media?parent=1016"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}