Ubuntuとvimでopenframeworks開発

vimではないですが同様のことをされていました

https://qiita.com/nnn112358/items/b6834379e2eeeeae6793

## バージョン

ubuntu: 19.04
openframeworks: 0.10.1

## ドライバとCUDA

### プロプライエタリ・ドライバのインストール

```
ubuntu-drivers devices
```
でインストールされるドライバを確認


```
sudo ubuntu-drivers install
```
でインストール。nvidiaドライバもインストールされる

### nvidia driverインストール後注意

nvidiaドライバをインストールした後、下記を**コメント解除してから**再起動しないと、起動しなくなった

```conf:/etc/gdm3/custom.conf
#WaylandEnable=false
```
これを

```conf:/etc/gdm3/custom.conf
WaylandEnable=false
```
こうする

### CUDA

https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#ubuntu-installation

https://www.pugetsystems.com/labs/hpc/How-To-Install-CUDA-10-1-on-Ubuntu-19-04-1405/

https://help.sakura.ad.jp/hc/ja/articles/115000122721-CUDA-Toolkit-GPU%E3%82%AB%E3%83%BC%E3%83%89%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%83%BC%E5%B0%8E%E5%85%A5%E6%89%8B%E9%A0%86

```
sudo apt-get install freeglut3 freeglut3-dev libxi-dev libxmu-dev
```

[CUDA ZONE](https://developer.nvidia.com/cuda-zone)からrunfileをダウンロード

```
wget https://developer.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.105_418.39_linux.run
```

```:etc/profile.d/cuda.sh
export CUDA_HOME="/usr/local/cuda" 
export PATH="$CUDA_HOME/bin:$PATH" 
export LD_LIBRARY_PATH="/usr/local/lib:$CUDA_HOME/lib64:$LD_LIBRARY_PATH" 
export CPATH="/usr/local/include:$CUDA_HOME/include:$CPATH" 
export INCLUDE_PATH="$CUDA_HOME/include"
```



## Vim

### gVim

```sh
sudo apt update
sudo apt install vim-gtk3
```

### Vundle

vimのプラグイン管理にVundleを使うことにした

https://github.com/VundleVim/Vundle.vim

```sh
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
```

```vimscript:.vimrc
set nocompatible              " be iMproved, required
filetype off                  " required

set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

Plugin 'VundleVim/Vundle.vim'
"プラグインはここに追加していく

call vundle#end()            " required
filetype plugin indent on    " required
```

### YouCompleteMe

```
sudo apt install build-essential cmake python3-dev
```

自動補完

https://github.com/Valloric/YouCompleteMe

下記を追加

```vim:~/.vimrc
...
Plugin 'Valloric/YouCompleteMe'
...
```

```vim
:source %
:PluginInstall
```

```sh
sudo apt install build-essential cmake python3-dev
cd ~/.vim/bundle/YouCompleteMe
python3 install.py --clangd-completer
```



### clangd

YouCompleteMeにバンドルされているclangdは更新されていないそうなのでシステムにインストールしたバージョンを使う

https://clang.llvm.org/extra/clangd/Installation.html

```sh
sudo apt install clang-tools-8
```

```vim:~/.vimrc
let g:ycm_clangd_uses_ycmd_caching = 0
let g:ycm_clangd_binary_path = exepath("clangd")

```

#### Bear

clangdは [completion database](http://clang.llvm.org/docs/JSONCompilationDatabase.html)、すなわち**compile_commands.json**を参照して補完してくれる。compile_commands.jsonを作成するためにBearをインストールする

https://github.com/rizsotto/Bear

```sh
sudo apt install bear
```

用例 `bear make`

### vim-glsl

glslのシンタックスハイライト

https://github.com/tikhomirov/vim-glsl

```vim:~/.vimrc
...
Plugin 'tikhomirov/vim-glsl'
...
autocmd! BufNewFile,BufRead *.vs,*.fs,*.glslinc set ft=glsl
```

```vim
:source %
:PluginInstall
```

glslincファイルもシンタックスハイライトしたい

```vim:~/.vimrc
autocmd! BufNewFile,BufRead *.vs,*.fs,*.glslinc set ft=glsl
```

## その他

### clang-format

自動でフォーマットしたい

```
sudo apt install clang-format
```

用例として下記

```
find . -iname *.h -o -iname *.cpp | xargs clang-format -i
```


## openframeworks

https://openframeworks.cc/download/

解凍したフォルダを`of`という名前でホームフォルダに置いた前提で下記読んでください

```sh
cd ~of/scripts/linux/ubuntu
sudo ./install_dependencies.sh
sudo ./install_codecs.sh
cd ~of/scripts/linux
./compileOF.sh -j3
```

## 例として：NoiseWorkshop

https://github.com/wasawi/NoiseWorkshop.git

ver0.10で動くように修正してくれている（完全ではないようでした）

```sh
cd ~/of/apps
git clone https://github.com/wasawi/NoiseWorkshop.git
cd ~/of/apps/NoiseWorkshop
git checkout update_OF1.0
```

### NoiseWorkshopで使われているアドオン

```
cd ~/of/addons
git clone https://github.com/kylemcdonald/ofxCv.git
git clone https://github.com/bakercp/ofxIO.git
git clone https://github.com/bakercp/ofxSerial.git
git clone https://github.com/andreasmuller/ofxAutoReloadedShader.git
git clone https://github.com/memo/ofxMSAOpenCL.git
git clone https://github.com/memo/ofxMSAPingPong.git
```

### 開発手順

#### 空のプロジェクトをコピー

`~/of/myApps/emptyExample`をコピーして好きなプロジェクト名に変える

#### アドオンの追記

addons.makeに使用するアドオンを改行区切りで入力

過剰だが下記のようにすればNoiseWorkshopすべての例が動く

```:addons.make
ofxGui
ofxOpenCv
ofxOsc
ofxCv
ofxPoco
ofxIO
ofxSerial
ofxAutoReloadedShader
ofxKinect
ofxMSAOpenCL
ofxMSAPingPong
```

#### bear make

clangdで補完できるように、vimを起動するまえに`bear make`する。`compile_commands.json`ができる

#### 準備完了！

```
cd src
gvim ofApp.h
```