これ、

Draft: VR Mode (!8671) · Merge requests · Plasma / KWin · GitLab

Monado (Rokid Max, HP G2) and WiVRn (Quest 3)

とあり、うちでも動かせるようになりそう。 自前で plasama kwin をビルドして動かすには、クンフーが足りないのでマージされてから試すことになるのだけど。

予行演習として QtQuick3D + OpenXR の実験からやってみようと思ったわけであります。

Qml を動かすには ?

arch linux は、 /usr/bin/qml があるので qml hoge.qml とすれば簡単に試せるのかと思いきや import QtQuick に失敗するぽい。 /usr/bin/qml を単体の interpleter として運用することが想定されているのかどうかが わからない。

qml command は諦めて host アプリをビルドすることにした。

https://pixi.prefix.dev/latest/

のビルド済み Qt6 を使えば、Windows でも動きそうな気がしたのでやってみた。

https://github.com/ousttrue/qt_sample

いちおうできたのだが注意するべき点があった。

qt6_add_qml_module が謎のエラーを出す

CMake Error at /usr/lib/cmake/Qt6Qml/Qt6QmlMacros.cmake:5499:EVAL:1 (cmake_language):
  cmake_language DEFER CALL may not be scheduled in directory:
function(_qt_internal_collect_qml_module_dependencies target)
    if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.19.0")
        string(JOIN " " collect_qml_module_dependencies_code
            "cmake_language(DEFER DIRECTORY \"${CMAKE_BINARY_DIR}\""
            "CALL _qt_internal_collect_qml_module_dependencies_deferred \"${target}\")"
        )
        cmake_language(EVAL CODE "${collect_qml_module_dependencies_code}")
    else()
        _qt_internal_collect_qml_module_dependencies_deferred("${target}")
    endif()
endfunction()
  • cmake-3.18 に下げることで回避できたが、qt6.10 は cmake-3.22 を要求するので、 -DQT_FORCE_MIN_CMAKE_VERSION_FOR_USING_QT=3.18 が必要。

ねばってみたところ、subdirs が原因とわかった。 すべて root に移すとうまくいった。

https://cmake.org/cmake/help/latest/command/cmake_language.html#defer

cmake_language(DEFER DIRECTORY)add_subdirectorynot be scheduled をおこしているぽい。

https://discourse.cmake.org/t/how-to-set-a-defer-call-for-the-directory-added-with-add-subdirectory/12843

なんと、subdirsadd_subdirectory に変えたらなおった !

https://cmake.org/cmake/help/latest/command/subdirs.html

Deprecated since version 3.0: Use the add_subdirectory() command instead.

Deprecated ... 知らねー。

QRangeModel のビルドが通らない

vc2022 では無理っぽい? 諦めた。 Windows でも build できるようにするならば、 c++17 でできる範囲が無難かも。 prebuilt の libc++ を配布しているものは見当らなかった。