ラズパイ4Bで動かず。
情報源
- https://qiita.com/benikabocha/items/ae9d48e314f51746f453
- https://github.com/benikabocha/saba/blob/master/README.jp.md
手順
sudo apt-get install libbullet-dev sudo apt-get install libglfw3-dev
git clone https://github.com/benikabocha/saba.git cd saba mkdir build cd build cmake .. make -j4 ./saba_viewer
makeでエラーになった……。
[ 89%] Built target SabaViewer make: *** [Makefile:95: all] エラー 2
makeの-j4
オプションをとって再実行すると進んだが、やはり同じエラー。
make
[ 98%] Building CXX object example/CMakeFiles/simple_mmd_viewer_glfw.dir/simple_mmd_viewer_glfw.cpp.o /tmp/work/saba/example/simple_mmd_viewer_glfw.cpp: In function ‘bool SampleMain(std::vector<std::__cxx11::basic_string<char> >&)’: /tmp/work/saba/example/simple_mmd_viewer_glfw.cpp:1245:18: error: ‘GLFW_TRANSPARENT_FRAMEBUFFER’ was not declared in this scope glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GL_TRUE); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ /tmp/work/saba/example/simple_mmd_viewer_glfw.cpp:1245:18: note: suggested alternative: ‘GL_READ_FRAMEBUFFER’ glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GL_TRUE); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ GL_READ_FRAMEBUFFER make[2]: *** [example/CMakeFiles/simple_mmd_viewer_glfw.dir/build.make:63: example/CMakeFiles/simple_mmd_viewer_glfw.dir/simple_mmd_viewer_glfw.cpp.o] エラー 1 make[1]: *** [CMakeFiles/Makefile2:469: example/CMakeFiles/simple_mmd_viewer_glfw.dir/all] エラー 2 make: *** [Makefile:95: all] エラー 2
./build/Makefile
の95行目は以下。
$(MAKE) -f CMakeFiles/Makefile2 all
./build/CMakeFiles/Makefile2
以下でググると「メモリ不足」が原因らしい。
make: *** [Makefile:95: all] エラー 2
ログを見るとコードにエラーがあるように見える。
[ 6%] Built target fcpp [ 36%] Built target lua [ 59%] Built target Saba [ 61%] Built target mmd2obj [ 62%] Building CXX object example/CMakeFiles/simple_mmd_viewer_glfw.dir/simple_mmd_viewer_glfw.cpp.o [ 88%] Built target SabaViewer [ 90%] Built target saba_viewer [ 98%] Built target gtests /tmp/work/saba/example/simple_mmd_viewer_glfw.cpp: In function ‘bool SampleMain(std::vector<std::__cxx11::basic_string<char> >&)’: /tmp/work/saba/example/simple_mmd_viewer_glfw.cpp:1245:18: error: ‘GLFW_TRANSPARENT_FRAMEBUFFER’ was not declared in this scope glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GL_TRUE); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ /tmp/work/saba/example/simple_mmd_viewer_glfw.cpp:1245:18: note: suggested alternative: ‘GL_READ_FRAMEBUFFER’ glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GL_TRUE); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ GL_READ_FRAMEBUFFER make[2]: *** [example/CMakeFiles/simple_mmd_viewer_glfw.dir/build.make:63: example/CMakeFiles/simple_mmd_viewer_glfw.dir/simple_mmd_viewer_glfw.cpp.o] エラー 1 make[1]: *** [CMakeFiles/Makefile2:469: example/CMakeFiles/simple_mmd_viewer_glfw.dir/all] エラー 2 make: *** [Makefile:95: all] エラー 2
エラー:「GLFW_TRANSPARENT_FRAMEBUFFER」はこのスコープで宣言されていません 注:代替案:「GL_READ_FRAMEBUFFER」
ググってみると定義値が出た。
#define GLFW_TRANSPARENT_FRAMEBUFFER 0x0002000A
Window framebuffer transparency window hint and window attribute.
vim /tmp/work/saba/example/simple_mmd_viewer_glfw.cpp
:1245
、Enter
して1245行目を表示。定義#define ...
を追加。:w
で書き込み。
#define GLFW_TRANSPARENT_FRAMEBUFFER 0x0002000A glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GL_TRUE);
再びビルド。
make -j4
[ 6%] Built target fcpp [ 36%] Built target lua [ 59%] Built target Saba Scanning dependencies of target simple_mmd_viewer_glfw [ 61%] Built target mmd2obj [ 62%] Building CXX object example/CMakeFiles/simple_mmd_viewer_glfw.dir/simple_mmd_viewer_glfw.cpp.o [ 88%] Built target SabaViewer [ 94%] Built target saba_viewer [ 98%] Built target gtests [ 99%] Linking CXX executable simple_mmd_viewer_glfw [100%] Built target simple_mmd_viewer_glfw
完了!
./saba_viewer
実行するもエラー……。
$ ./saba_viewer [2020-04-26 11:27:46.652] [default] [info] Start [2020-04-26 11:27:46.806] [default] [info] Disable MSAA [2020-04-26 11:27:46.806] [default] [info] Execute Path = /tmp/work/saba/build/saba_viewer [2020-04-26 11:27:46.806] [default] [info] CurDir = /tmp/work/saba/build [2020-04-26 11:27:47.346] [default] [error] Window Create Fail.
さっきコード修正した行を以下のように修正。これはエラーに出ていたGL_READ_FRAMEBUFFER
を使ってみた。
//#define GLFW_TRANSPARENT_FRAMEBUFFER 0x0002000A // glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GL_TRUE); glfwWindowHint(GL_READ_FRAMEBUFFER, GL_TRUE);
再度実行するも、同様のエラー……。
GLFWをビルドしてみる。
$ git clone https://github.com/benikabocha/saba.git fatal: destination path 'saba' already exists and is not an empty directory. $ cd saba $ git submodule init Submodule 'external/glfw' (https://github.com/glfw/glfw.git) registered for path 'external/glfw' Submodule 'external/glslang' (https://github.com/KhronosGroup/glslang.git) registered for path 'external/glslang' $ git submodule update Cloning into '/tmp/work/saba/external/glfw'... Cloning into '/tmp/work/saba/external/glslang'... Submodule path 'external/glfw': checked out '999f3556fdd80983b10051746264489f2cb1ef16' Submodule path 'external/glslang': checked out '1c573fbcfba6b3d631008b1babc838501ca925d3' $ mkdir build mkdir: ディレクトリ `build' を作成できません: ファイルが存在します $ cd build $ cmake -D SABA_FORCE_GLFW_BUILD .. Parse error in command line argument: -D Should be: VAR:type=value CMake Error: No cmake script provided. CMake Error: Problem processing arguments. Aborting.
cmake -D SABA_FORCE_GLFW_BUILD=1 ..
CMake Deprecation Warning at external/glfw/CMakeLists.txt:10 (cmake_policy): The OLD behavior for policy CMP0042 will be removed from a future version of CMake. The cmake-policies(7) manual explains that the OLD behaviors of all policies are deprecated and that a policy should be set to OLD only under specific short-term circumstances. Projects should be ported to the NEW behavior and not rely on setting a policy to OLD. -- Found Vulkan: /usr/lib/arm-linux-gnueabihf/libvulkan.so -- Using X11 for window creation -- Configuring done -- Generating done -- Build files have been written to: /tmp/work/saba/build
ダメ。わけわからん。
所感
Sabaは使えなかった。
対象環境
- Raspbierry pi 4 Model B
- Raspbian buster 10.0 2019-09-26 ※
- bash 5.0.3(1)-release
$ uname -a Linux raspberrypi 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux