{"id":719,"date":"2026-10-09T15:58:20","date_gmt":"2026-10-09T13:58:20","guid":{"rendered":"https:\/\/www.youbiquo.eu\/leonardoxr\/?page_id=719"},"modified":"2026-10-09T16:01:24","modified_gmt":"2026-10-09T14:01:24","slug":"advanced-leonardoxr-sdk","status":"publish","type":"page","link":"https:\/\/www.youbiquo.eu\/leonardoxr\/en\/leonardo-xr-manuali-duso\/advanced-leonardoxr-sdk\/","title":{"rendered":"Advanced \u2014 LeonardoXR SDK"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"719\" class=\"elementor elementor-719\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-85281d7 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=\"85281d7\" 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-d04b0b7 elementor-widget elementor-widget-heading\" data-id=\"d04b0b7\" 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 \u2014 LeonardoXR SDK\n<\/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-541389f 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=\"541389f\" 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-df9a2de 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=\"df9a2de\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-69e47bc elementor-widget__width-initial elementor-toc--minimized-on-tablet elementor-widget elementor-widget-table-of-contents\" data-id=\"69e47bc\" 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__69e47bc\" 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__69e47bc\" 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__69e47bc\" 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-677117a 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=\"677117a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1a4d842 elementor-widget elementor-widget-text-editor\" data-id=\"1a4d842\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h2 id=\"advanced--leonardoxr-sdk\" class=\"code-line code-active-line\" dir=\"auto\" data-line=\"0\">Advanced \u2014 LeonardoXR SDK<\/h2>\n<blockquote class=\"code-line\" dir=\"auto\" data-line=\"2\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"2\"><strong>Version:<\/strong> 1.0.2\n<strong>Target Device:<\/strong> Youbiquo Leonardo XR\n<strong>Base SDK:<\/strong> Snapdragon Spaces 1.0.4<\/p>\n<\/blockquote>\n<p class=\"code-line\" dir=\"auto\" data-line=\"6\">This section covers advanced configurations and features available on LeonardoXR, divided into general Snapdragon Spaces platform features and proprietary advanced features of Leonardo XR.<\/p>\n\n\n<hr class=\"code-line\" dir=\"auto\" data-line=\"8\" \/>\n\n<h3 id=\"funzionalit%C3%A0-avanzate--snapdragon-spaces\" class=\"code-line\" dir=\"auto\" data-line=\"10\">Advanced Features \u2014 Snapdragon Spaces<\/h3>\n<h4 id=\"aggiungere-un-nuovo-interaction-profile\" class=\"code-line\" dir=\"auto\" data-line=\"12\">Adding a New Interaction Profile<\/h4>\n<p class=\"code-line\" dir=\"auto\" data-line=\"14\">To use an interaction profile not included in the Snapdragon Spaces plugin:<\/p>\n\n<ol class=\"code-line\" dir=\"auto\" data-line=\"16\">\n \t<li class=\"code-line\" dir=\"auto\" data-line=\"16\">Go to <strong>Project Settings &gt; XR Plug-in Management &gt; OpenXR (Android tab) &gt; Interaction Profiles<\/strong>.<\/li>\n \t<li class=\"code-line\" dir=\"auto\" data-line=\"17\">Add the desired profile by clicking the <strong>+<\/strong> button.<\/li>\n \t<li class=\"code-line\" dir=\"auto\" data-line=\"18\">Configure the corresponding Input Actions in the Input System Asset.<\/li>\n<\/ol>\n<p class=\"code-line\" dir=\"auto\" data-line=\"20\">See also <a href=\"https:\/\/file+.vscode-resource.vscode-cdn.net\/Users\/eleonora\/Downloads\/SDKGuide\/06-interaction-package-guides.md\" data-href=\"06-interaction-package-guides.md\">Interaction Package Guides<\/a> for the configuration of recommended profiles on LeonardoXR.<\/p>\n\n\n<hr class=\"code-line\" dir=\"auto\" data-line=\"22\" \/>\n\n<h4 id=\"custom-controller\" class=\"code-line\" dir=\"auto\" data-line=\"24\">Custom Controller<\/h4>\n<p class=\"code-line\" dir=\"auto\" data-line=\"26\">Describes how to build a custom Android controller archive (.aar) using the <strong>Custom Controller Package<\/strong> \u2014 the Android Studio project included in the developer package.<\/p>\n\n<h5 id=\"panoramica-del-processo\" class=\"code-line\" dir=\"auto\" data-line=\"28\">Process Overview<\/h5>\n<ol class=\"code-line\" dir=\"auto\" data-line=\"30\">\n \t<li class=\"code-line\" dir=\"auto\" data-line=\"30\">Open the Android Studio project included in the Snapdragon Spaces developer package.<\/li>\n \t<li class=\"code-line\" dir=\"auto\" data-line=\"31\">Modify the companion Activity as needed (layout, buttons, additional axes).<\/li>\n \t<li class=\"code-line\" dir=\"auto\" data-line=\"32\">Build the project to generate a <code>.aar<\/code> file.<\/li>\n \t<li class=\"code-line\" dir=\"auto\" data-line=\"33\">Import the <code>.aar<\/code> file into the Unity project as a native Android plugin (into the <code>Assets\/Plugins\/Android<\/code> folder).<\/li>\n \t<li class=\"code-line\" dir=\"auto\" data-line=\"34\">Configure the Android manifest to declare the new Activity.<\/li>\n<\/ol>\n<blockquote class=\"code-line\" dir=\"auto\" data-line=\"36\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"36\"><strong>Note:<\/strong> Adding a custom controller archive may cause Gradle caching errors. If build errors occur, delete the <code>Temp\/gradleOut<\/code> folder and rebuild.<\/p>\n<\/blockquote>\n\n<hr class=\"code-line\" dir=\"auto\" data-line=\"38\" \/>\n\n<h4 id=\"display-refresh-rate\" class=\"code-line\" dir=\"auto\" data-line=\"40\">Display Refresh Rate<\/h4>\n<p class=\"code-line\" dir=\"auto\" data-line=\"42\">The <code>XR_EXT_display_refresh_rate<\/code> extension allows querying and setting the display refresh rate at runtime.<\/p>\n\n<h5 id=\"query-del-refresh-rate-corrente\" class=\"code-line\" dir=\"auto\" data-line=\"44\">Querying the Current Refresh Rate<\/h5>\n<pre><code class=\"code-line language-csharp\" dir=\"auto\" data-line=\"46\"><span class=\"hljs-keyword\">using<\/span> Qualcomm.Snapdragon.Spaces;\n\nBaseRuntimeFeature baseRuntime = OpenXRSettings.Instance\n    .GetFeature&lt;BaseRuntimeFeature&gt;();\n\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>);\n<\/code><\/pre>\n<h5 id=\"ottenere-i-refresh-rate-supportati\" class=\"code-line\" dir=\"auto\" data-line=\"56\">Getting Supported Refresh Rates<\/h5>\n<pre><code class=\"code-line language-csharp\" dir=\"auto\" data-line=\"58\"><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><\/pre>\n<h5 id=\"impostare-il-refresh-rate\" class=\"code-line\" dir=\"auto\" data-line=\"64\">Setting the Refresh Rate<\/h5>\n<pre><code class=\"code-line language-csharp\" dir=\"auto\" data-line=\"66\">baseRuntime.RequestDisplayRefreshRate(<span class=\"hljs-number\">90.0f<\/span>);\n<\/code><\/pre>\n<blockquote class=\"code-line\" dir=\"auto\" data-line=\"70\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"70\"><strong>Note:<\/strong> The required refresh rate must be one of those returned by <code>GetSupportedDisplayRefreshRates()<\/code>. Unsupported values are ignored.<\/p>\n<\/blockquote>\n\n<hr class=\"code-line\" dir=\"auto\" data-line=\"72\" \/>\n\n<h4 id=\"advanced-android-thread-performance\" class=\"code-line\" dir=\"auto\" data-line=\"74\">Advanced Android Thread Performance<\/h4>\n<p class=\"code-line\" dir=\"auto\" data-line=\"76\">The <code>SpacesThreadUtility<\/code> component improves thread scheduling priority on Android, resulting in more consistent frame timing.<\/p>\n\n<h5 id=\"setup\" class=\"code-line\" dir=\"auto\" data-line=\"78\">Setup<\/h5>\n<p class=\"code-line\" dir=\"auto\" data-line=\"80\">Add the <code>SpacesThreadUtility<\/code> component to a persistent GameObject in the scene (for example, the same GameObject that hosts the AR Session or the XR Origin).<\/p>\n\n<pre><code class=\"code-line language-csharp\" dir=\"auto\" data-line=\"82\"><span class=\"hljs-comment\">\/\/ SpacesThreadUtility requires no configuration:<\/span>\n<span class=\"hljs-comment\">\/\/ simply add it as a component and it will activate automatically.<\/span>\n<span class=\"hljs-comment\">\/\/ It affects the main Unity threads during initialization.<\/span>\n<\/code><\/pre>\n<h5 id=\"quando-usarlo\" class=\"code-line\" dir=\"auto\" data-line=\"88\">When to Use It<\/h5>\n<p class=\"code-line\" dir=\"auto\" data-line=\"90\">The use of <code>SpacesThreadUtility<\/code> is recommended in all LeonardoXR applications that exhibit framerate jitter or frame timing variability, particularly in scenes with heavy rendering or multiple active AR subsystems.<\/p>\n\n<hr class=\"code-line\" dir=\"auto\" data-line=\"92\" \/>\n\n<h4 id=\"performance-settings\" class=\"code-line\" dir=\"auto\" data-line=\"94\">Performance Settings<\/h4>\n<p class=\"code-line\" dir=\"auto\" data-line=\"96\">The <code>XR_EXT_performance_settings<\/code> OpenXR extension exposes CPU and GPU performance-level hints via a new method in <code>BaseRuntimeFeature<\/code>.<\/p>\n<h5 id=\"livelli-disponibili\" class=\"code-line\" dir=\"auto\" data-line=\"98\">Available Performance Levels<\/h5>\n<p class=\"code-line\" dir=\"auto\" data-line=\"100\">Performance levels range from <code>PowerSavings<\/code> (maximum power saving) to <code>Boost<\/code> (maximum performance):<\/p>\n\n<table class=\"code-line\" dir=\"auto\" data-line=\"102\">\n<thead class=\"code-line\" dir=\"auto\" data-line=\"102\">\n<tr class=\"code-line\" dir=\"auto\" data-line=\"102\">\n<th>Level<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"code-line\" dir=\"auto\" data-line=\"104\">\n<tr class=\"code-line\" dir=\"auto\" data-line=\"104\">\n<td><code>PowerSavings<\/code><\/td>\n<td>Reduces CPU\/GPU clocks to the minimum necessary. Useful for simple scenes or static UIs.<\/td>\n<\/tr>\n<tr class=\"code-line\" dir=\"auto\" data-line=\"105\">\n<td><code>SustainedLow<\/code><\/td>\n<td>Sustained performance at a low level.<\/td>\n<\/tr>\n<tr class=\"code-line\" dir=\"auto\" data-line=\"106\">\n<td><code>SustainedHigh<\/code><\/td>\n<td>Sustained performance at a high level. Recommended for most AR applications.<\/td>\n<\/tr>\n<tr class=\"code-line\" dir=\"auto\" data-line=\"107\">\n<td><code>Boost<\/code><\/td>\n<td>Maximum performance for short periods (not sustainable long-term).<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h5 id=\"utilizzo\" class=\"code-line\" dir=\"auto\" data-line=\"109\">Usage<\/h5>\n<pre><code class=\"code-line language-csharp\" dir=\"auto\" data-line=\"111\"><span class=\"hljs-keyword\">using<\/span> Qualcomm.Snapdragon.Spaces;\n<span class=\"hljs-keyword\">using<\/span> UnityEngine.XR.OpenXR;\n\nBaseRuntimeFeature baseRuntime = OpenXRSettings.Instance\n    .GetFeature&lt;BaseRuntimeFeature&gt;();\n\n<span class=\"hljs-comment\">\/\/ Set CPU and GPU to SustainedHigh<\/span>\nbaseRuntime.SetPerformanceLevel(\n    PerformanceDomain.Cpu,\n    PerformanceLevel.SustainedHigh);\n\nbaseRuntime.SetPerformanceLevel(\n    PerformanceDomain.Gpu,\n    PerformanceLevel.SustainedHigh);\n<\/code><\/pre>\n<blockquote class=\"code-line\" dir=\"auto\" data-line=\"128\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"128\"><strong>Note:<\/strong> The Boost level consumes significantly more power and may cause thermal throttling if sustained for long periods. Use it only for critical, short-duration operations (e.g., loading a heavy scene).<\/p>\n<\/blockquote>\n\n<hr class=\"code-line\" dir=\"auto\" data-line=\"130\" \/>\n\n\n\n<hr class=\"code-line\" dir=\"auto\" data-line=\"132\" \/>\n\n<h3 id=\"funzionalit%C3%A0-avanzate--leonardoxr\" class=\"code-line\" dir=\"auto\" data-line=\"134\">Advanced Features \u2014 LeonardoXR<\/h3>\n<h4 id=\"qnn-inference-plugin--guida-avanzata\" class=\"code-line\" dir=\"auto\" data-line=\"136\">QNN Inference Plugin \u2014 Advanced Guide<\/h4>\n<blockquote class=\"code-line\" dir=\"auto\" data-line=\"138\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"138\"><strong>\u26a0\ufe0f Documentation under preparation.<\/strong><\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"140\">This section will cover advanced usage of the <strong>QNN (Qualcomm Neural Network) Inference Plugin<\/strong> on Leonardo XR, including:<\/p>\n\n<ul class=\"code-line\" dir=\"auto\" data-line=\"142\">\n \t<li class=\"code-line\" dir=\"auto\" data-line=\"142\">Model preparation and conversion (ONNX \u2192 QNN format).<\/li>\n \t<li class=\"code-line\" dir=\"auto\" data-line=\"143\">Runtime model loading via plugin APIs.<\/li>\n \t<li class=\"code-line\" dir=\"auto\" data-line=\"144\">NPU inference execution with input\/output tensor management.<\/li>\n \t<li class=\"code-line\" dir=\"auto\" data-line=\"145\">Memory management and throughput optimization.<\/li>\n \t<li class=\"code-line\" dir=\"auto\" data-line=\"146\">Inference performance debugging and profiling.<\/li>\n \t<li class=\"code-line\" dir=\"auto\" data-line=\"147\">Use cases: object detection, pose estimation, real-time segmentation.<\/li>\n<\/ul>\n<p class=\"code-line\" dir=\"auto\" data-line=\"149\">Detailed documentation will be available in a future release.<\/p>\n<\/blockquote>\n\n<hr class=\"code-line\" dir=\"auto\" data-line=\"151\" \/>\n\n<h4 id=\"intercept-openxr-function--guida-avanzata\" class=\"code-line\" dir=\"auto\" data-line=\"153\">Intercept OpenXR Function \u2014 Advanced Guide<\/h4>\n<blockquote class=\"code-line\" dir=\"auto\" data-line=\"155\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"155\"><strong>\u26a0\ufe0f Documentation under preparation.<\/strong><\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"157\">This section will cover advanced usage of the <strong>Intercept OpenXR Function<\/strong> mechanism on Leonardo XR, including:<\/p><ul class=\"code-line\" dir=\"auto\" data-line=\"159\">\n \t<li class=\"code-line\" dir=\"auto\" data-line=\"159\">OpenXR interception layer architecture.<\/li>\n \t<li class=\"code-line\" dir=\"auto\" data-line=\"160\">Registration of custom handlers for specific OpenXR functions.<\/li>\n \t<li class=\"code-line\" dir=\"auto\" data-line=\"161\">Use cases: rendering pipeline override, injection of custom data into the XR layer, low-level debugging of OpenXR behavior.<\/li>\n \t<li class=\"code-line\" dir=\"auto\" data-line=\"162\">Security and stability considerations.<\/li>\n \t<li class=\"code-line\" dir=\"auto\" data-line=\"163\">Interaction with other components of the LeonardoXR SDK.<\/li>\n<\/ul>\n<p class=\"code-line\" dir=\"auto\" data-line=\"165\">This feature is intended for developers with direct experience in low-level OpenXR APIs. Detailed documentation will be available in a future release.<\/p>\n<\/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 \u2014 LeonardoXR SDK Advanced \u2014 LeonardoXR SDK Advanced \u2014 LeonardoXR SDK Version: 1.0.2 Target 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 features and proprietary advanced features of Leonardo XR. Advanced Features \u2014 Snapdragon Spaces Adding a New Interaction Profile To use an interaction profile not included in the Snapdragon Spaces plugin: Go to Project Settings &gt; XR Plug-in Management &gt; OpenXR (Android tab) &gt; Interaction Profiles. Add the desired profile by clicking the + button. Configure the corresponding Input Actions in the Input System Asset. See also Interaction Package Guides for the configuration of recommended profiles on LeonardoXR. 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 generate a .aar file. Import the .aar file into the Unity project as a native Android plugin (into the Assets\/Plugins\/Android folder). Configure the Android manifest to declare the new Activity. Note: Adding a custom controller archive may cause Gradle caching errors. If build errors occur, delete the Temp\/gradleOut folder and rebuild. Display Refresh Rate The XR_EXT_display_refresh_rate extension allows querying and setting the display refresh rate at runtime. Querying the 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;); Getting Supported Refresh Rates float[] supportedRates = baseRuntime.GetSupportedDisplayRefreshRates(); foreach (float rate in supportedRates) Debug.Log($&#8221;Supported: {rate} Hz&#8221;); Setting the Refresh Rate baseRuntime.RequestDisplayRefreshRate(90.0f); Note: The required refresh rate must be one of those returned by GetSupportedDisplayRefreshRates(). Unsupported values are ignored. Advanced Android Thread Performance The SpacesThreadUtility component improves thread scheduling priority on Android, resulting in more consistent frame timing. Setup Add the SpacesThreadUtility component to a persistent GameObject in the scene (for example, the same GameObject that hosts the AR Session or the XR Origin). \/\/ SpacesThreadUtility requires no configuration: \/\/ simply add it as a component and it will activate automatically. \/\/ It affects the main Unity threads during initialization. When to Use It The use of SpacesThreadUtility is recommended in all LeonardoXR applications that exhibit framerate jitter or frame timing variability, particularly in scenes with heavy rendering or multiple active AR subsystems. Performance Settings The XR_EXT_performance_settings OpenXR extension exposes CPU and GPU performance-level hints via a new method in BaseRuntimeFeature. Available Performance Levels Performance levels range from PowerSavings (maximum power saving) to Boost (maximum performance): Level Description PowerSavings Reduces CPU\/GPU clocks to the minimum necessary. Useful for simple scenes or static UIs. SustainedLow Sustained performance at a low level. SustainedHigh Sustained performance at a high level. Recommended for most AR applications. Boost Maximum performance for short periods (not sustainable long-term). Usage using Qualcomm.Snapdragon.Spaces; using UnityEngine.XR.OpenXR; BaseRuntimeFeature baseRuntime = OpenXRSettings.Instance .GetFeature&lt;BaseRuntimeFeature&gt;(); \/\/ Set CPU and GPU to SustainedHigh baseRuntime.SetPerformanceLevel( PerformanceDomain.Cpu, PerformanceLevel.SustainedHigh); baseRuntime.SetPerformanceLevel( PerformanceDomain.Gpu, PerformanceLevel.SustainedHigh); Note: The Boost level consumes significantly more power and may cause thermal throttling if sustained for long periods. Use it only for critical, short-duration operations (e.g., loading a heavy scene). Advanced Features \u2014 LeonardoXR QNN Inference Plugin \u2014 Advanced Guide \u26a0\ufe0f Documentation under preparation. This 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). Runtime model loading via plugin APIs. NPU inference execution with input\/output tensor management. Memory management and throughput optimization. Inference performance debugging and profiling. Use cases: object detection, pose estimation, real-time segmentation. Detailed documentation will be available in a future release. Intercept OpenXR Function \u2014 Advanced Guide \u26a0\ufe0f Documentation under preparation. This section will cover advanced usage of the Intercept OpenXR Function mechanism on Leonardo XR, including: OpenXR interception layer architecture. Registration of custom handlers for specific OpenXR functions. Use cases: rendering pipeline override, injection of custom data into the XR layer, low-level debugging of OpenXR behavior. Security and stability considerations. Interaction with other components of the LeonardoXR SDK. This feature is intended for developers with direct experience in low-level OpenXR APIs. Detailed documentation will be available in a future release.<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":614,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-719","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/pages\/719","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/comments?post=719"}],"version-history":[{"count":4,"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/pages\/719\/revisions"}],"predecessor-version":[{"id":723,"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/pages\/719\/revisions\/723"}],"up":[{"embeddable":true,"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/pages\/614"}],"wp:attachment":[{"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/media?parent=719"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}