├── .clang-format ├── .cmake-format.py ├── .github └── workflows │ ├── build-android-arch.yml │ ├── build-android.yml │ ├── build-common-archs.yml │ ├── build-eoc-archs.yml │ ├── build-host-linux.yml │ ├── build-host-windows.yml │ ├── build-site.yml │ └── gradle-wrapper-validation.yml ├── .gitignore ├── .reuse └── dep5 ├── BUILD.md ├── CMakeLists.txt ├── Chapter1 ├── .gitignore ├── CMakeLists.txt ├── app │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── res │ │ ├── drawable-v24 │ │ └── ic_launcher_foreground.xml │ │ ├── drawable │ │ └── ic_launcher_background.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ └── values │ │ └── strings.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── main.cpp └── settings.gradle ├── Chapter2 ├── .gitignore ├── CMakeLists.txt ├── app │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── res │ │ ├── drawable-v24 │ │ └── ic_launcher_foreground.xml │ │ ├── drawable │ │ └── ic_launcher_background.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ └── values │ │ └── strings.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── main.cpp └── settings.gradle ├── Chapter3 ├── .gitignore ├── CMakeLists.txt ├── app │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ └── shaders │ │ │ └── .keep │ │ └── res │ │ ├── drawable-v24 │ │ └── ic_launcher_foreground.xml │ │ ├── drawable │ │ └── ic_launcher_background.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ └── values │ │ └── strings.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── main.cpp └── settings.gradle ├── Chapter4 ├── .gitignore ├── CMakeLists.txt ├── app │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ └── shaders │ │ │ └── .keep │ │ └── res │ │ ├── drawable-v24 │ │ └── ic_launcher_foreground.xml │ │ ├── drawable │ │ └── ic_launcher_background.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ └── values │ │ └── strings.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── main.cpp └── settings.gradle ├── Chapter5 ├── .gitignore ├── CMakeLists.txt ├── app │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ └── shaders │ │ │ └── .keep │ │ └── res │ │ ├── drawable-v24 │ │ └── ic_launcher_foreground.xml │ │ ├── drawable │ │ └── ic_launcher_background.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ └── values │ │ └── strings.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── main.cpp └── settings.gradle ├── Chapter6_1_Multiview ├── CMakeLists.txt ├── Chapter6 │ ├── CMakeLists.txt │ ├── app │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── res │ │ │ ├── drawable-v24 │ │ │ └── ic_launcher_foreground.xml │ │ │ ├── drawable │ │ │ └── ic_launcher_background.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ └── values │ │ │ └── strings.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── main.cpp │ └── settings.gradle ├── Common │ ├── DebugOutput.h │ ├── GraphicsAPI.cpp │ ├── GraphicsAPI.h │ ├── GraphicsAPI_D3D11.cpp │ ├── GraphicsAPI_D3D11.h │ ├── GraphicsAPI_D3D12.cpp │ ├── GraphicsAPI_D3D12.h │ ├── GraphicsAPI_OpenGL.cpp │ ├── GraphicsAPI_OpenGL.h │ ├── GraphicsAPI_OpenGL_ES.cpp │ ├── GraphicsAPI_OpenGL_ES.h │ ├── GraphicsAPI_Vulkan.cpp │ ├── GraphicsAPI_Vulkan.h │ ├── HelperFunctions.h │ ├── OpenXRDebugUtils.cpp │ ├── OpenXRDebugUtils.h │ ├── OpenXRHelper.h │ ├── d3dx12.h │ └── xr_linear_algebra.h ├── ShadersMultiview │ ├── PixelShader_DX11_MV.hlsl │ ├── PixelShader_DX12_MV.hlsl │ ├── PixelShader_GLES_MV.glsl │ ├── PixelShader_GL_MV.glsl │ ├── PixelShader_VK_MV.glsl │ ├── VertexShader_DX11_MV.hlsl │ ├── VertexShader_DX12_MV.hlsl │ ├── VertexShader_GLES_MV.glsl │ ├── VertexShader_GL_MV.glsl │ └── VertexShader_VK_MV.glsl ├── build-common-archs.bat ├── build-common-archs.sh └── cmake │ ├── FindEGL.cmake │ ├── FindOpenGLES.cmake │ ├── dxc_shader.cmake │ ├── fxc_shader.cmake │ ├── gfxwrapper.cmake │ ├── glsl_shader.cmake │ └── graphics_api_select.cmake ├── Common ├── DebugOutput.h ├── GraphicsAPI.cpp ├── GraphicsAPI.h ├── GraphicsAPI_D3D11.cpp ├── GraphicsAPI_D3D11.h ├── GraphicsAPI_D3D12.cpp ├── GraphicsAPI_D3D12.h ├── GraphicsAPI_OpenGL.cpp ├── GraphicsAPI_OpenGL.h ├── GraphicsAPI_OpenGL_ES.cpp ├── GraphicsAPI_OpenGL_ES.h ├── GraphicsAPI_Vulkan.cpp ├── GraphicsAPI_Vulkan.h ├── HelperFunctions.h ├── OpenXRDebugUtils.cpp ├── OpenXRDebugUtils.h ├── OpenXRHelper.h └── xr_linear_algebra.h ├── GraphicsAPI_Test ├── CMakeLists.txt └── main.cpp ├── LICENSE ├── LICENSES ├── Apache-2.0.txt ├── BSD-3-Clause.txt ├── BSL-1.0.txt ├── CC-BY-4.0.txt ├── CC0-1.0.txt └── MIT.txt ├── README.md ├── Shaders ├── PixelShader.glsl ├── PixelShader.hlsl ├── PixelShader_GLES.glsl ├── VertexShader.glsl ├── VertexShader.hlsl └── VertexShader_GLES.glsl ├── build-android-arch.bat ├── build-android-arch.sh ├── build-common-archs.bat ├── build-common-archs.sh ├── build-eoc-archs.bat ├── build-eoc-archs.sh ├── build-site.sh ├── cmake ├── FindEGL.cmake ├── FindOpenGLES.cmake ├── fxc_shader.cmake ├── gfxwrapper.cmake ├── glsl_shader.cmake └── graphics_api_select.cmake ├── eoc-archs-rm-tags.py ├── requirements.txt ├── reuse └── CMakeLists.txt ├── thirdparty ├── CMakeLists_Ch1_Main.txt ├── CMakeLists_Ch2_Main.txt ├── CMakeLists_Ch3_Main.txt ├── CMakeLists_Ch4_Main.txt ├── CMakeLists_Ch5_Main.txt ├── index_android.html ├── index_linux.html ├── index_windows.html └── openxr_loader_manifest_only-1.0.27.aar └── tutorial ├── .htaccess ├── 1-introduction.rst ├── 2-setup.rst ├── 3-graphics.rst ├── 4-actions.rst ├── 5-extensions.rst ├── 6-next-steps.rst ├── CMakeLists.txt ├── FindSphinx.cmake ├── Icons └── AllIcons.psd ├── OpenXR-Coordinate-System.png ├── OpenXR-ReferenceSpace-Local.png ├── OpenXR-ReferenceSpace-Stage.png ├── OpenXR-ReferenceSpace-View.png ├── OpenXRAfter.png ├── OpenXRBefore.png ├── OpenXRBeforeAfter.png ├── conf.py ├── favicon.ico ├── images ├── Chapter4-Screenshot.png ├── GradleSync.png ├── LocalSpace.png ├── LocalSpace.svg ├── OpenXRBeforeAfter.psd ├── OpenXRSpaces.png ├── OpenXR_170px_Feb17.png ├── OpenXR_500px_Feb17_RGB.png ├── OpenXR_500px_Feb17_White.png ├── Spaces.psd ├── StageSpace.png ├── StageSpace.svg ├── StageSpaceOnly.png ├── StageSpaceOnly.svg ├── VSCodeCMakeLinux.png ├── ViewSpace.png ├── ViewSpace.svg ├── android-studio-build-run-toolbar.png ├── android-studio-newproject-options.png ├── android-studio-newproject.png ├── linux-vscode-initial-files.png ├── multithreaded_complex.png ├── multithreaded_simple.png └── standard-poses.png ├── index.rst ├── linux-vscode-cmake-configure.png ├── linux-vscode-open-folder.png ├── openxr-session-life-cycle.svg ├── robots.txt ├── screencapture-openxr-tutorial-index.png ├── sitemap.xml ├── tutorial_sphinx_theme_1 ├── __init__.py ├── breadcrumbs.html ├── footer.html ├── layout.html ├── locale │ ├── da │ │ └── LC_MESSAGES │ │ │ ├── sphinx.mo │ │ │ └── sphinx.po │ ├── de │ │ └── LC_MESSAGES │ │ │ ├── sphinx.mo │ │ │ └── sphinx.po │ ├── en │ │ └── LC_MESSAGES │ │ │ ├── sphinx.mo │ │ │ └── sphinx.po │ ├── es │ │ └── LC_MESSAGES │ │ │ ├── sphinx.mo │ │ │ └── sphinx.po │ ├── et │ │ └── LC_MESSAGES │ │ │ ├── sphinx.mo │ │ │ └── sphinx.po │ ├── fa_IR │ │ └── LC_MESSAGES │ │ │ ├── sphinx.mo │ │ │ └── sphinx.po │ ├── fr │ │ └── LC_MESSAGES │ │ │ ├── sphinx.mo │ │ │ └── sphinx.po │ ├── hr │ │ └── LC_MESSAGES │ │ │ ├── sphinx.mo │ │ │ └── sphinx.po │ ├── hu │ │ └── LC_MESSAGES │ │ │ ├── sphinx.mo │ │ │ └── sphinx.po │ ├── it │ │ └── LC_MESSAGES │ │ │ ├── sphinx.mo │ │ │ └── sphinx.po │ ├── lt │ │ └── LC_MESSAGES │ │ │ ├── sphinx.mo │ │ │ └── sphinx.po │ ├── nl │ │ └── LC_MESSAGES │ │ │ ├── sphinx.mo │ │ │ └── sphinx.po │ ├── pl │ │ └── LC_MESSAGES │ │ │ ├── sphinx.mo │ │ │ └── sphinx.po │ ├── pt │ │ └── LC_MESSAGES │ │ │ ├── sphinx.mo │ │ │ └── sphinx.po │ ├── pt_BR │ │ └── LC_MESSAGES │ │ │ ├── sphinx.mo │ │ │ └── sphinx.po │ ├── ru │ │ └── LC_MESSAGES │ │ │ ├── sphinx.mo │ │ │ └── sphinx.po │ ├── sphinx.pot │ ├── sv │ │ └── LC_MESSAGES │ │ │ ├── sphinx.mo │ │ │ └── sphinx.po │ ├── tr │ │ └── LC_MESSAGES │ │ │ ├── sphinx.mo │ │ │ └── sphinx.po │ ├── zh_CN │ │ └── LC_MESSAGES │ │ │ ├── sphinx.mo │ │ │ └── sphinx.po │ └── zh_TW │ │ └── LC_MESSAGES │ │ ├── sphinx.mo │ │ └── sphinx.po ├── platforms.html ├── search.html ├── searchbox.html ├── static │ ├── css │ │ ├── 219065020-huge.jpg │ │ ├── Clipboard Image.jpg │ │ ├── DirectX11_Black_Aligned.svg │ │ ├── DirectX12_Black_Aligned.svg │ │ ├── Microsoft-DirectX-11-Logo-wordmark.svg │ │ ├── Microsoft-DirectX-12-Logo-wordmark.svg │ │ ├── OpenGLES_Black_Aligned.svg │ │ ├── OpenGLES_Black_Nov19.svg │ │ ├── OpenGLES_RGB_Nov19.svg │ │ ├── OpenGLES_White_Nov19.svg │ │ ├── OpenGL_Black_Aligned.svg │ │ ├── OpenGL_Black_June16.svg │ │ ├── OpenGL_RGB_June16.svg │ │ ├── OpenGL_White_June16.svg │ │ ├── OpenXR-landing-page-banner.png │ │ ├── Vulkan_Black_Aligned.svg │ │ ├── Vulkan_Black_Dec16.svg │ │ ├── Vulkan_RGB_Dec16.svg │ │ ├── Vulkan_White_Dec16.svg │ │ ├── android-colour.svg │ │ ├── android-mono.svg │ │ ├── badge_only.css │ │ ├── fonts │ │ │ ├── Roboto-Slab-Bold.woff │ │ │ ├── Roboto-Slab-Bold.woff2 │ │ │ ├── Roboto-Slab-Regular.woff │ │ │ ├── Roboto-Slab-Regular.woff2 │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ ├── fontawesome-webfont.woff2 │ │ │ ├── lato-bold-italic.woff │ │ │ ├── lato-bold-italic.woff2 │ │ │ ├── lato-bold.woff │ │ │ ├── lato-bold.woff2 │ │ │ ├── lato-normal-italic.woff │ │ │ ├── lato-normal-italic.woff2 │ │ │ ├── lato-normal.woff │ │ │ └── lato-normal.woff2 │ │ ├── icons │ │ │ ├── Android │ │ │ │ ├── Android_robot-204x240.png │ │ │ │ ├── Android_robot-409x480.png │ │ │ │ ├── Android_robot-512x601.png │ │ │ │ ├── Android_robot-black.svg │ │ │ │ ├── Android_robot.svg │ │ │ │ └── Attribution.txt │ │ │ ├── Cog.svg │ │ │ ├── Compass.svg │ │ │ ├── Graphics.svg │ │ │ ├── HandsetIcon.svg │ │ │ ├── JigsawPiece.svg │ │ │ ├── Trumpet.svg │ │ │ ├── Tux │ │ │ │ ├── Attribution.txt │ │ │ │ ├── Tux-FlatColor.svg │ │ │ │ ├── Tux_Mono.svg │ │ │ │ ├── tux-bw-258x303.gif │ │ │ │ └── tux-color-258x303.gif │ │ │ ├── Vector_down_arrow_link.svg │ │ │ └── share_FILL0_wght400_GRAD0_opsz24.svg │ │ ├── shutterstock_219065020.jpg │ │ ├── shutterstock_532086997-original.jpg │ │ ├── shutterstock_532086997.jpg │ │ ├── shutterstock_532086997.png │ │ ├── theme.css │ │ ├── tux-colour.svg │ │ ├── tux-mono.svg │ │ ├── windows-colour.svg │ │ └── windows-mono.svg │ └── js │ │ ├── badge_only.js │ │ ├── html5shiv-printshiv.min.js │ │ ├── html5shiv.min.js │ │ ├── js.cookie.min.js │ │ ├── js.cookie.min.mjs │ │ ├── theme.js │ │ ├── updateGraphicsAPI.js │ │ └── updatePlatform.js ├── theme.conf └── versions.html └── tutorialmap.txt /.clang-format: -------------------------------------------------------------------------------- 1 | Language: Cpp 2 | BasedOnStyle: Google 3 | UseTab: Never 4 | IndentWidth: 4 5 | TabWidth: 4 6 | AllowShortIfStatementsOnASingleLine: false 7 | Standard: Cpp11 8 | IndentCaseLabels: false 9 | ColumnLimit: 0 10 | AccessModifierOffset: -4 11 | NamespaceIndentation: All 12 | FixNamespaceComments: false 13 | -------------------------------------------------------------------------------- /.cmake-format.py: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2021-2023, Collabora, Ltd. 2 | # SPDX-License-Identifier: CC0-1.0 3 | 4 | # To install cmake-format: 5 | # pipx install cmakelang 6 | 7 | with section("format"): 8 | # line_width = 100 9 | tab_size = 4 10 | use_tabchars = False 11 | fractional_tab_policy = "use-space" 12 | 13 | max_prefix_chars = 4 14 | 15 | dangle_parens = True 16 | dangle_align = "prefix" 17 | max_pargs_hwrap = 4 18 | max_rows_cmdline = 1 19 | always_wrap = ["set_source_files_properties", "install"] 20 | 21 | keyword_case = "upper" 22 | 23 | 24 | # Do not reflow comments 25 | 26 | with section("markup"): 27 | enable_markup = False 28 | -------------------------------------------------------------------------------- /.github/workflows/build-android-arch.yml: -------------------------------------------------------------------------------- 1 | name: 'Build Android Build Folder Archives' 2 | on: 3 | push: 4 | tags: 5 | - "v*.*.*" 6 | workflow_dispatch: 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout 13 | uses: actions/checkout@v4 14 | - name: Build 15 | run: ./build-android-arch.sh 16 | - name: Upload Android Build Folder Archives 17 | id: upload 18 | uses: softprops/action-gh-release@v1 19 | with: 20 | files: ./build/android_archs/AndroidBuildFolder.zip 21 | -------------------------------------------------------------------------------- /.github/workflows/build-android.yml: -------------------------------------------------------------------------------- 1 | name: 'Android Build Chapters' 2 | on: 3 | pull_request: 4 | branches: [ "main" ] 5 | # tags: 6 | # - "v*.*.*" 7 | # workflow_dispatch: 8 | 9 | jobs: 10 | build: 11 | name: Android Build 12 | runs-on: ubuntu-latest 13 | strategy: 14 | fail-fast: true 15 | matrix: 16 | os: [ubuntu-latest] 17 | target: [android] 18 | graphics: [VULKAN, OPENGL_ES] 19 | chapter: [Chapter1, Chapter2, Chapter3, Chapter4, Chapter5] 20 | steps: 21 | - name: Checkout 22 | uses: actions/checkout@v4 23 | - name: Build ${{ matrix.chapter }} using ${{ matrix.gfx }} on ${{ matrix.os }} 24 | run: | 25 | echo "Building ${{ matrix.chapter }} using ${{ matrix.gfx }} on ${{ matrix.os }} ${{ github.ref_name }}" 26 | export GFX=${{ matrix.graphics }} 27 | cd ${{ matrix.chapter }} 28 | chmod 755 gradlew 29 | ./gradlew assembleDebug 30 | 31 | -------------------------------------------------------------------------------- /.github/workflows/build-common-archs.yml: -------------------------------------------------------------------------------- 1 | name: 'Build Common Folder Archives' 2 | on: 3 | push: 4 | tags: 5 | - "v*.*.*" 6 | workflow_dispatch: 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout 13 | uses: actions/checkout@v4 14 | - name: Build 15 | run: | 16 | bash ./build-common-archs.sh D3D11 D3D12 OPENGL OPENGL_ES VULKAN 17 | cd ./Chapter6_1_Multiview/ 18 | bash ./build-common-archs.sh D3D11 D3D12 OPENGL OPENGL_ES VULKAN 19 | cd ./../ 20 | - name: Upload Common Folder Archives 21 | id: upload 22 | uses: softprops/action-gh-release@v1 23 | with: 24 | files: | 25 | ./build/common_archs/Common_D3D11.zip 26 | ./build/common_archs/Common_D3D12.zip 27 | ./build/common_archs/Common_OpenGL.zip 28 | ./build/common_archs/Common_OpenGL_ES.zip 29 | ./build/common_archs/Common_Vulkan.zip 30 | ./build/common_archs/Common.zip 31 | ./Chapter6_1_Multiview/build/common_archs/Chapter6_1_Multiview_Common_D3D11.zip 32 | ./Chapter6_1_Multiview/build/common_archs/Chapter6_1_Multiview_Common_D3D12.zip 33 | ./Chapter6_1_Multiview/build/common_archs/Chapter6_1_Multiview_Common_OpenGL.zip 34 | ./Chapter6_1_Multiview/build/common_archs/Chapter6_1_Multiview_Common_OpenGL_ES.zip 35 | ./Chapter6_1_Multiview/build/common_archs/Chapter6_1_Multiview_Common_Vulkan.zip 36 | ./Chapter6_1_Multiview/build/common_archs/Chapter6_1_Multiview_Common.zip 37 | -------------------------------------------------------------------------------- /.github/workflows/build-eoc-archs.yml: -------------------------------------------------------------------------------- 1 | name: 'Build End of Chapter Archives' 2 | on: 3 | push: 4 | tags: 5 | - "v*.*.*" 6 | workflow_dispatch: 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout 13 | uses: actions/checkout@v4 14 | - name: Build 15 | run: ./build-eoc-archs.sh 16 | - name: Upload End of Chapter Archives 17 | id: upload 18 | uses: softprops/action-gh-release@v1 19 | with: 20 | files: | 21 | ./build/eoc_archs/Chapter1.zip 22 | ./build/eoc_archs/Chapter2.zip 23 | ./build/eoc_archs/Chapter3.zip 24 | ./build/eoc_archs/Chapter4.zip 25 | ./build/eoc_archs/Chapter5.zip 26 | -------------------------------------------------------------------------------- /.github/workflows/build-host-linux.yml: -------------------------------------------------------------------------------- 1 | name: 'Linux Build Chapters' 2 | on: 3 | pull_request: 4 | branches: [ "main" ] 5 | # tags: 6 | # - "v*.*.*" 7 | # workflow_dispatch: 8 | 9 | jobs: 10 | build: 11 | name: Linux Build 12 | runs-on: ${{matrix.os}} 13 | strategy: 14 | fail-fast: true 15 | matrix: 16 | os: [ubuntu-latest] 17 | target: [linux] 18 | graphics: [VULKAN, OPENGL] 19 | steps: 20 | - name: Setup 21 | run: | 22 | sudo apt-get install libglu1-mesa-dev freeglut3-dev mesa-common-dev libgl1-mesa-dev 23 | sudo apt install vulkan-tools 24 | sudo apt install libvulkan-dev 25 | sudo apt install vulkan-validationlayers-dev spirv-tools glslang-tools 26 | sudo apt install libxrandr-dev libxxf86vm-dev 27 | sudo apt-get install libxcb-randr0-dev libxcb-xtest0-dev libxcb-xinerama0-dev libxcb-shape0-dev libxcb-xkb-dev 28 | sudo apt-get install libgl1-mesa-dev libvulkan-dev libx11-xcb-dev libxcb-dri2-0-dev libxcb-glx0-dev libxcb-icccm4-dev libxcb-keysyms1-dev libxcb-randr0-dev libxrandr-dev libxxf86vm-dev mesa-common-dev 29 | - name: Checkout 30 | uses: actions/checkout@v4 31 | - name: Build ${{ matrix.gfx }} on ${{ matrix.os }} 32 | run: | 33 | echo "Building ${{ matrix.os }} ${{ github.ref_name }}" 34 | export GFX=${{ matrix.graphics }} 35 | mkdir build 36 | cd build 37 | cmake .. 38 | cmake --build . 39 | 40 | -------------------------------------------------------------------------------- /.github/workflows/build-host-windows.yml: -------------------------------------------------------------------------------- 1 | name: 'Windows Build Chapters' 2 | on: 3 | pull_request: 4 | branches: [ "main" ] 5 | # tags: 6 | # - "v*.*.*" 7 | # workflow_dispatch: 8 | 9 | jobs: 10 | build: 11 | name: Windows Build 12 | runs-on: ${{matrix.os}} 13 | strategy: 14 | fail-fast: true 15 | matrix: 16 | os: [windows-latest] 17 | target: [windows] 18 | graphics: [VULKAN, OPENGL, DX11, DX12] 19 | steps: 20 | - name: Checkout 21 | uses: actions/checkout@v4 22 | - name: Build ${{ matrix.gfx }} on ${{ matrix.os }} 23 | run: | 24 | echo "Building ${{ matrix.os }} ${{ github.ref_name }}" 25 | set GFX=${{ matrix.graphics }} 26 | mkdir build 27 | cd build 28 | cmake .. 29 | cmake --build . 30 | -------------------------------------------------------------------------------- /.github/workflows/build-site.yml: -------------------------------------------------------------------------------- 1 | name: 'Build Site' 2 | on: 3 | push: 4 | tags: 5 | - "v*.*.*" 6 | workflow_dispatch: 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout 13 | uses: actions/checkout@v4 14 | - name: Build 15 | run: | 16 | echo "Building version ${{github.ref_name}}" 17 | bash ./build-site.sh ${{github.ref_name}} 18 | - name: Upload Release Artifact 19 | id: upload 20 | uses: softprops/action-gh-release@v1 21 | with: 22 | files: site.tar.gz 23 | - name: Webhook 24 | uses: joelwmale/webhook-action@2.3.2 25 | with: 26 | url: ${{ secrets.WEBHOOK_URL }} 27 | body: '{"file": "${{ steps.upload.outputs.url }}/site.tar.gz", "release": "${{github.ref}}", "secret": "${{ secrets.WEBHOOK_KEY }}"}' 28 | -------------------------------------------------------------------------------- /.github/workflows/gradle-wrapper-validation.yml: -------------------------------------------------------------------------------- 1 | name: "Validate Gradle Wrapper" 2 | 3 | on: [push, pull_request] 4 | 5 | permissions: 6 | contents: read 7 | 8 | jobs: 9 | validation: 10 | name: Validation 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v4 14 | - uses: gradle/wrapper-validation-action@v2 15 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .* 2 | !.github 3 | !.gitignore 4 | !.clang-format 5 | !.cmake-format.* 6 | 7 | # Prerequisites 8 | *.d 9 | 10 | # Compiled Object files 11 | *.slo 12 | *.lo 13 | *.o 14 | *.obj 15 | 16 | # Precompiled Headers 17 | *.gch 18 | *.pch 19 | 20 | # Compiled Dynamic libraries 21 | *.so 22 | *.dylib 23 | *.dll 24 | 25 | # Fortran module files 26 | *.mod 27 | *.smod 28 | 29 | # Compiled Static libraries 30 | *.lai 31 | *.la 32 | *.a 33 | *.lib 34 | 35 | # Executables 36 | *.exe 37 | *.out 38 | *.app 39 | build 40 | sphinx 41 | 42 | #Visual Code folders 43 | .vscode 44 | 45 | # Android build folders 46 | .idea 47 | 48 | # Android build config files 49 | local.properties 50 | 51 | # Android Shader output sources/binaries 52 | Chapter6_1_Multiview/Chapter6/app/src/main/assets/shaders/*.spv 53 | Chapter6_1_Multiview/Chapter6/app/src/main/assets/shaders/*.glsl 54 | 55 | Chapter5/app/src/main/assets/shaders/*.spv 56 | Chapter5/app/src/main/assets/shaders/*.glsl 57 | 58 | Chapter4/app/src/main/assets/shaders/*.spv 59 | Chapter4/app/src/main/assets/shaders/*.glsl 60 | 61 | Chapter3/app/src/main/assets/shaders/*.spv 62 | Chapter3/app/src/main/assets/shaders/*.glsl 63 | 64 | Chapter2/app/src/main/assets/shaders/*.spv 65 | Chapter2/app/src/main/assets/shaders/*.glsl 66 | 67 | Chapter1/app/src/main/assets/shaders/*.spv 68 | Chapter1/app/src/main/assets/shaders/*.glsl 69 | 70 | # Force reuse.software to ignore External 71 | /External/ 72 | -------------------------------------------------------------------------------- /.reuse/dep5: -------------------------------------------------------------------------------- 1 | Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ 2 | Upstream-Name: OpenXR-Tutorials 3 | Upstream-Contact: The Khronos Group Inc. 4 | Source: https://github.com/KhronosGroup/OpenXR-Tutorials 5 | 6 | Files: .github/* 7 | Copyright: 2023 The Khronos Group Inc. 8 | License: Apache-2.0 9 | 10 | Files: Chapter1/* 11 | Copyright: 2023 The Khronos Group Inc. 12 | License: Apache-2.0 13 | 14 | Files: Chapter2/* 15 | Copyright: 2023 The Khronos Group Inc. 16 | License: Apache-2.0 17 | 18 | Files: Chapter3/* 19 | Copyright: 2023 The Khronos Group Inc. 20 | License: Apache-2.0 21 | 22 | Files: Chapter4/* 23 | Copyright: 2023 The Khronos Group Inc. 24 | License: Apache-2.0 25 | 26 | Files: Chapter5/* 27 | Copyright: 2023 The Khronos Group Inc. 28 | License: Apache-2.0 29 | 30 | Files: Chapter6_1_Multiview/* 31 | Copyright: 2023 The Khronos Group Inc. 32 | License: Apache-2.0 33 | 34 | Files: tutorial/* 35 | Copyright: 2023 The Khronos Group Inc. 36 | License: CC-BY-4.0 37 | Comment: https://github.com/KhronosGroup/OpenXR-Tutorials/issues/12 (Text) 38 | 39 | Files: thirdparty/* 40 | Copyright: 2023 The Khronos Group Inc. 41 | License: Apache-2.0 42 | Comment: https://github.com/KhronosGroup/OpenXR-SDK-Source/blob/main/LICENSE 43 | 44 | Files: .clang-format 45 | Copyright: 2023 The Khronos Group Inc. 46 | License: Apache-2.0 47 | 48 | Files: .gitignore 49 | Copyright: 2023 The Khronos Group Inc. 50 | License: Apache-2.0 51 | 52 | Files: build-android-arch.bat 53 | Copyright: 2023 The Khronos Group Inc. 54 | License: Apache-2.0 55 | 56 | Files: build-android-arch.sh 57 | Copyright: 2023 The Khronos Group Inc. 58 | License: Apache-2.0 59 | 60 | Files: build-common-archs.bat 61 | Copyright: 2023 The Khronos Group Inc. 62 | License: Apache-2.0 63 | 64 | Files: build-common-archs.sh 65 | Copyright: 2023 The Khronos Group Inc. 66 | License: Apache-2.0 67 | 68 | Files: build-eoc-archs.bat 69 | Copyright: 2023 The Khronos Group Inc. 70 | License: Apache-2.0 71 | 72 | Files: build-eoc-archs.sh 73 | Copyright: 2023 The Khronos Group Inc. 74 | License: Apache-2.0 75 | 76 | Files: build-site.sh 77 | Copyright: 2023 The Khronos Group Inc. 78 | License: Apache-2.0 79 | 80 | Files: BUILD.md 81 | Copyright: 2023 The Khronos Group Inc. 82 | License: Apache-2.0 83 | 84 | Files: CONTRIBUTORS.md 85 | Copyright: 2023 The Khronos Group Inc. 86 | License: Apache-2.0 87 | 88 | Files: README.md 89 | Copyright: 2023 The Khronos Group Inc. 90 | License: Apache-2.0 91 | 92 | Files: requirements.txt 93 | Copyright: 2023 The Khronos Group Inc. 94 | License: Apache-2.0 95 | 96 | Files: Schedule.md 97 | Copyright: 2023 The Khronos Group Inc. 98 | License: Apache-2.0 99 | -------------------------------------------------------------------------------- /BUILD.md: -------------------------------------------------------------------------------- 1 | # Build 2 | 3 | ## Prerequisites 4 | * [CMake 3.22.1](https://cmake.org/download/) 5 | * [Python 3.6+](https://www.python.org/downloads/) 6 | 7 | ## Windows 8 | 9 | Download [Visual Studio](https://visualstudio.microsoft.com/downloads/) 2017 or later. See additional [prerequisites](#Prerequisites). 10 | 11 | Create a `build` folder in the `OpenXR-Tutorial` folder and from within that folder, configure and generate the project with CMake using following commands: 12 | 13 | ``` 14 | mkdir build 15 | cd build 16 | cmake -G "" ../ 17 | ``` 18 | 19 | You can also use the CMake GUI. 20 | 21 | Open `openxr-tutorial.sln` and build the `ALL_BUILD` project. Right click on an `OpenXRTutorialChapter` project and select "`Set as Startup Project`", hit `F5` to run and debug. 22 | 23 | ## Linux 24 | 25 | Download and install your IDE of your choice. We have used [Visual Studio Code](https://code.visualstudio.com/download) in the tutorial. 26 | 27 | See additional [prerequisites](#Prerequisites). 28 | 29 | Create a `build` folder in the `OpenXR-Tutorial` folder and from within that folder, configure and generate the project with CMake using following commands: 30 | 31 | ``` 32 | mkdir build 33 | cd build 34 | cmake -G "" ../ 35 | ``` 36 | 37 | You can also use the CMake GUI. 38 | 39 | Open the `openxr-tutorial` solution file and build the `ALL_BUILD` project. Select an `OpenXRTutorialChapter` project to run and debug. 40 | 41 | ## Android 42 | 43 | Download [Android Studio](https://developer.android.com/studio) 2022.1.1 or later. 44 | 45 | Android Prequisites: 46 | * SDK: 29 47 | * NDK: 23.1.7779620 48 | * Android Studio/Gradle Plugin Version: 7.4.2 49 | 50 | See additional [prerequisites](#Prerequisites). 51 | 52 | Open Android Studio and open one of the `Chapter` folders from within the reposity. Click the green hammer icon to build the project. Connect your Android device and set up any USB debugging and `adb` requirements. Click the plain green bug icon to run and debug. 53 | -------------------------------------------------------------------------------- /Chapter1/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | local.properties 16 | -------------------------------------------------------------------------------- /Chapter1/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter1/app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.android.application' 3 | } 4 | 5 | android { 6 | namespace 'org.khronos.OpenXRTutorialChapter1' 7 | compileSdk 29 8 | ndkVersion '23.1.7779620' 9 | 10 | defaultConfig { 11 | applicationId "org.khronos.OpenXRTutorialChapter1" 12 | minSdk 24 13 | targetSdk 29 14 | versionCode 1 15 | versionName "1.0" 16 | } 17 | 18 | buildTypes { 19 | release { 20 | minifyEnabled false 21 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 22 | } 23 | } 24 | 25 | externalNativeBuild { 26 | cmake { 27 | version '3.22.1' 28 | path '../CMakeLists.txt' 29 | } 30 | } 31 | 32 | // Enable prefab support for the OpenXR AAR 33 | buildFeatures { 34 | prefab true 35 | } 36 | } 37 | 38 | dependencies { 39 | implementation 'org.khronos.openxr:openxr_loader_for_android:1.0.34' 40 | } 41 | -------------------------------------------------------------------------------- /Chapter1/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /Chapter1/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 11 | 12 | 13 | 17 | 18 | 21 | 24 | 25 | 32 | 33 | 41 | 42 | 43 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /Chapter1/app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 13 | 19 | 22 | 25 | 26 | 27 | 28 | 34 | 35 | -------------------------------------------------------------------------------- /Chapter1/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter1/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter1/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter1/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter1/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter1/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter1/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter1/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter1/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter1/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter1/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter1/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter1/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter1/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter1/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter1/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter1/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter1/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter1/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter1/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter1/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter1/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter1/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | OpenXR Tutorial Chapter 1 3 | 4 | -------------------------------------------------------------------------------- /Chapter1/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | plugins { 3 | id 'com.android.application' version '7.4.2' apply false 4 | } 5 | 6 | 7 | task clean(type: Delete) { 8 | delete rootProject.buildDir 9 | } 10 | -------------------------------------------------------------------------------- /Chapter1/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | org.gradle.jvmargs=-Xmx1536m 13 | android.enableJetifier=false 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | # AndroidX package structure to make it clearer which packages are bundled with the 20 | # Android operating system, and which are packaged with your app's APK 21 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 22 | android.useAndroidX=true 23 | -------------------------------------------------------------------------------- /Chapter1/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter1/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /Chapter1/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip 4 | networkTimeout=10000 5 | zipStoreBase=GRADLE_USER_HOME 6 | zipStorePath=wrapper/dists 7 | -------------------------------------------------------------------------------- /Chapter1/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | gradlePluginPortal() 6 | } 7 | } 8 | dependencyResolutionManagement { 9 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 10 | repositories { 11 | google() 12 | mavenCentral() 13 | } 14 | } 15 | rootProject.name = "OpenXRTutorialChapter1" 16 | include ':app' 17 | -------------------------------------------------------------------------------- /Chapter2/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | local.properties 16 | -------------------------------------------------------------------------------- /Chapter2/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter2/app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.android.application' 3 | } 4 | 5 | android { 6 | namespace 'org.khronos.OpenXRTutorialChapter2' 7 | compileSdk 29 8 | ndkVersion '23.1.7779620' 9 | 10 | defaultConfig { 11 | applicationId "org.khronos.OpenXRTutorialChapter2" 12 | minSdk 24 13 | targetSdk 29 14 | versionCode 1 15 | versionName "1.0" 16 | } 17 | 18 | buildTypes { 19 | release { 20 | minifyEnabled false 21 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 22 | } 23 | } 24 | 25 | externalNativeBuild { 26 | cmake { 27 | version '3.22.1' 28 | path '../CMakeLists.txt' 29 | } 30 | } 31 | 32 | // Enable prefab support for the OpenXR AAR 33 | buildFeatures { 34 | prefab true 35 | } 36 | } 37 | 38 | dependencies { 39 | implementation 'org.khronos.openxr:openxr_loader_for_android:1.0.34' 40 | } 41 | -------------------------------------------------------------------------------- /Chapter2/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /Chapter2/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 11 | 12 | 13 | 17 | 18 | 21 | 24 | 25 | 32 | 33 | 41 | 42 | 43 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /Chapter2/app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 13 | 19 | 22 | 25 | 26 | 27 | 28 | 34 | 35 | -------------------------------------------------------------------------------- /Chapter2/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter2/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter2/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter2/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter2/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter2/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter2/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter2/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter2/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter2/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter2/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter2/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter2/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter2/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter2/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter2/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter2/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter2/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter2/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter2/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter2/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter2/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter2/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | OpenXR Tutorial Chapter 2 3 | 4 | -------------------------------------------------------------------------------- /Chapter2/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | plugins { 3 | id 'com.android.application' version '7.4.2' apply false 4 | } 5 | 6 | 7 | task clean(type: Delete) { 8 | delete rootProject.buildDir 9 | } 10 | -------------------------------------------------------------------------------- /Chapter2/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | org.gradle.jvmargs=-Xmx1536m 13 | android.enableJetifier=false 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | # AndroidX package structure to make it clearer which packages are bundled with the 20 | # Android operating system, and which are packaged with your app's APK 21 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 22 | android.useAndroidX=true 23 | -------------------------------------------------------------------------------- /Chapter2/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter2/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /Chapter2/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip 4 | networkTimeout=10000 5 | zipStoreBase=GRADLE_USER_HOME 6 | zipStorePath=wrapper/dists 7 | -------------------------------------------------------------------------------- /Chapter2/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | gradlePluginPortal() 6 | } 7 | } 8 | dependencyResolutionManagement { 9 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 10 | repositories { 11 | google() 12 | mavenCentral() 13 | } 14 | } 15 | rootProject.name = "OpenXRTutorialChapter2" 16 | include ':app' 17 | -------------------------------------------------------------------------------- /Chapter3/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | local.properties 16 | -------------------------------------------------------------------------------- /Chapter3/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter3/app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.android.application' 3 | } 4 | 5 | android { 6 | namespace 'org.khronos.OpenXRTutorialChapter3' 7 | compileSdk 29 8 | ndkVersion '23.1.7779620' 9 | 10 | defaultConfig { 11 | applicationId "org.khronos.OpenXRTutorialChapter3" 12 | minSdk 24 13 | targetSdk 29 14 | versionCode 1 15 | versionName "1.0" 16 | } 17 | 18 | buildTypes { 19 | release { 20 | minifyEnabled false 21 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 22 | } 23 | } 24 | 25 | externalNativeBuild { 26 | cmake { 27 | version '3.22.1' 28 | path '../CMakeLists.txt' 29 | } 30 | } 31 | 32 | // Enable prefab support for the OpenXR AAR 33 | buildFeatures { 34 | prefab true 35 | } 36 | } 37 | 38 | dependencies { 39 | implementation 'org.khronos.openxr:openxr_loader_for_android:1.0.34' 40 | } 41 | -------------------------------------------------------------------------------- /Chapter3/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /Chapter3/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 11 | 12 | 13 | 17 | 18 | 21 | 24 | 25 | 32 | 33 | 41 | 42 | 43 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /Chapter3/app/src/main/assets/shaders/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter3/app/src/main/assets/shaders/.keep -------------------------------------------------------------------------------- /Chapter3/app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 13 | 19 | 22 | 25 | 26 | 27 | 28 | 34 | 35 | -------------------------------------------------------------------------------- /Chapter3/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter3/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter3/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter3/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter3/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter3/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter3/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter3/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter3/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter3/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter3/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter3/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter3/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter3/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter3/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter3/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter3/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter3/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter3/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter3/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter3/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter3/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter3/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | OpenXR Tutorial Chapter 3 3 | 4 | -------------------------------------------------------------------------------- /Chapter3/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | plugins { 3 | id 'com.android.application' version '7.4.2' apply false 4 | } 5 | 6 | 7 | task clean(type: Delete) { 8 | delete rootProject.buildDir 9 | } 10 | -------------------------------------------------------------------------------- /Chapter3/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | org.gradle.jvmargs=-Xmx1536m 13 | android.enableJetifier=false 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | # AndroidX package structure to make it clearer which packages are bundled with the 20 | # Android operating system, and which are packaged with your app's APK 21 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 22 | android.useAndroidX=true 23 | -------------------------------------------------------------------------------- /Chapter3/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter3/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /Chapter3/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip 4 | networkTimeout=10000 5 | zipStoreBase=GRADLE_USER_HOME 6 | zipStorePath=wrapper/dists 7 | -------------------------------------------------------------------------------- /Chapter3/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | gradlePluginPortal() 6 | } 7 | } 8 | dependencyResolutionManagement { 9 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 10 | repositories { 11 | google() 12 | mavenCentral() 13 | } 14 | } 15 | rootProject.name = "OpenXRTutorialChapter3" 16 | include ':app' 17 | -------------------------------------------------------------------------------- /Chapter4/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | local.properties 16 | -------------------------------------------------------------------------------- /Chapter4/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter4/app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.android.application' 3 | } 4 | 5 | android { 6 | namespace 'org.khronos.OpenXRTutorialChapter4' 7 | compileSdk 31 8 | ndkVersion '23.1.7779620' 9 | 10 | defaultConfig { 11 | applicationId "org.khronos.OpenXRTutorialChapter4" 12 | minSdk 27 13 | targetSdk 27 14 | versionCode 1 15 | versionName "1.0" 16 | } 17 | 18 | buildTypes { 19 | debug { 20 | minifyEnabled false 21 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 22 | signingConfig signingConfigs.debug 23 | } 24 | release { 25 | minifyEnabled false 26 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 27 | } 28 | } 29 | 30 | externalNativeBuild { 31 | cmake { 32 | version '3.22.1' 33 | path '../CMakeLists.txt' 34 | } 35 | } 36 | 37 | // Enable prefab support for the OpenXR AAR 38 | buildFeatures { 39 | prefab true 40 | } 41 | } 42 | 43 | dependencies { 44 | implementation 'org.khronos.openxr:openxr_loader_for_android:1.0.34' 45 | } 46 | -------------------------------------------------------------------------------- /Chapter4/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /Chapter4/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 11 | 12 | 13 | 17 | 18 | 21 | 24 | 25 | 32 | 33 | 41 | 42 | 43 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /Chapter4/app/src/main/assets/shaders/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter4/app/src/main/assets/shaders/.keep -------------------------------------------------------------------------------- /Chapter4/app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 13 | 19 | 22 | 25 | 26 | 27 | 28 | 34 | 35 | -------------------------------------------------------------------------------- /Chapter4/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter4/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter4/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter4/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter4/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter4/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter4/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter4/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter4/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter4/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter4/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter4/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter4/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter4/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter4/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter4/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter4/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter4/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter4/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter4/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter4/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter4/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter4/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | OpenXR Tutorial Chapter 4 3 | 4 | -------------------------------------------------------------------------------- /Chapter4/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | plugins { 3 | id 'com.android.application' version '7.4.2' apply false 4 | } 5 | 6 | 7 | task clean(type: Delete) { 8 | delete rootProject.buildDir 9 | } 10 | -------------------------------------------------------------------------------- /Chapter4/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | org.gradle.jvmargs=-Xmx1536m 13 | android.enableJetifier=false 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | # AndroidX package structure to make it clearer which packages are bundled with the 20 | # Android operating system, and which are packaged with your app's APK 21 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 22 | android.useAndroidX=true 23 | -------------------------------------------------------------------------------- /Chapter4/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter4/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /Chapter4/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip 4 | networkTimeout=10000 5 | zipStoreBase=GRADLE_USER_HOME 6 | zipStorePath=wrapper/dists 7 | -------------------------------------------------------------------------------- /Chapter4/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | gradlePluginPortal() 6 | } 7 | } 8 | dependencyResolutionManagement { 9 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 10 | repositories { 11 | google() 12 | mavenCentral() 13 | } 14 | } 15 | rootProject.name = "OpenXRTutorialChapter4" 16 | include ':app' 17 | -------------------------------------------------------------------------------- /Chapter5/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | local.properties 16 | -------------------------------------------------------------------------------- /Chapter5/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter5/app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.android.application' 3 | } 4 | 5 | android { 6 | namespace 'org.khronos.OpenXRTutorialChapter5' 7 | compileSdk 31 8 | ndkVersion '23.1.7779620' 9 | 10 | defaultConfig { 11 | applicationId "org.khronos.OpenXRTutorialChapter5" 12 | minSdk 27 13 | targetSdk 27 14 | versionCode 1 15 | versionName "1.0" 16 | } 17 | 18 | buildTypes { 19 | debug { 20 | minifyEnabled false 21 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 22 | signingConfig signingConfigs.debug 23 | } 24 | release { 25 | minifyEnabled false 26 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 27 | } 28 | } 29 | 30 | externalNativeBuild { 31 | cmake { 32 | version '3.22.1' 33 | path '../CMakeLists.txt' 34 | } 35 | } 36 | 37 | // Enable prefab support for the OpenXR AAR 38 | buildFeatures { 39 | prefab true 40 | } 41 | } 42 | 43 | dependencies { 44 | implementation 'org.khronos.openxr:openxr_loader_for_android:1.0.34' 45 | } 46 | -------------------------------------------------------------------------------- /Chapter5/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /Chapter5/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 11 | 12 | 13 | 17 | 18 | 21 | 24 | 25 | 26 | 27 | 34 | 35 | 43 | 44 | 45 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /Chapter5/app/src/main/assets/shaders/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter5/app/src/main/assets/shaders/.keep -------------------------------------------------------------------------------- /Chapter5/app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 13 | 19 | 22 | 25 | 26 | 27 | 28 | 34 | 35 | -------------------------------------------------------------------------------- /Chapter5/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter5/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter5/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter5/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter5/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter5/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter5/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter5/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter5/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter5/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter5/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter5/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter5/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter5/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter5/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter5/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter5/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter5/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter5/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter5/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter5/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter5/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter5/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | OpenXR Tutorial Chapter 5 3 | 4 | -------------------------------------------------------------------------------- /Chapter5/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | plugins { 3 | id 'com.android.application' version '7.4.2' apply false 4 | } 5 | 6 | 7 | task clean(type: Delete) { 8 | delete rootProject.buildDir 9 | } 10 | -------------------------------------------------------------------------------- /Chapter5/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | org.gradle.jvmargs=-Xmx1536m 13 | android.enableJetifier=false 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | # AndroidX package structure to make it clearer which packages are bundled with the 20 | # Android operating system, and which are packaged with your app's APK 21 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 22 | android.useAndroidX=true 23 | -------------------------------------------------------------------------------- /Chapter5/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter5/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /Chapter5/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip 4 | networkTimeout=10000 5 | zipStoreBase=GRADLE_USER_HOME 6 | zipStorePath=wrapper/dists 7 | -------------------------------------------------------------------------------- /Chapter5/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | gradlePluginPortal() 6 | } 7 | } 8 | dependencyResolutionManagement { 9 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 10 | repositories { 11 | google() 12 | mavenCentral() 13 | } 14 | } 15 | rootProject.name = "OpenXRTutorialChapter5" 16 | include ':app' 17 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # Copyright 2023, The Khronos Group Inc. 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | cmake_minimum_required(VERSION 3.22.1) 6 | 7 | project(openxr-tutorial) 8 | 9 | set(CMAKE_CONFIGURATION_TYPES "Debug;Release") 10 | 11 | # Optional override runtime 12 | set(XR_RUNTIME_JSON 13 | "$ENV{XR_RUNTIME_JSON}" 14 | CACHE PATH 15 | "Optional location of a specific OpenXR runtime configuration file." 16 | ) 17 | 18 | add_subdirectory(Chapter6) 19 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Chapter6/app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.android.application' 3 | } 4 | 5 | android { 6 | namespace 'org.khronos.OpenXRTutorialChapter6' 7 | compileSdk 29 8 | ndkVersion '23.1.7779620' 9 | 10 | defaultConfig { 11 | applicationId "org.khronos.OpenXRTutorialChapter6" 12 | minSdk 24 13 | targetSdk 29 14 | versionCode 1 15 | versionName "1.0" 16 | } 17 | 18 | buildTypes { 19 | release { 20 | minifyEnabled false 21 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 22 | } 23 | } 24 | 25 | externalNativeBuild { 26 | cmake { 27 | version '3.22.1' 28 | path '../CMakeLists.txt' 29 | } 30 | } 31 | 32 | // Enable prefab support for the OpenXR AAR 33 | buildFeatures { 34 | prefab true 35 | } 36 | } 37 | 38 | dependencies { 39 | implementation 'org.khronos.openxr:openxr_loader_for_android:1.0.34' 40 | } 41 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Chapter6/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Chapter6/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 11 | 12 | 13 | 17 | 18 | 21 | 24 | 25 | 32 | 33 | 41 | 42 | 43 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Chapter6/app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 13 | 19 | 22 | 25 | 26 | 27 | 28 | 34 | 35 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Chapter6/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Chapter6/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Chapter6/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter6_1_Multiview/Chapter6/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Chapter6/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter6_1_Multiview/Chapter6/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Chapter6/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter6_1_Multiview/Chapter6/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Chapter6/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter6_1_Multiview/Chapter6/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Chapter6/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter6_1_Multiview/Chapter6/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Chapter6/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter6_1_Multiview/Chapter6/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Chapter6/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter6_1_Multiview/Chapter6/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Chapter6/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter6_1_Multiview/Chapter6/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Chapter6/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter6_1_Multiview/Chapter6/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Chapter6/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter6_1_Multiview/Chapter6/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Chapter6/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | OpenXR Tutorial Chapter 6 3 | 4 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Chapter6/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | plugins { 3 | id 'com.android.application' version '7.4.2' apply false 4 | } 5 | 6 | 7 | task clean(type: Delete) { 8 | delete rootProject.buildDir 9 | } 10 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Chapter6/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | org.gradle.jvmargs=-Xmx1536m 13 | android.enableJetifier=false 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | # AndroidX package structure to make it clearer which packages are bundled with the 20 | # Android operating system, and which are packaged with your app's APK 21 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 22 | android.useAndroidX=true 23 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Chapter6/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/Chapter6_1_Multiview/Chapter6/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Chapter6/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip 4 | networkTimeout=10000 5 | zipStoreBase=GRADLE_USER_HOME 6 | zipStorePath=wrapper/dists 7 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Chapter6/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | gradlePluginPortal() 6 | } 7 | } 8 | dependencyResolutionManagement { 9 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 10 | repositories { 11 | google() 12 | mavenCentral() 13 | } 14 | } 15 | rootProject.name = "OpenXRTutorialChapter6" 16 | include ':app' 17 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Common/OpenXRDebugUtils.h: -------------------------------------------------------------------------------- 1 | // Copyright 2023, The Khronos Group Inc. 2 | // 3 | // SPDX-License-Identifier: Apache-2.0 4 | 5 | // OpenXR Tutorial for Khronos Group 6 | 7 | #pragma once 8 | #include 9 | #include 10 | 11 | XrBool32 OpenXRMessageCallbackFunction(XrDebugUtilsMessageSeverityFlagsEXT messageSeverity, XrDebugUtilsMessageTypeFlagsEXT messageType, const XrDebugUtilsMessengerCallbackDataEXT *pCallbackData, void *pUserData); 12 | 13 | XrDebugUtilsMessengerEXT CreateOpenXRDebugUtilsMessenger(XrInstance m_xrInstance); 14 | void DestroyOpenXRDebugUtilsMessenger(XrInstance m_xrInstance, XrDebugUtilsMessengerEXT debugUtilsMessenger); 15 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/Common/OpenXRHelper.h: -------------------------------------------------------------------------------- 1 | // Copyright 2023, The Khronos Group Inc. 2 | // 3 | // SPDX-License-Identifier: Apache-2.0 4 | 5 | // OpenXR Tutorial for Khronos Group 6 | 7 | #pragma once 8 | // Define any XR_USE_PLATFORM_... / XR_USE_GRAPHICS_API_... before this header file. 9 | 10 | // OpenXR Headers 11 | #include 12 | #include 13 | 14 | // For DEBUG_BREAK 15 | #include 16 | 17 | // XR_DOCS_TAG_BEGIN_Helper_Functions0 18 | inline void OpenXRDebugBreak() { 19 | std::cerr << "Breakpoint here to debug." << std::endl; 20 | DEBUG_BREAK; 21 | } 22 | 23 | inline const char* GetXRErrorString(XrInstance xrInstance, XrResult result) { 24 | static char string[XR_MAX_RESULT_STRING_SIZE]; 25 | xrResultToString(xrInstance, result, string); 26 | return string; 27 | } 28 | 29 | #define OPENXR_CHECK(x, y) \ 30 | { \ 31 | XrResult result = (x); \ 32 | if (!XR_SUCCEEDED(result)) { \ 33 | std::cerr << "ERROR: OPENXR: " << int(result) << "(" << (m_xrInstance ? GetXRErrorString(m_xrInstance, result) : "") << ") " << y << std::endl; \ 34 | OpenXRDebugBreak(); \ 35 | } \ 36 | } 37 | // XR_DOCS_TAG_END_Helper_Functions0 38 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/ShadersMultiview/PixelShader_DX11_MV.hlsl: -------------------------------------------------------------------------------- 1 | // Copyright 2023, The Khronos Group Inc. 2 | // 3 | // SPDX-License-Identifier: Apache-2.0 4 | 5 | struct PS_IN 6 | { 7 | float4 i_Position : SV_Position; 8 | nointerpolation float2 i_TexCoord : TEXCOORD0; 9 | float3 i_Normal : TEXCOORD1; 10 | nointerpolation float3 i_Color : TEXCOORD2; 11 | uint viewId : SV_RenderTargetArrayIndex; 12 | }; 13 | struct PS_OUT 14 | { 15 | float4 o_Color : SV_Target0; 16 | }; 17 | 18 | PS_OUT main(PS_IN IN) 19 | { 20 | PS_OUT OUT; 21 | int i = int(IN.i_TexCoord.x); 22 | float light = 0.2 + 0.8 * IN.i_Normal.g; 23 | OUT.o_Color = float4(light * IN.i_Color.rgb, 1.0); 24 | return OUT; 25 | } 26 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/ShadersMultiview/PixelShader_DX12_MV.hlsl: -------------------------------------------------------------------------------- 1 | // Copyright 2023, The Khronos Group Inc. 2 | // 3 | // SPDX-License-Identifier: Apache-2.0 4 | 5 | struct PS_IN 6 | { 7 | float4 i_Position : SV_Position; 8 | nointerpolation float2 i_TexCoord : TEXCOORD0; 9 | float3 i_Normal : TEXCOORD1; 10 | nointerpolation float3 i_Color : TEXCOORD2; 11 | }; 12 | struct PS_OUT 13 | { 14 | float4 o_Color : SV_Target0; 15 | }; 16 | 17 | PS_OUT main(PS_IN IN) 18 | { 19 | PS_OUT OUT; 20 | int i = int(IN.i_TexCoord.x); 21 | float light = 0.2 + 0.8 * IN.i_Normal.g; 22 | OUT.o_Color = float4(light * IN.i_Color.rgb, 1.0); 23 | return OUT; 24 | } 25 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/ShadersMultiview/PixelShader_GLES_MV.glsl: -------------------------------------------------------------------------------- 1 | // Copyright 2023, The Khronos Group Inc. 2 | // 3 | // SPDX-License-Identifier: Apache-2.0 4 | 5 | #version 310 es 6 | layout(location = 0) in flat uvec2 i_TexCoord; 7 | layout(location = 1) in highp vec3 i_Normal; 8 | layout(location = 2) in flat highp vec3 i_Color; 9 | layout(location = 0) out highp vec4 o_Color; 10 | layout(std140, binding = 2) uniform Data { 11 | highp vec4 colors[6]; 12 | } d_Data; 13 | 14 | void main() { 15 | uint i = i_TexCoord.x; 16 | highp float light = 0.1 + 0.9 * clamp(i_Normal.g, 0.0, 1.0); 17 | o_Color = highp vec4(light * i_Color.rgb, 1.0); 18 | } 19 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/ShadersMultiview/PixelShader_GL_MV.glsl: -------------------------------------------------------------------------------- 1 | // Copyright 2023, The Khronos Group Inc. 2 | // 3 | // SPDX-License-Identifier: Apache-2.0 4 | 5 | #version 450 6 | layout(location = 0) in flat uvec2 i_TexCoord; 7 | layout(location = 1) in vec3 i_Normal; 8 | layout(location = 2) in flat vec3 i_Color; 9 | layout(location = 0) out vec4 o_Color; 10 | layout(std140, binding = 2) uniform Data { 11 | vec4 colors[6]; 12 | } 13 | d_Data; 14 | void main() { 15 | uint i = i_TexCoord.x; 16 | float light = 0.1 + 0.9 * clamp(i_Normal.g, 0.0, 1.0); 17 | o_Color = vec4(light * i_Color.rgb, 1.0); 18 | } 19 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/ShadersMultiview/PixelShader_VK_MV.glsl: -------------------------------------------------------------------------------- 1 | // Copyright 2023, The Khronos Group Inc. 2 | // 3 | // SPDX-License-Identifier: Apache-2.0 4 | 5 | #version 450 6 | layout(location = 0) in flat uvec2 i_TexCoord; 7 | layout(location = 1) in vec3 i_Normal; 8 | layout(location = 2) in flat vec3 i_Color; 9 | layout(location = 0) out vec4 o_Color; 10 | layout(std140, binding = 2) uniform Data { 11 | vec4 colors[6]; 12 | } 13 | d_Data; 14 | void main() { 15 | uint i = i_TexCoord.x; 16 | float light = 0.1 + 0.9 * clamp(i_Normal.g, 0.0, 1.0); 17 | o_Color = vec4(light * i_Color.rgb, 1.0); 18 | } 19 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/ShadersMultiview/VertexShader_DX11_MV.hlsl: -------------------------------------------------------------------------------- 1 | // Copyright 2023, The Khronos Group Inc. 2 | // 3 | // SPDX-License-Identifier: Apache-2.0 4 | 5 | cbuffer CameraConstants : register(b0) 6 | { 7 | float4x4 viewProj[2]; 8 | float4x4 modelViewProj[2]; 9 | float4x4 model; 10 | float4 color; 11 | float4 pad1; 12 | float4 pad2; 13 | float4 pad3; 14 | }; 15 | cbuffer Normals : register(b1) 16 | { 17 | float4 normals[6]; 18 | }; 19 | 20 | struct VS_IN 21 | { 22 | uint vertexId : SV_VertexId; 23 | uint instanceId : SV_InstanceId; 24 | float4 a_Positions : TEXCOORD0; 25 | }; 26 | struct VS_OUT 27 | { 28 | float4 o_Position : SV_Position; 29 | nointerpolation float2 o_TexCoord : TEXCOORD0; 30 | float3 o_Normal : TEXCOORD1; 31 | nointerpolation float3 o_Color : TEXCOORD2; 32 | uint viewId : SV_RenderTargetArrayIndex; 33 | }; 34 | 35 | VS_OUT main(VS_IN IN) 36 | { 37 | VS_OUT OUT; 38 | OUT.o_Position = mul(modelViewProj[IN.instanceId], IN.a_Positions); 39 | OUT.viewId = IN.instanceId; 40 | int face = IN.vertexId / 6; 41 | OUT.o_TexCoord = float2(float(face), 0); 42 | OUT.o_Normal = (mul(model, normals[face])).xyz; 43 | OUT.o_Color = color.rgb; 44 | return OUT; 45 | } 46 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/ShadersMultiview/VertexShader_DX12_MV.hlsl: -------------------------------------------------------------------------------- 1 | // Copyright 2023, The Khronos Group Inc. 2 | // 3 | // SPDX-License-Identifier: Apache-2.0 4 | 5 | cbuffer CameraConstants : register(b0) 6 | { 7 | float4x4 viewProj[2]; 8 | float4x4 modelViewProj[2]; 9 | float4x4 model; 10 | float4 color; 11 | float4 pad1; 12 | float4 pad2; 13 | float4 pad3; 14 | }; 15 | cbuffer Normals : register(b1) 16 | { 17 | float4 normals[6]; 18 | }; 19 | 20 | struct VS_IN 21 | { 22 | uint vertexId : SV_VertexId; 23 | uint viewId : SV_ViewId; 24 | float4 a_Positions : TEXCOORD0; 25 | }; 26 | struct VS_OUT 27 | { 28 | float4 o_Position : SV_Position; 29 | nointerpolation float2 o_TexCoord : TEXCOORD0; 30 | float3 o_Normal : TEXCOORD1; 31 | nointerpolation float3 o_Color : TEXCOORD2; 32 | }; 33 | 34 | VS_OUT main(VS_IN IN) 35 | { 36 | VS_OUT OUT; 37 | OUT.o_Position = mul(modelViewProj[IN.viewId], IN.a_Positions); 38 | int face = IN.vertexId / 6; 39 | OUT.o_TexCoord = float2(float(face), 0); 40 | OUT.o_Normal = (mul(model, normals[face])).xyz; 41 | OUT.o_Color = color.rgb; 42 | return OUT; 43 | } 44 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/ShadersMultiview/VertexShader_GLES_MV.glsl: -------------------------------------------------------------------------------- 1 | // Copyright 2023, The Khronos Group Inc. 2 | // 3 | // SPDX-License-Identifier: Apache-2.0 4 | 5 | #version 310 es 6 | #extension GL_OVR_multiview : enable 7 | layout(num_views = 2) in; 8 | layout(std140, binding = 0) uniform CameraConstants { 9 | mat4 viewProj[2]; 10 | mat4 modelViewProj[2]; 11 | mat4 model; 12 | vec4 colour; 13 | vec4 pad1; 14 | vec4 pad2; 15 | vec4 pad3; 16 | }; 17 | layout(std140, binding = 1) uniform Normals { 18 | vec4 normals[6]; 19 | }; 20 | layout(location = 0) in highp vec4 a_Positions; 21 | layout(location = 0) out flat uvec2 o_TexCoord; 22 | layout(location = 1) out highp vec3 o_Normal; 23 | layout(location = 2) out flat vec3 o_Colour; 24 | void main() { 25 | gl_Position = modelViewProj[gl_ViewID_OVR] * a_Positions; 26 | int face = gl_VertexID / 6; 27 | o_TexCoord = uvec2(face, 0); 28 | o_Normal = (model * normals[face]).xyz; 29 | o_Colour = colour.rgb; 30 | } 31 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/ShadersMultiview/VertexShader_GL_MV.glsl: -------------------------------------------------------------------------------- 1 | // Copyright 2023, The Khronos Group Inc. 2 | // 3 | // SPDX-License-Identifier: Apache-2.0 4 | 5 | #version 450 6 | #extension GL_KHR_vulkan_glsl : enable 7 | #extension GL_OVR_multiview : enable 8 | layout(num_views = 2) in; 9 | layout(std140, binding = 0) uniform CameraConstants { 10 | mat4 viewProj[2]; 11 | mat4 modelViewProj[2]; 12 | mat4 model; 13 | vec4 color; 14 | vec4 pad1; 15 | vec4 pad2; 16 | vec4 pad3; 17 | }; 18 | layout(std140, binding = 1) uniform Normals { 19 | vec4 normals[6]; 20 | }; 21 | layout(location = 0) in vec4 a_Positions; 22 | layout(location = 0) out flat uvec2 o_TexCoord; 23 | layout(location = 1) out flat vec3 o_Normal; 24 | layout(location = 2) out flat vec3 o_Color; 25 | void main() { 26 | gl_Position = modelViewProj[gl_ViewID_OVR] * a_Positions; 27 | int face = gl_VertexIndex / 6; 28 | o_TexCoord = uvec2(face, 0); 29 | o_Normal = (model * normals[face]).xyz; 30 | o_Color = color.rgb; 31 | } 32 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/ShadersMultiview/VertexShader_VK_MV.glsl: -------------------------------------------------------------------------------- 1 | // Copyright 2023, The Khronos Group Inc. 2 | // 3 | // SPDX-License-Identifier: Apache-2.0 4 | 5 | #version 450 6 | #extension GL_KHR_vulkan_glsl : enable 7 | #extension GL_EXT_multiview : enable 8 | layout(std140, binding = 0) uniform CameraConstants { 9 | mat4 viewProj[2]; 10 | mat4 modelViewProj[2]; 11 | mat4 model; 12 | vec4 color; 13 | vec4 pad1; 14 | vec4 pad2; 15 | vec4 pad3; 16 | }; 17 | layout(std140, binding = 1) uniform Normals { 18 | vec4 normals[6]; 19 | }; 20 | layout(location = 0) in vec4 a_Positions; 21 | layout(location = 0) out flat uvec2 o_TexCoord; 22 | layout(location = 1) out flat vec3 o_Normal; 23 | layout(location = 2) out flat vec3 o_Color; 24 | void main() { 25 | gl_Position = modelViewProj[gl_ViewIndex] * a_Positions; 26 | int face = gl_VertexIndex / 6; 27 | o_TexCoord = uvec2(face, 0); 28 | o_Normal = (model * normals[face]).xyz; 29 | o_Color = color.rgb; 30 | } 31 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/cmake/dxc_shader.cmake: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2019-2023, The Khronos Group Inc. 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | if(WIN32) 6 | find_program(DXC_EXECUTABLE dxc) 7 | endif() 8 | function(dxc_shader) 9 | set(oneValueArgs 10 | INPUT 11 | OUTPUT 12 | OUTPUT_PDB 13 | TYPE 14 | VARIABLE 15 | PROFILE 16 | ENTRY_POINT 17 | ) 18 | set(multiValueArgs EXTRA_DEPENDS) 19 | cmake_parse_arguments( 20 | _dxc 21 | "${options}" 22 | "${oneValueArgs}" 23 | "${multiValueArgs}" 24 | ${ARGN} 25 | ) 26 | 27 | if(DXC_EXECUTABLE) 28 | set(_dxc "${DXC_EXECUTABLE}") 29 | else() 30 | # Hope/assume that it will be in the path at build time 31 | set(_dxc "dxc.exe") 32 | endif() 33 | 34 | set(_dxc_output_args /Fo) 35 | 36 | add_custom_command( 37 | OUTPUT "${_dxc_OUTPUT}" 38 | BYPRODUCTS "${_dxc_OUTPUT_PDB}" 39 | COMMAND 40 | "${_dxc}" 41 | /nologo 42 | ${_dxc_output_args} ${_dxc_OUTPUT} 43 | $<$,$>:/Fd> 44 | $<$,$>:${_dxc_OUTPUT_PDB}> 45 | /T${_dxc_PROFILE} 46 | /E${_dxc_ENTRY_POINT} 47 | $<$:/Od> 48 | $<$:/Zss> 49 | $<$,$>:/Zi> 50 | "${_dxc_INPUT}" 51 | MAIN_DEPENDENCY "${_dxc_INPUT}" 52 | DEPENDS "${_dxc_INPUT}" ${_dxc_EXTRA_DEPENDS} 53 | COMMENT "dxc: ${_dxc_INPUT}" 54 | USES_TERMINAL 55 | VERBATIM 56 | COMMAND_EXPAND_LISTS 57 | ) 58 | 59 | endfunction() 60 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/cmake/fxc_shader.cmake: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2019-2023, The Khronos Group Inc. 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | if(WIN32) 6 | find_program(FXC_EXECUTABLE fxc) 7 | endif() 8 | function(fxc_shader) 9 | set(options GENERATE_HEADER) 10 | set(oneValueArgs 11 | INPUT 12 | OUTPUT 13 | OUTPUT_PDB 14 | TYPE 15 | VARIABLE 16 | PROFILE 17 | ENTRY_POINT 18 | ) 19 | set(multiValueArgs EXTRA_DEPENDS) 20 | cmake_parse_arguments( 21 | _fxc 22 | "${options}" 23 | "${oneValueArgs}" 24 | "${multiValueArgs}" 25 | ${ARGN} 26 | ) 27 | 28 | if(FXC_EXECUTABLE) 29 | set(_fxc "${FXC_EXECUTABLE}") 30 | else() 31 | # Hope/assume that it will be in the path at build time 32 | set(_fxc "fxc.exe") 33 | endif() 34 | 35 | if(_fxc_GENERATE_HEADER) 36 | if(NOT _fxc_VARIABLE) 37 | message( 38 | FATAL_ERROR 39 | "fxc_shader: Need to specify a VARIABLE to generate if generating a header" 40 | ) 41 | endif() 42 | set(_fxc_output_args /Vn "${_fxc_VARIABLE}" /Fh) 43 | else() 44 | set(_fxc_output_args /Fo) 45 | endif() 46 | 47 | add_custom_command( 48 | OUTPUT "${_fxc_OUTPUT}" 49 | BYPRODUCTS "${_fxc_OUTPUT_PDB}" 50 | COMMAND 51 | "${_fxc}" 52 | /nologo 53 | ${_fxc_output_args} ${_fxc_OUTPUT} 54 | $<$,$>:/Fd> 55 | $<$,$>:${_fxc_OUTPUT_PDB}> 56 | /T${_fxc_PROFILE} 57 | /E${_fxc_ENTRY_POINT} 58 | $<$:/Od> 59 | $<$:/Zss> 60 | $<$,$>:/Zi> 61 | "${_fxc_INPUT}" 62 | MAIN_DEPENDENCY "${_fxc_INPUT}" 63 | DEPENDS "${_fxc_INPUT}" ${_fxc_EXTRA_DEPENDS} 64 | COMMENT "FXC: ${_fxc_INPUT}" 65 | USES_TERMINAL 66 | VERBATIM 67 | COMMAND_EXPAND_LISTS 68 | ) 69 | 70 | endfunction() 71 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/cmake/gfxwrapper.cmake: -------------------------------------------------------------------------------- 1 | # Copyright 2023, The Khronos Group Inc. 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | # Build from OpenXR to provide OpenGL (ES) support 6 | if(NOT TARGET openxr-gfxwrapper) 7 | if(ANDROID) 8 | find_package(OpenGLES REQUIRED COMPONENTS V31) 9 | find_package(EGL REQUIRED) 10 | else() 11 | find_package(OpenGL) 12 | endif() 13 | 14 | if(OpenGL_FOUND OR OpenGLES_FOUND) 15 | add_library( 16 | openxr-gfxwrapper STATIC 17 | ${openxr_SOURCE_DIR}/src/common/gfxwrapper_opengl.c 18 | ${openxr_SOURCE_DIR}/src/common/gfxwrapper_opengl.h 19 | ) 20 | target_include_directories( 21 | openxr-gfxwrapper PUBLIC 22 | ${openxr_SOURCE_DIR}/src/common 23 | ${openxr_SOURCE_DIR}/external/include 24 | ) 25 | if(ANDROID) 26 | target_link_libraries( 27 | openxr-gfxwrapper PUBLIC ${OpenGLES_V3_LIBRARY} EGL::EGL 28 | ) 29 | else() 30 | target_link_libraries(openxr-gfxwrapper PUBLIC OpenGL::GL) 31 | endif() 32 | endif() 33 | endif() 34 | -------------------------------------------------------------------------------- /Chapter6_1_Multiview/cmake/graphics_api_select.cmake: -------------------------------------------------------------------------------- 1 | # Copyright 2023, The Khronos Group Inc. 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | include_guard() 6 | 7 | set(XR_TUTORIAL_GRAPHICS_API "VULKAN" CACHE STRING "Which graphics API to use when building the tutorial projects.") 8 | if(WIN32) 9 | set_property(CACHE XR_TUTORIAL_GRAPHICS_API PROPERTY STRINGS D3D11 D3D12 OPENGL VULKAN) 10 | elseif(LINUX AND NOT ANDROID) 11 | set_property(CACHE XR_TUTORIAL_GRAPHICS_API PROPERTY STRINGS OPENGL VULKAN) 12 | elseif(ANDROID) 13 | set_property(CACHE XR_TUTORIAL_GRAPHICS_API PROPERTY STRINGS OPENGL_ES VULKAN) 14 | endif() 15 | 16 | function(AddGraphicsAPIDefine PROJECT_NAME) 17 | target_compile_definitions(${PROJECT_NAME} PUBLIC XR_TUTORIAL_GRAPHICS_API=${XR_TUTORIAL_GRAPHICS_API}) 18 | endfunction(AddGraphicsAPIDefine) 19 | -------------------------------------------------------------------------------- /Common/OpenXRDebugUtils.h: -------------------------------------------------------------------------------- 1 | // Copyright 2023, The Khronos Group Inc. 2 | // 3 | // SPDX-License-Identifier: Apache-2.0 4 | 5 | // OpenXR Tutorial for Khronos Group 6 | 7 | #pragma once 8 | #include 9 | #include 10 | 11 | XrBool32 OpenXRMessageCallbackFunction(XrDebugUtilsMessageSeverityFlagsEXT messageSeverity, XrDebugUtilsMessageTypeFlagsEXT messageType, const XrDebugUtilsMessengerCallbackDataEXT *pCallbackData, void *pUserData); 12 | 13 | XrDebugUtilsMessengerEXT CreateOpenXRDebugUtilsMessenger(XrInstance m_xrInstance); 14 | void DestroyOpenXRDebugUtilsMessenger(XrInstance m_xrInstance, XrDebugUtilsMessengerEXT debugUtilsMessenger); 15 | -------------------------------------------------------------------------------- /Common/OpenXRHelper.h: -------------------------------------------------------------------------------- 1 | // Copyright 2023, The Khronos Group Inc. 2 | // 3 | // SPDX-License-Identifier: Apache-2.0 4 | 5 | // OpenXR Tutorial for Khronos Group 6 | 7 | #pragma once 8 | // Define any XR_USE_PLATFORM_... / XR_USE_GRAPHICS_API_... before this header file. 9 | 10 | // OpenXR Headers 11 | #include 12 | #include 13 | 14 | // For DEBUG_BREAK 15 | #include 16 | 17 | // XR_DOCS_TAG_BEGIN_Helper_Functions0 18 | inline void OpenXRDebugBreak() { 19 | std::cerr << "Breakpoint here to debug." << std::endl; 20 | DEBUG_BREAK; 21 | } 22 | 23 | inline const char* GetXRErrorString(XrInstance xrInstance, XrResult result) { 24 | static char string[XR_MAX_RESULT_STRING_SIZE]; 25 | xrResultToString(xrInstance, result, string); 26 | return string; 27 | } 28 | 29 | #define OPENXR_CHECK(x, y) \ 30 | { \ 31 | XrResult result = (x); \ 32 | if (!XR_SUCCEEDED(result)) { \ 33 | std::cerr << "ERROR: OPENXR: " << int(result) << "(" << (m_xrInstance ? GetXRErrorString(m_xrInstance, result) : "") << ") " << y << std::endl; \ 34 | OpenXRDebugBreak(); \ 35 | } \ 36 | } 37 | // XR_DOCS_TAG_END_Helper_Functions0 38 | -------------------------------------------------------------------------------- /LICENSES/BSD-3-Clause.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) . 2 | 3 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 4 | 5 | 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 6 | 7 | 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 8 | 9 | 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 10 | 11 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 12 | -------------------------------------------------------------------------------- /LICENSES/BSL-1.0.txt: -------------------------------------------------------------------------------- 1 | Boost Software License - Version 1.0 - August 17th, 2003 2 | 3 | Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: 4 | 5 | The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /LICENSES/MIT.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /Shaders/PixelShader.glsl: -------------------------------------------------------------------------------- 1 | // Copyright 2023, The Khronos Group Inc. 2 | // 3 | // SPDX-License-Identifier: Apache-2.0 4 | 5 | #version 450 6 | layout(location = 0) in flat uvec2 i_TexCoord; 7 | layout(location = 1) in vec3 i_Normal; 8 | layout(location = 2) in flat vec3 i_Color; 9 | layout(location = 0) out vec4 o_Color; 10 | layout(std140, binding = 2) uniform Data { 11 | vec4 colors[6]; 12 | } 13 | d_Data; 14 | void main() { 15 | uint i = i_TexCoord.x; 16 | float light = 0.1 + 0.9 * clamp(i_Normal.g, 0.0, 1.0); 17 | o_Color = vec4(light * i_Color.rgb, 1.0); 18 | } 19 | -------------------------------------------------------------------------------- /Shaders/PixelShader.hlsl: -------------------------------------------------------------------------------- 1 | // Copyright 2023, The Khronos Group Inc. 2 | // 3 | // SPDX-License-Identifier: Apache-2.0 4 | 5 | struct PS_IN 6 | { 7 | float4 i_Position : SV_Position; 8 | nointerpolation float2 i_TexCoord : TEXCOORD0; 9 | float3 i_Normal : TEXCOORD1; 10 | nointerpolation float3 i_Color : TEXCOORD2; 11 | }; 12 | struct PS_OUT 13 | { 14 | float4 o_Color : SV_Target0; 15 | }; 16 | 17 | PS_OUT main(PS_IN IN) 18 | { 19 | PS_OUT OUT; 20 | int i = int(IN.i_TexCoord.x); 21 | float light = 0.2 + 0.8 * IN.i_Normal.g; 22 | OUT.o_Color = float4(light * IN.i_Color.rgb, 1.0); 23 | return OUT; 24 | } 25 | -------------------------------------------------------------------------------- /Shaders/PixelShader_GLES.glsl: -------------------------------------------------------------------------------- 1 | // Copyright 2023, The Khronos Group Inc. 2 | // 3 | // SPDX-License-Identifier: Apache-2.0 4 | 5 | #version 310 es 6 | layout(location = 0) in flat uvec2 i_TexCoord; 7 | layout(location = 1) in highp vec3 i_Normal; 8 | layout(location = 2) in flat highp vec3 i_Color; 9 | layout(location = 0) out highp vec4 o_Color; 10 | layout(std140, binding = 2) uniform Data { 11 | highp vec4 colors[6]; 12 | } d_Data; 13 | 14 | void main() { 15 | uint i = i_TexCoord.x; 16 | highp float light = 0.1 + 0.9 * clamp(i_Normal.g, 0.0, 1.0); 17 | o_Color = highp vec4(light * i_Color.rgb, 1.0); 18 | } 19 | -------------------------------------------------------------------------------- /Shaders/VertexShader.glsl: -------------------------------------------------------------------------------- 1 | // Copyright 2023, The Khronos Group Inc. 2 | // 3 | // SPDX-License-Identifier: Apache-2.0 4 | 5 | #version 450 6 | #extension GL_KHR_vulkan_glsl : enable 7 | layout(std140, binding = 0) uniform CameraConstants { 8 | mat4 viewProj; 9 | mat4 modelViewProj; 10 | mat4 model; 11 | vec4 color; 12 | vec4 pad1; 13 | vec4 pad2; 14 | vec4 pad3; 15 | }; 16 | layout(std140, binding = 1) uniform Normals { 17 | vec4 normals[6]; 18 | }; 19 | layout(location = 0) in vec4 a_Positions; 20 | layout(location = 0) out flat uvec2 o_TexCoord; 21 | layout(location = 1) out flat vec3 o_Normal; 22 | layout(location = 2) out flat vec3 o_Color; 23 | void main() { 24 | gl_Position = modelViewProj * a_Positions; 25 | int face = gl_VertexIndex / 6; 26 | o_TexCoord = uvec2(face, 0); 27 | o_Normal = (model * normals[face]).xyz; 28 | o_Color = color.rgb; 29 | } 30 | -------------------------------------------------------------------------------- /Shaders/VertexShader.hlsl: -------------------------------------------------------------------------------- 1 | // Copyright 2023, The Khronos Group Inc. 2 | // 3 | // SPDX-License-Identifier: Apache-2.0 4 | 5 | cbuffer CameraConstants : register(b0) 6 | { 7 | float4x4 viewProj; 8 | float4x4 modelViewProj; 9 | float4x4 model; 10 | float4 color; 11 | float4 pad1; 12 | float4 pad2; 13 | float4 pad3; 14 | }; 15 | cbuffer Normals : register(b1) 16 | { 17 | float4 normals[6]; 18 | }; 19 | 20 | struct VS_IN 21 | { 22 | uint vertexId : SV_VertexId; 23 | float4 a_Positions : TEXCOORD0; 24 | }; 25 | struct VS_OUT 26 | { 27 | float4 o_Position : SV_Position; 28 | nointerpolation float2 o_TexCoord : TEXCOORD0; 29 | float3 o_Normal : TEXCOORD1; 30 | nointerpolation float3 o_Color : TEXCOORD2; 31 | }; 32 | 33 | VS_OUT main(VS_IN IN) 34 | { 35 | VS_OUT OUT; 36 | OUT.o_Position = mul(modelViewProj, IN.a_Positions); 37 | int face = IN.vertexId / 6; 38 | OUT.o_TexCoord = float2(float(face), 0); 39 | OUT.o_Normal = (mul(model, normals[face])).xyz; 40 | OUT.o_Color = color.rgb; 41 | return OUT; 42 | } 43 | -------------------------------------------------------------------------------- /Shaders/VertexShader_GLES.glsl: -------------------------------------------------------------------------------- 1 | // Copyright 2023, The Khronos Group Inc. 2 | // 3 | // SPDX-License-Identifier: Apache-2.0 4 | 5 | #version 310 es 6 | layout(std140, binding = 0) uniform CameraConstants { 7 | mat4 viewProj; 8 | mat4 modelViewProj; 9 | mat4 model; 10 | vec4 colour; 11 | vec4 pad1; 12 | vec4 pad2; 13 | vec4 pad3; 14 | }; 15 | layout(std140, binding = 1) uniform Normals { 16 | vec4 normals[6]; 17 | }; 18 | layout(location = 0) in highp vec4 a_Positions; 19 | layout(location = 0) out flat uvec2 o_TexCoord; 20 | layout(location = 1) out highp vec3 o_Normal; 21 | layout(location = 2) out flat vec3 o_Colour; 22 | void main() { 23 | gl_Position = modelViewProj * a_Positions; 24 | int face = gl_VertexID / 6; 25 | o_TexCoord = uvec2(face, 0); 26 | o_Normal = (model * normals[face]).xyz; 27 | o_Colour = colour.rgb; 28 | } 29 | -------------------------------------------------------------------------------- /build-android-arch.bat: -------------------------------------------------------------------------------- 1 | echo off 2 | 3 | rem Make destination folders 4 | rmdir /s /q build\android_archs 5 | mkdir build\android_archs 6 | 7 | rem Copy the required files and folder to the android_archs folder 8 | xcopy /e /i /q Chapter2\app\src\main\res build\android_archs\app\src\main\res 9 | copy Chapter2\app\src\main\AndroidManifest.xml build\android_archs\app\src\main\AndroidManifest.xml 10 | copy Chapter2\app\build.gradle build\android_archs\app\build.gradle 11 | copy Chapter2\app\proguard-rules.pro build\android_archs\app\proguard-rules.pro 12 | xcopy /e /i /q Chapter2\gradle build\android_archs\gradle 13 | copy Chapter2\build.gradle build\android_archs\build.gradle 14 | copy Chapter2\gradle.properties build\android_archs\gradle.properties 15 | copy Chapter2\gradlew build\android_archs\gradlew 16 | copy Chapter2\gradlew.bat build\android_archs\gradlew.bat 17 | copy Chapter2\settings.gradle build\android_archs\settings.gradle 18 | 19 | rem Zip the folders 20 | pushd build\android_archs 21 | tar -a -cf AndroidBuildFolder.zip ^ 22 | app ^ 23 | gradle ^ 24 | build.gradle ^ 25 | gradle.properties ^ 26 | gradlew ^ 27 | gradlew.bat ^ 28 | settings.gradle 29 | popd 30 | 31 | rem Remove destination file and folders 32 | rmdir /s /q build\android_archs\app\ 33 | rmdir /s /q build\android_archs\gradle 34 | del build\android_archs\build.gradle 35 | del build\android_archs\gradle.properties 36 | del build\android_archs\gradlew 37 | del build\android_archs\gradlew.bat 38 | del build\android_archs\settings.gradle -------------------------------------------------------------------------------- /build-android-arch.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #Make destination folders 4 | rm -rf build/android_archs 5 | mkdir -p build/android_archs 6 | mkdir -p build/android_archs/app/src/main/res/drawable 7 | mkdir -p build/android_archs/app/src/main/res/drawable-v24 8 | mkdir -p build/android_archs/app/src/main/res/mipmap-anydpi-v26 9 | mkdir -p build/android_archs/app/src/main/res/mipmap-hdpi 10 | mkdir -p build/android_archs/app/src/main/res/mipmap-mdpi 11 | mkdir -p build/android_archs/app/src/main/res/mipmap-xhdpi 12 | mkdir -p build/android_archs/app/src/main/res/mipmap-xxhdpi 13 | mkdir -p build/android_archs/app/src/main/res/mipmap-xxxhdpi 14 | mkdir -p build/android_archs/app/src/main/res/values 15 | 16 | #Copy the required files and folder to the android_archs folder 17 | cp -r Chapter2/app/src/main/res build/android_archs/app/src/main 18 | cp Chapter2/app/src/main/AndroidManifest.xml build/android_archs/app/src/main/AndroidManifest.xml 19 | cp Chapter2/app/build.gradle build/android_archs/app/build.gradle 20 | cp Chapter2/app/proguard-rules.pro build/android_archs/app/proguard-rules.pro 21 | cp -r Chapter2/gradle build/android_archs/gradle 22 | cp Chapter2/build.gradle build/android_archs/build.gradle 23 | cp Chapter2/gradle.properties build/android_archs/gradle.properties 24 | cp Chapter2/gradlew build/android_archs/gradlew 25 | cp Chapter2/gradlew.bat build/android_archs/gradlew.bat 26 | cp Chapter2/settings.gradle build/android_archs/settings.gradle 27 | 28 | #Zip the folders 29 | pushd build/android_archs 30 | zip -r AndroidBuildFolder.zip \ 31 | app \ 32 | gradle \ 33 | build.gradle \ 34 | gradle.properties \ 35 | gradlew \ 36 | gradlew.bat \ 37 | settings.gradle 38 | popd 39 | 40 | #Remove destination file and folders 41 | rm -rf build/android_archs/app/ 42 | rm -rf build/android_archs/gradle 43 | rm build/android_archs/build.gradle 44 | rm build/android_archs/gradle.properties 45 | rm build/android_archs/gradlew 46 | rm build/android_archs/gradlew.bat 47 | rm build/android_archs/settings.gradle 48 | -------------------------------------------------------------------------------- /build-site.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mkdir -p build/_deps 4 | pushd build/_deps 5 | git clone --depth 1 https://github.com/KhronosGroup/OpenXR-SDK.git openxr-build 6 | popd 7 | 8 | python3 -m pip install -r requirements.txt 9 | 10 | sphinx-build --version 11 | 12 | mkdir -p build/html/android/opengles 13 | mkdir -p build/html/android/vulkan 14 | mkdir -p build/html/linux/opengl 15 | mkdir -p build/html/linux/vulkan 16 | mkdir -p build/html/windows/d3d11 17 | mkdir -p build/html/windows/d3d12 18 | mkdir -p build/html/windows/opengl 19 | mkdir -p build/html/windows/vulkan 20 | 21 | export OPENXR_TUTORIALS_GIT_TAG=$1 22 | 23 | sphinx-build -M html tutorial build index.rst -t OPENXR_MAINSITE -D html_baseurl=https://openxr-tutorial.com/ 24 | 25 | sphinx-build -M html tutorial build/android/opengles -t android -t opengles -t OPENXR_SUBSITE -D html_baseurl=https://openxr-tutorial.com/ 26 | sphinx-build -M html tutorial build/android/vulkan -t android -t vulkan -t OPENXR_SUBSITE -D html_baseurl=https://openxr-tutorial.com/ 27 | 28 | sphinx-build -M html tutorial build/linux/opengl -t linux -t opengl -t OPENXR_SUBSITE -D html_baseurl=https://openxr-tutorial.com/ 29 | sphinx-build -M html tutorial build/linux/vulkan -t linux -t vulkan -t OPENXR_SUBSITE -D html_baseurl=https://openxr-tutorial.com/ 30 | 31 | sphinx-build -M html tutorial build/windows/d3d11 -t windows -t d3d11 -t OPENXR_SUBSITE -D html_baseurl=https://openxr-tutorial.com/ 32 | sphinx-build -M html tutorial build/windows/d3d12 -t windows -t d3d12 -t OPENXR_SUBSITE -D html_baseurl=https://openxr-tutorial.com/ 33 | sphinx-build -M html tutorial build/windows/opengl -t windows -t opengl -t OPENXR_SUBSITE -D html_baseurl=https://openxr-tutorial.com/ 34 | sphinx-build -M html tutorial build/windows/vulkan -t windows -t vulkan -t OPENXR_SUBSITE -D html_baseurl=https://openxr-tutorial.com/ 35 | 36 | unset OPENXR_TUTORIALS_GIT_TAG 37 | 38 | cp -r build/android/opengles/html/. build/html/android/opengles 39 | cp -r build/android/vulkan/html/. build/html/android/vulkan 40 | cp -r build/linux/opengl/html/. build/html/linux/opengl 41 | cp -r build/linux/vulkan/html/. build/html/linux/vulkan 42 | cp -r build/windows/d3d11/html/. build/html/windows/d3d11 43 | cp -r build/windows/d3d12/html/. build/html/windows/d3d12 44 | cp -r build/windows/opengl/html/. build/html/windows/opengl 45 | cp -r build/windows/vulkan/html/. build/html/windows/vulkan 46 | 47 | cp thirdparty/index_android.html build/html/android/index.html 48 | cp thirdparty/index_linux.html build/html/linux/index.html 49 | cp thirdparty/index_windows.html build/html/windows/index.html 50 | 51 | tar -czvf site.tar.gz build/html 52 | -------------------------------------------------------------------------------- /cmake/fxc_shader.cmake: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2019-2023, The Khronos Group Inc. 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | if(WIN32) 6 | find_program(FXC_EXECUTABLE fxc) 7 | endif() 8 | function(fxc_shader) 9 | set(options GENERATE_HEADER) 10 | set(oneValueArgs 11 | INPUT 12 | OUTPUT 13 | OUTPUT_PDB 14 | TYPE 15 | VARIABLE 16 | PROFILE 17 | ENTRY_POINT 18 | ) 19 | set(multiValueArgs EXTRA_DEPENDS) 20 | cmake_parse_arguments( 21 | _fxc 22 | "${options}" 23 | "${oneValueArgs}" 24 | "${multiValueArgs}" 25 | ${ARGN} 26 | ) 27 | 28 | if(FXC_EXECUTABLE) 29 | set(_fxc "${FXC_EXECUTABLE}") 30 | else() 31 | # Hope/assume that it will be in the path at build time 32 | set(_fxc "fxc.exe") 33 | endif() 34 | 35 | if(_fxc_GENERATE_HEADER) 36 | if(NOT _fxc_VARIABLE) 37 | message( 38 | FATAL_ERROR 39 | "fxc_shader: Need to specify a VARIABLE to generate if generating a header" 40 | ) 41 | endif() 42 | set(_fxc_output_args /Vn "${_fxc_VARIABLE}" /Fh) 43 | else() 44 | set(_fxc_output_args /Fo) 45 | endif() 46 | 47 | add_custom_command( 48 | OUTPUT "${_fxc_OUTPUT}" 49 | BYPRODUCTS "${_fxc_OUTPUT_PDB}" 50 | COMMAND 51 | "${_fxc}" 52 | /nologo 53 | ${_fxc_output_args} ${_fxc_OUTPUT} 54 | $<$,$>:/Fd> 55 | $<$,$>:${_fxc_OUTPUT_PDB}> 56 | /T${_fxc_PROFILE} 57 | /E${_fxc_ENTRY_POINT} 58 | $<$:/Od> 59 | $<$:/Zss> 60 | $<$,$>:/Zi> 61 | "${_fxc_INPUT}" 62 | MAIN_DEPENDENCY "${_fxc_INPUT}" 63 | DEPENDS "${_fxc_INPUT}" ${_fxc_EXTRA_DEPENDS} 64 | COMMENT "FXC: ${_fxc_INPUT}" 65 | USES_TERMINAL 66 | VERBATIM 67 | COMMAND_EXPAND_LISTS 68 | ) 69 | 70 | endfunction() 71 | -------------------------------------------------------------------------------- /cmake/gfxwrapper.cmake: -------------------------------------------------------------------------------- 1 | # Copyright 2023, The Khronos Group Inc. 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | # Build from OpenXR to provide OpenGL (ES) support 6 | if(NOT TARGET openxr-gfxwrapper) 7 | if(ANDROID) 8 | find_package(OpenGLES REQUIRED COMPONENTS V31) 9 | find_package(EGL REQUIRED) 10 | else() 11 | find_package(OpenGL) 12 | endif() 13 | 14 | if(OpenGL_FOUND OR OpenGLES_FOUND) 15 | add_library( 16 | openxr-gfxwrapper STATIC 17 | ${openxr_SOURCE_DIR}/src/common/gfxwrapper_opengl.c 18 | ${openxr_SOURCE_DIR}/src/common/gfxwrapper_opengl.h 19 | ) 20 | target_include_directories( 21 | openxr-gfxwrapper PUBLIC 22 | ${openxr_SOURCE_DIR}/src/common 23 | ${openxr_SOURCE_DIR}/external/include 24 | ) 25 | if(ANDROID) 26 | target_link_libraries( 27 | openxr-gfxwrapper PUBLIC ${OpenGLES_V3_LIBRARY} EGL::EGL 28 | ) 29 | else() 30 | target_link_libraries(openxr-gfxwrapper PUBLIC OpenGL::GL) 31 | endif() 32 | endif() 33 | endif() 34 | -------------------------------------------------------------------------------- /cmake/graphics_api_select.cmake: -------------------------------------------------------------------------------- 1 | # Copyright 2023, The Khronos Group Inc. 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | include_guard() 6 | 7 | 8 | set(XR_TUTORIAL_GRAPHICS_API "VULKAN" CACHE STRING "Which graphics API to use when building the tutorial projects.") 9 | 10 | IF(DEFINED ENV{GFX}) 11 | message(STATUS, "Overriding graphics api: " $ENV{GFX} ) 12 | set_property(CACHE XR_TUTORIAL_GRAPHICS_API PROPERTY VALUE $ENV{GFX}) 13 | endif() 14 | 15 | function(AddGraphicsAPIDefine PROJECT_NAME) 16 | target_compile_definitions(${PROJECT_NAME} PUBLIC XR_TUTORIAL_GRAPHICS_API=${XR_TUTORIAL_GRAPHICS_API}) 17 | endfunction(AddGraphicsAPIDefine) 18 | -------------------------------------------------------------------------------- /eoc-archs-rm-tags.py: -------------------------------------------------------------------------------- 1 | # Copyright 2023, The Khronos Group Inc. 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | #https://stackoverflow.com/questions/44977441/delete-line-from-text-file-if-line-contains-one-of-few-specified-strings-python 6 | 7 | import os 8 | import sys 9 | import getopt 10 | 11 | def StringIsFoundInLine(line, strings): 12 | return any([string in line for string in strings]) 13 | 14 | def main(argv): 15 | filepath="" 16 | opts, args = getopt.getopt(argv, "hf:") 17 | for opt, arg in opts: 18 | if opt == "-h": 19 | print("usage: eoc-archs-rm-tags.py -f ") 20 | sys.exit(0) 21 | elif opt in "-f": 22 | filepath = arg 23 | else: 24 | continue 25 | 26 | if not filepath: 27 | print("ERROR: No filepath provide in the command line arguments.") 28 | sys.exit(0) 29 | else: 30 | filepath = os.path.abspath(filepath.strip()) 31 | 32 | newLines = [] 33 | tags = ["XR_DOCS_TAG_"] 34 | 35 | file = open(filepath, "r") 36 | for line in file: 37 | if StringIsFoundInLine(line, tags): 38 | continue 39 | else: 40 | newLines.append(line) 41 | 42 | file.close() 43 | 44 | filepath_temp = filepath + ".tmp" 45 | w_file = open(filepath_temp, "w") 46 | w_file.writelines(newLines) 47 | w_file.close() 48 | 49 | os.remove(filepath) 50 | os.rename(filepath_temp, filepath) 51 | 52 | if __name__ == "__main__": 53 | main(sys.argv[1:]) 54 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | sphinx == 6.1.3 2 | myst_parser 3 | sphinxcontrib-mermaid 4 | sphinxcontrib-jquery 5 | sphinx_copybutton 6 | breathe 7 | reuse 8 | -------------------------------------------------------------------------------- /reuse/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # Copyright 2023, The Khronos Group Inc. 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | cmake_minimum_required(VERSION 3.22) 6 | 7 | # Find Python 8 | find_package(Python3 REQUIRED COMPONENTS Interpreter) 9 | #message(STATUS "Python Version: ${Python3_VERSION}") 10 | 11 | if(NOT Python3_FOUND) 12 | message(WARNING "Unable to find Python3 for reuse.") 13 | return() 14 | elseif(${Python3_VERSION} VERSION_LESS 3.8) 15 | message(WARNING "reuse requires Python Version 3.8+.") 16 | return() 17 | else() 18 | # Find/Install the reuse package 19 | execute_process( 20 | COMMAND pip3 show reuse 21 | RESULT_VARIABLE EXIT_CODE 22 | OUTPUT_QUIET 23 | ) 24 | if(NOT ${EXIT_CODE} EQUAL 0) 25 | execute_process(COMMAND pip3 install --user reuse) 26 | execute_process( 27 | COMMAND pip3 show reuse 28 | RESULT_VARIABLE EXIT_CODE 29 | OUTPUT_QUIET 30 | ) 31 | if(NOT ${EXIT_CODE} EQUAL 0) 32 | message(WARNING "Unable to find Python package: reuse.") 33 | return() 34 | endif() 35 | endif() 36 | endif() 37 | 38 | #Append PATH 39 | if(WIN32) 40 | file( 41 | REAL_PATH 42 | "~/AppData/Roaming/Python/Python${Python3_VERSION_MAJOR}${Python3_VERSION_MINOR}/Scripts" 43 | REUSE_PATH 44 | EXPAND_TILDE 45 | ) 46 | elseif(LINUX) 47 | set(REUSE_PATH "~/.local/bin") 48 | endif() 49 | 50 | message(STATUS "${REUSE_PATH}/reuse lint") 51 | execute_process( 52 | COMMAND ${REUSE_PATH}/reuse lint WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} 53 | ) 54 | -------------------------------------------------------------------------------- /thirdparty/CMakeLists_Ch1_Main.txt: -------------------------------------------------------------------------------- 1 | # Copyright 2023, The Khronos Group Inc. 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | cmake_minimum_required(VERSION 3.22.1) 6 | 7 | project(openxr-tutorial) 8 | 9 | set(CMAKE_CONFIGURATION_TYPES "Debug;Release") 10 | 11 | # Optional override runtime 12 | set(XR_RUNTIME_JSON 13 | "$ENV{XR_RUNTIME_JSON}" 14 | CACHE PATH 15 | "Optional location of a specific OpenXR runtime configuration file." 16 | ) 17 | 18 | add_subdirectory(Chapter1) 19 | -------------------------------------------------------------------------------- /thirdparty/CMakeLists_Ch2_Main.txt: -------------------------------------------------------------------------------- 1 | # Copyright 2023, The Khronos Group Inc. 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | cmake_minimum_required(VERSION 3.22.1) 6 | 7 | project(openxr-tutorial) 8 | 9 | set(CMAKE_CONFIGURATION_TYPES "Debug;Release") 10 | 11 | # Optional override runtime 12 | set(XR_RUNTIME_JSON 13 | "$ENV{XR_RUNTIME_JSON}" 14 | CACHE PATH 15 | "Optional location of a specific OpenXR runtime configuration file." 16 | ) 17 | 18 | add_subdirectory(Chapter2) 19 | -------------------------------------------------------------------------------- /thirdparty/CMakeLists_Ch3_Main.txt: -------------------------------------------------------------------------------- 1 | # Copyright 2023, The Khronos Group Inc. 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | cmake_minimum_required(VERSION 3.22.1) 6 | 7 | project(openxr-tutorial) 8 | 9 | set(CMAKE_CONFIGURATION_TYPES "Debug;Release") 10 | 11 | # Optional override runtime 12 | set(XR_RUNTIME_JSON 13 | "$ENV{XR_RUNTIME_JSON}" 14 | CACHE PATH 15 | "Optional location of a specific OpenXR runtime configuration file." 16 | ) 17 | 18 | add_subdirectory(Chapter3) 19 | -------------------------------------------------------------------------------- /thirdparty/CMakeLists_Ch4_Main.txt: -------------------------------------------------------------------------------- 1 | # Copyright 2023, The Khronos Group Inc. 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | cmake_minimum_required(VERSION 3.22.1) 6 | 7 | project(openxr-tutorial) 8 | 9 | set(CMAKE_CONFIGURATION_TYPES "Debug;Release") 10 | 11 | # Optional override runtime 12 | set(XR_RUNTIME_JSON 13 | "$ENV{XR_RUNTIME_JSON}" 14 | CACHE PATH 15 | "Optional location of a specific OpenXR runtime configuration file." 16 | ) 17 | 18 | add_subdirectory(Chapter4) 19 | -------------------------------------------------------------------------------- /thirdparty/CMakeLists_Ch5_Main.txt: -------------------------------------------------------------------------------- 1 | # Copyright 2023, The Khronos Group Inc. 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | cmake_minimum_required(VERSION 3.22.1) 6 | 7 | project(openxr-tutorial) 8 | 9 | set(CMAKE_CONFIGURATION_TYPES "Debug;Release") 10 | 11 | # Optional override runtime 12 | set(XR_RUNTIME_JSON 13 | "$ENV{XR_RUNTIME_JSON}" 14 | CACHE PATH 15 | "Optional location of a specific OpenXR runtime configuration file." 16 | ) 17 | 18 | add_subdirectory(Chapter5) 19 | -------------------------------------------------------------------------------- /thirdparty/index_android.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Example title 6 | 7 | 8 | -------------------------------------------------------------------------------- /thirdparty/index_linux.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Example title 6 | 7 | 8 | -------------------------------------------------------------------------------- /thirdparty/index_windows.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Example title 6 | 7 | 8 | -------------------------------------------------------------------------------- /thirdparty/openxr_loader_manifest_only-1.0.27.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/thirdparty/openxr_loader_manifest_only-1.0.27.aar -------------------------------------------------------------------------------- /tutorial/.htaccess: -------------------------------------------------------------------------------- 1 | RewriteMap tutorialmap "txt:tutorialmap.txt" 2 | RewriteRule "^/(.*)/(.*)" "/${tutorialmap:$1-$2|NOTFOUND}" [PT] 3 | RewriteRule "^android/$" "android/vulkan" 4 | RewriteRule "^windows/$" "windows/vulkan" 5 | RewriteRule "^linux/$" "linux/vulkan" 6 | RewriteRule "^android$" "android/vulkan" 7 | RewriteRule "^windows$" "windows/vulkan" 8 | RewriteRule "^linux$" "linux/vulkan" 9 | -------------------------------------------------------------------------------- /tutorial/FindSphinx.cmake: -------------------------------------------------------------------------------- 1 | #Look for an executable called sphinx-build 2 | find_program(SPHINX_EXECUTABLE 3 | NAMES sphinx-build 4 | DOC "Path to sphinx-build executable") 5 | 6 | include(FindPackageHandleStandardArgs) 7 | 8 | #Handle standard arguments to find_package like REQUIRED and QUIET 9 | find_package_handle_standard_args(Sphinx 10 | "Failed to find sphinx-build executable" 11 | SPHINX_EXECUTABLE) 12 | -------------------------------------------------------------------------------- /tutorial/Icons/AllIcons.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/Icons/AllIcons.psd -------------------------------------------------------------------------------- /tutorial/OpenXR-Coordinate-System.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/OpenXR-Coordinate-System.png -------------------------------------------------------------------------------- /tutorial/OpenXR-ReferenceSpace-Local.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/OpenXR-ReferenceSpace-Local.png -------------------------------------------------------------------------------- /tutorial/OpenXR-ReferenceSpace-Stage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/OpenXR-ReferenceSpace-Stage.png -------------------------------------------------------------------------------- /tutorial/OpenXR-ReferenceSpace-View.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/OpenXR-ReferenceSpace-View.png -------------------------------------------------------------------------------- /tutorial/OpenXRAfter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/OpenXRAfter.png -------------------------------------------------------------------------------- /tutorial/OpenXRBefore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/OpenXRBefore.png -------------------------------------------------------------------------------- /tutorial/OpenXRBeforeAfter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/OpenXRBeforeAfter.png -------------------------------------------------------------------------------- /tutorial/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/favicon.ico -------------------------------------------------------------------------------- /tutorial/images/Chapter4-Screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/images/Chapter4-Screenshot.png -------------------------------------------------------------------------------- /tutorial/images/GradleSync.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/images/GradleSync.png -------------------------------------------------------------------------------- /tutorial/images/LocalSpace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/images/LocalSpace.png -------------------------------------------------------------------------------- /tutorial/images/OpenXRBeforeAfter.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/images/OpenXRBeforeAfter.psd -------------------------------------------------------------------------------- /tutorial/images/OpenXRSpaces.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/images/OpenXRSpaces.png -------------------------------------------------------------------------------- /tutorial/images/OpenXR_170px_Feb17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/images/OpenXR_170px_Feb17.png -------------------------------------------------------------------------------- /tutorial/images/OpenXR_500px_Feb17_RGB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/images/OpenXR_500px_Feb17_RGB.png -------------------------------------------------------------------------------- /tutorial/images/OpenXR_500px_Feb17_White.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/images/OpenXR_500px_Feb17_White.png -------------------------------------------------------------------------------- /tutorial/images/Spaces.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/images/Spaces.psd -------------------------------------------------------------------------------- /tutorial/images/StageSpace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/images/StageSpace.png -------------------------------------------------------------------------------- /tutorial/images/StageSpaceOnly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/images/StageSpaceOnly.png -------------------------------------------------------------------------------- /tutorial/images/VSCodeCMakeLinux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/images/VSCodeCMakeLinux.png -------------------------------------------------------------------------------- /tutorial/images/ViewSpace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/images/ViewSpace.png -------------------------------------------------------------------------------- /tutorial/images/android-studio-build-run-toolbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/images/android-studio-build-run-toolbar.png -------------------------------------------------------------------------------- /tutorial/images/android-studio-newproject-options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/images/android-studio-newproject-options.png -------------------------------------------------------------------------------- /tutorial/images/android-studio-newproject.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/images/android-studio-newproject.png -------------------------------------------------------------------------------- /tutorial/images/linux-vscode-initial-files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/images/linux-vscode-initial-files.png -------------------------------------------------------------------------------- /tutorial/images/multithreaded_complex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/images/multithreaded_complex.png -------------------------------------------------------------------------------- /tutorial/images/multithreaded_simple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/images/multithreaded_simple.png -------------------------------------------------------------------------------- /tutorial/images/standard-poses.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/images/standard-poses.png -------------------------------------------------------------------------------- /tutorial/linux-vscode-cmake-configure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/linux-vscode-cmake-configure.png -------------------------------------------------------------------------------- /tutorial/linux-vscode-open-folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/linux-vscode-open-folder.png -------------------------------------------------------------------------------- /tutorial/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | 3 | Sitemap: https://openxr-tutorial.com/sitemap.xml 4 | -------------------------------------------------------------------------------- /tutorial/screencapture-openxr-tutorial-index.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/screencapture-openxr-tutorial-index.png -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/da/LC_MESSAGES/sphinx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/locale/da/LC_MESSAGES/sphinx.mo -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/de/LC_MESSAGES/sphinx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/locale/de/LC_MESSAGES/sphinx.mo -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/en/LC_MESSAGES/sphinx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/locale/en/LC_MESSAGES/sphinx.mo -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/es/LC_MESSAGES/sphinx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/locale/es/LC_MESSAGES/sphinx.mo -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/et/LC_MESSAGES/sphinx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/locale/et/LC_MESSAGES/sphinx.mo -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/fa_IR/LC_MESSAGES/sphinx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/locale/fa_IR/LC_MESSAGES/sphinx.mo -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/fr/LC_MESSAGES/sphinx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/locale/fr/LC_MESSAGES/sphinx.mo -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/hr/LC_MESSAGES/sphinx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/locale/hr/LC_MESSAGES/sphinx.mo -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/hr/LC_MESSAGES/sphinx.po: -------------------------------------------------------------------------------- 1 | # English translations for sphinx_rtd_theme. 2 | # Copyright (C) 2019 ORGANIZATION 3 | # This file is distributed under the same license as the sphinx_rtd_theme 4 | # project. 5 | # FIRST AUTHOR , 2019. 6 | # 7 | # Translators: 8 | # Ivan Bratović, 2022 9 | # 10 | msgid "" 11 | msgstr "" 12 | "Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n" 13 | "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" 14 | "POT-Creation-Date: 2023-02-06 15:36+0100\n" 15 | "PO-Revision-Date: 2019-07-16 21:44+0000\n" 16 | "Last-Translator: Ivan Bratović, 2022\n" 17 | "Language-Team: Croatian (https://www.transifex.com/readthedocs/teams/101354/hr/)\n" 18 | "MIME-Version: 1.0\n" 19 | "Content-Type: text/plain; charset=UTF-8\n" 20 | "Content-Transfer-Encoding: 8bit\n" 21 | "Generated-By: Babel 2.11.0\n" 22 | "Language: hr\n" 23 | "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" 24 | -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/hu/LC_MESSAGES/sphinx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/locale/hu/LC_MESSAGES/sphinx.mo -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/hu/LC_MESSAGES/sphinx.po: -------------------------------------------------------------------------------- 1 | # English translations for sphinx_rtd_theme. 2 | # Copyright (C) 2019 ORGANIZATION 3 | # This file is distributed under the same license as the sphinx_rtd_theme 4 | # project. 5 | # FIRST AUTHOR , 2019. 6 | # 7 | # Translators: 8 | # Balázs Úr, 2022 9 | # 10 | msgid "" 11 | msgstr "" 12 | "Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n" 13 | "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" 14 | "POT-Creation-Date: 2023-02-06 15:36+0100\n" 15 | "PO-Revision-Date: 2019-07-16 21:44+0000\n" 16 | "Last-Translator: Balázs Úr, 2022\n" 17 | "Language-Team: Hungarian (https://www.transifex.com/readthedocs/teams/101354/hu/)\n" 18 | "MIME-Version: 1.0\n" 19 | "Content-Type: text/plain; charset=UTF-8\n" 20 | "Content-Transfer-Encoding: 8bit\n" 21 | "Generated-By: Babel 2.11.0\n" 22 | "Language: hu\n" 23 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 24 | -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/it/LC_MESSAGES/sphinx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/locale/it/LC_MESSAGES/sphinx.mo -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/lt/LC_MESSAGES/sphinx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/locale/lt/LC_MESSAGES/sphinx.mo -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/nl/LC_MESSAGES/sphinx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/locale/nl/LC_MESSAGES/sphinx.mo -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/pl/LC_MESSAGES/sphinx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/locale/pl/LC_MESSAGES/sphinx.mo -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/pt/LC_MESSAGES/sphinx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/locale/pt/LC_MESSAGES/sphinx.mo -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/pt_BR/LC_MESSAGES/sphinx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/locale/pt_BR/LC_MESSAGES/sphinx.mo -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/ru/LC_MESSAGES/sphinx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/locale/ru/LC_MESSAGES/sphinx.mo -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/sv/LC_MESSAGES/sphinx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/locale/sv/LC_MESSAGES/sphinx.mo -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/tr/LC_MESSAGES/sphinx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/locale/tr/LC_MESSAGES/sphinx.mo -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/zh_CN/LC_MESSAGES/sphinx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/locale/zh_CN/LC_MESSAGES/sphinx.mo -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/zh_TW/LC_MESSAGES/sphinx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/locale/zh_TW/LC_MESSAGES/sphinx.mo -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/locale/zh_TW/LC_MESSAGES/sphinx.po: -------------------------------------------------------------------------------- 1 | # English translations for sphinx_rtd_theme. 2 | # Copyright (C) 2019 ORGANIZATION 3 | # This file is distributed under the same license as the sphinx_rtd_theme 4 | # project. 5 | # FIRST AUTHOR , 2019. 6 | # 7 | # Translators: 8 | # Jason Zhou, 2023 9 | # 10 | msgid "" 11 | msgstr "" 12 | "Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n" 13 | "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" 14 | "POT-Creation-Date: 2023-02-06 15:36+0100\n" 15 | "PO-Revision-Date: 2019-07-16 21:44+0000\n" 16 | "Last-Translator: Jason Zhou, 2023\n" 17 | "Language-Team: Chinese (Taiwan) (https://www.transifex.com/readthedocs/teams/101354/zh_TW/)\n" 18 | "MIME-Version: 1.0\n" 19 | "Content-Type: text/plain; charset=UTF-8\n" 20 | "Content-Transfer-Encoding: 8bit\n" 21 | "Generated-By: Babel 2.11.0\n" 22 | "Language: zh_TW\n" 23 | "Plural-Forms: nplurals=1; plural=0;\n" 24 | -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/platforms.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | {{ platform_api }} 5 | 17 |
18 | 19 | 20 | 21 | 28 | 29 | 37 | -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/search.html: -------------------------------------------------------------------------------- 1 | {# 2 | basic/search.html 3 | ~~~~~~~~~~~~~~~~~ 4 | 5 | Template for the search page. 6 | 7 | :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS. 8 | :license: BSD, see https://github.com/sphinx-doc/sphinx/blob/master/LICENSE for details. 9 | #} 10 | {%- extends "layout.html" %} 11 | {% set title = _('Search') %} 12 | {% set display_vcs_links = False %} 13 | {%- block scripts %} 14 | {{ super() }} 15 | 16 | 17 | {%- endblock %} 18 | {% block footer %} 19 | 22 | {# this is used when loading the search index using $.ajax fails, 23 | such as on Chrome for documents on localhost #} 24 | 25 | {{ super() }} 26 | {% endblock %} 27 | {% block body %} 28 | 36 | 37 | {% if search_performed %} 38 | {# Translators: Search is a noun, not a verb #} 39 |

{{ _('Search Results') }}

40 | {% if not search_results %} 41 |

{{ _('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.') }}

42 | {% endif %} 43 | {% endif %} 44 |
45 | {% if search_results %} 46 |
    47 | {% for href, caption, context in search_results %} 48 |
  • 49 | {{ caption }} 50 |

    {{ context|e }}

    51 |
  • 52 | {% endfor %} 53 |
54 | {% endif %} 55 |
56 | {% endblock %} 57 | -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/searchbox.html: -------------------------------------------------------------------------------- 1 | {%- if 'singlehtml' not in builder %} 2 |
3 | {%- if tutorial_root_site|tobool %} 4 |
5 | {%- else %} 6 | 7 | {%- endif %} 8 | 9 | 10 | 11 | 12 |
13 |
14 | {%- endif %} 15 | -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/219065020-huge.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/219065020-huge.jpg -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/Clipboard Image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/Clipboard Image.jpg -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/OpenXR-landing-page-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/OpenXR-landing-page-banner.png -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/android-colour.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/android-mono.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/badge_only.css: -------------------------------------------------------------------------------- 1 | .clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} 2 | -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/fonts/Roboto-Slab-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/fonts/Roboto-Slab-Bold.woff -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/fonts/Roboto-Slab-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/fonts/Roboto-Slab-Bold.woff2 -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/fonts/Roboto-Slab-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/fonts/Roboto-Slab-Regular.woff -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/fonts/Roboto-Slab-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/fonts/Roboto-Slab-Regular.woff2 -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/fonts/lato-bold-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/fonts/lato-bold-italic.woff -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/fonts/lato-bold-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/fonts/lato-bold-italic.woff2 -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/fonts/lato-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/fonts/lato-bold.woff -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/fonts/lato-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/fonts/lato-bold.woff2 -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/fonts/lato-normal-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/fonts/lato-normal-italic.woff -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/fonts/lato-normal-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/fonts/lato-normal-italic.woff2 -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/fonts/lato-normal.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/fonts/lato-normal.woff -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/fonts/lato-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/fonts/lato-normal.woff2 -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/icons/Android/Android_robot-204x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/icons/Android/Android_robot-204x240.png -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/icons/Android/Android_robot-409x480.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/icons/Android/Android_robot-409x480.png -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/icons/Android/Android_robot-512x601.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/icons/Android/Android_robot-512x601.png -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/icons/Android/Android_robot-black.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/icons/Android/Android_robot.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/icons/Android/Attribution.txt: -------------------------------------------------------------------------------- 1 | Android Robot 2 | Credit: Google Inc., CC BY 3.0 , via Wikimedia Commons 3 | Source: https://commons.wikimedia.org/wiki/File:Android_robot.svg 4 | Download Date: 2023-07-11 5 | -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/icons/Tux/Attribution.txt: -------------------------------------------------------------------------------- 1 | Tux - Linux mascot 2 | License: CC-BY (sort-of) 3 | Credit: Permission to use and/or modify this image is granted provided you acknowledge me lewing@isc.tamu.edu and The GIMP if someone asks. 4 | Source: https://isc.tamu.edu/~lewing/linux/ 5 | Download Date: 2023-07-11 6 | 7 | SVG Variants: 8 | Color 9 | Source: https://commons.wikimedia.org/wiki/File:Tux_Classic_flat_look_v1.1.svg 10 | 11 | Mono 12 | License: GPU General Public License V2+ 13 | Source: https://commons.wikimedia.org/wiki/File:Tux_Mono.svg 14 | -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/icons/Tux/tux-bw-258x303.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/icons/Tux/tux-bw-258x303.gif -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/icons/Tux/tux-color-258x303.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/icons/Tux/tux-color-258x303.gif -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/icons/Vector_down_arrow_link.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/icons/share_FILL0_wght400_GRAD0_opsz24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/shutterstock_219065020.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/shutterstock_219065020.jpg -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/shutterstock_532086997-original.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/shutterstock_532086997-original.jpg -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/shutterstock_532086997.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/shutterstock_532086997.jpg -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/shutterstock_532086997.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KhronosGroup/OpenXR-Tutorials/e493c17ca24caf5a9fec4f7085e8a520fa211888/tutorial/tutorial_sphinx_theme_1/static/css/shutterstock_532086997.png -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/windows-colour.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/css/windows-mono.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/js/badge_only.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}}); 2 | -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/js/html5shiv.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed 3 | */ 4 | !function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); 5 | -------------------------------------------------------------------------------- /tutorial/tutorial_sphinx_theme_1/static/js/js.cookie.min.js: -------------------------------------------------------------------------------- 1 | /*! js-cookie v3.0.1 | MIT */ 2 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self,function(){var n=e.Cookies,o=e.Cookies=t();o.noConflict=function(){return e.Cookies=n,o}}())}(this,(function(){"use strict";function e(e){for(var t=1;t 4 | 5 | Read the Docs 6 | v: {{ current_version }} 7 | 8 | 9 |
10 |
11 |
{{ _('Versions') }}
12 | {% for slug, url in versions %} 13 |
{{ slug }}
14 | {% endfor %} 15 |
16 |
17 |
{{ _('Downloads') }}
18 | {% for type, url in downloads %} 19 |
{{ type }}
20 | {% endfor %} 21 |
22 |
23 | {# Translators: The phrase "Read the Docs" is not translated #} 24 |
{{ _('On Read the Docs') }}
25 |
26 | {{ _('Project Home') }} 27 |
28 |
29 | {{ _('Builds') }} 30 |
31 |
32 |
33 | 34 | {% endif %} 35 | -------------------------------------------------------------------------------- /tutorial/tutorialmap.txt: -------------------------------------------------------------------------------- 1 | /windows/d3d11/(.*) /$1/?platform=windows&graphicsapi=d3d11 2 | /windows/d3d12/(.*) /$1/?platform=windows&graphicsapi=d3d12 3 | /windows/opengl/(.*) /$1/?platform=windows&graphicsapi=opengl 4 | /windows/vulkan/(.*) /$1/?platform=windows&graphicsapi=vulkan 5 | /linux/opengl/(.*) /$1/?platform=linux&graphicsapi=opengl 6 | /linux/vulkan/(.*) /$1/?platform=linux&graphicsapi=vulkan 7 | /android/opengles/(.*) /$1/?platform=android&graphicsapi=opengles 8 | /android/vulkan/(.*) /$1/?platform=android&graphicsapi=vulkan 9 | --------------------------------------------------------------------------------