CPlusPlus OP でできる事
自前のC++のソースコードをコンパイルして作成したプラグインを,TouchDesigner上で使用できるようになる.
事前にVisual Studioでコンパイルして作成したDLLファイルを,CPlusPlus OP (TOP/SOP/CHOP/DAT) からパスを指定することで読み込み.実行.
CUDA toolkitをインストールしておけば,同一ソースコードからCUDAを用いたGPUによる計算も可能.
サンプルコード上で仮想の関数が与えられているので,コード作成時にはそれをオーバーライドして使用することを想定.
CPlusPlus OP の実行手順
ここではC:\Program Files\Derivative\TouchDesigner\Samples\CPlusPlus\DAT
フォルダ中にあるCPlusPlusDATExampleを実行しながら説明する.
Visual Studio のインストール
以下のURLから最新のVisual Studio Communityをインストールする.
https://visualstudio.microsoft.com/ja/vs/community/
インストーラー中で,C++によるデスクトップ開発にチェックを入れておく.
C++ から DLL ファイルを作成する
TouchDesignerのインストールディレクトリにサンプルコードが保存されている(筆者環境ではC:\Program Files\Derivative\TouchDesigner\Samples\CPlusPlus
).
いくつかのサンプルがフォルダに分かれて配置されているが,今回はDATフォルダを実行して説明する.
DATフォルダ以下にあるCPlusPlusDATExample.slnを起動してVisual Studioを立ち上げる.
右側にあるソリューションエクスプローラーで,ソースコードを確認できる.
- CPlusPlus_Common.h: CPlusPlus OP共通で使用するクラスのヘッダファイル.編集しない.
- CPlusPlusDATEample.cpp: 作成するクラスCPlusPlusDATExampleのソースファイル
- CPlusPlusDATExample.h: 作成するクラスCPlusPlusDATExampleのヘッダファイル
- DAt_CPlusPlusBase.h: TouchDesignerが提供しているベースとなるクラスDAT_CPlusPlusBaseのヘッダファイル.編集しない.
CPlusPlusDATEampleクラスのexecute()関数がTouchDesignerの各フレームで実行される.
ビルド >> ソリューションのビルド を実行すると,コンパイルが行われDebugフォルダの中にCPlusPlusDATExample.dllというDLLファイルが作成される.
CPlusPlus OP で DLLファイルを読み込み
TouchDesignerを起動して CPlasPlas DATを作成.
Plugin Pathに上で作成したDLLファイルのパスを指定する.
上手くいけば画像のようにCPlusPlus DAT内に文字列が表示される.
デバッグの設定
Visual Studioでのデバッグ時に,TouchDesignerを自動で起動してブレークポイントに対応させることができる.
Visual Studioで プロジェクト >> CPlusPlusDATExampleのプロパティ を開く.
コマンドにTouchDesigner.exeのパスを記載.(筆者環境ではC:\Program Files\Derivative\TouchDesigner\bin\TouchDesigner.exe
)
コマンド引数に実行するtoeファイルのパスを記載.(筆者環境では,C:\Program Files\Derivative\TouchDesigner\Samples\CPlusPlus\DAT
にCPlusPlus_debugger.toeを配置し,$(ProjectDir)\CPlusPlus_debugger.toe
と指定した)
設定を適用してプロパティページを閉じる.
設定が上手くいっている場合には, デバッグ >> デバッグの開始 を実行するとTouchDesignerが自動で起動し,任意のブレークポイントで停止しデバッグが可能となる.
参考:
- Write a CPlusPlus Plugin, https://docs.derivative.ca/Write_a_CPlusPlus_Plugin
- TouchDesigner/CustomOperatorSamples, https://github.com/TouchDesigner/CustomOperatorSamples