背景
- OpenGL で HW accelerated が必須もしくは強く推奨される C++ アプリを開発している
- 多量のポリゴン描画するとか, shader 使うとか
- UI ほしいので, imgui 使う
- Windows, Linux 両方で動かしたい
- Windows では基本リリース物(.exe)が動けばよいので, 開発時は慣れきった Linux で行いたい
- clang address sanitizer を Windows でも使いたい
とりあえず OpenGL 3.3(NVIDIA GPU で確認)が HW acclerated(つまり CPU エミュレーションではなく GPU を使ってくれる)で動くのを確認しました.
インストール, 設定
llvm-mingw(clang) 入れます.
cmake, optional で ninja あたりもいれておきます.
libunwind.dll などへのパスを LD_LIBRARY_PATH に追加しておきます.
OpenGL 開発環境としては, glad https://glad.dav1d.de/ で extension loader, glfw3 で画面生成環境を作るのが推奨です.
imgui では glfw3 + opengl3 を使います(OpenGL 3.3+ の機能を使わないのであれば, opengl2 でもいいかも)
あとは cmake で llvm-mingw cross するように CMakeLists.txt
を書き書きします!
(MinGW gcc を使う場合も同等)
wine64 を入れます.
apt で入るのでも行けるかもしれませんが, 今回は執筆時点で最新 stable 5.0 を使いました.
Ubuntu 18.04 に WINE 最新版(2020/05/10 時点 stable 5.0) apt package をインストールするメモ
https://qiita.com/syoyo/items/69d25664ab0e7f537ae8
a.exe
を wine64 a.exe
で起動するのはめんどいので, a.out
のように ./a.exe
のようにして起動できるようにします.
binfmt + wine で Windows バイナリを Linux で ./a.exe のようにして実行するメモ
https://qiita.com/syoyo/items/9fd8758ea3878c36e807
これで完成です!
MinGW(llvm-mingw clang) cross compiled imgui(OpenGL 3.3) Win64 app runs finely on Ubuntu 18.04 + wine64(use binfmt to directly launch .exe) with HW accelerated GPU(NV GPU)!!!! 🥳🎉💪🥰 You can develop OpenGL 3.3 Win64 app on Linux without VS/MSVC!!! pic.twitter.com/ssZRbd1UWk
— Syoyo Fujita 🌸 レイトラ 🐯 2 周年 🎉 (@syoyo) June 1, 2020
wine 独自の OpenGL 設定などは不要でした.
wine の OpenGL 実装が, うまく Linux 側の OpenGL ドライバを叩いてくれているようです.
発展
Windows に VNC や RDP で繋いで, IDE としては Visual Studio をつかう.
Windows 機を別途用意します.
ディスクを NFS or samba なりでマウントしておき, git repo フォルダを Windows と Linux マシンで両方から見えるようしておく.
Windows で OpenGL/Vulkan アプリを動かして画面をイントラネットで VNC などで転送したいメモ
https://qiita.com/syoyo/items/909f5915252ba5f197a0
快適なテキスト編集のために, 画面転送オプションで非圧縮モードを選びましょう!
TODO
-
Vulkan API が動くか試す.
- Wine 5.0 から Vulkan 1.1 が対応されています https://www.linuxuprising.com/2020/01/wine-50-stable-released-with-vulkan-11.html
- 現状 NVIDIA GPU は Vulkan 1.1 までの対応なので, ちょうどよいでしょう.